数据库子查询(什么是子查询)
本篇文章给大家谈谈数据库子查询,以及什么是子查询对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。
MySQL数据库中如何进行子查询
子查询是将一个查询语句嵌套在另一个查询语句中,内层查询语句的查询结果,可以作为外层查询语句提供查询条件。子查询中可能包括IN、NOT IN、ANY、ALL、EXISTS和NOT EXISTS等关键字,还包括比较运算符,如“=”、“!=”等,那如何进行子查询,具体操作如下:
1.首先,在一个查询中的查询结果作为外层查询的条件,可以用IN关键字,代码如下:
SELECT* FROM city WHERE CountryCode IN(SELECT Code FROM country);如下图所示:
2.其次,外层查询的条件不在内层查询结果,可以用NOT IN关键字,代码如下:
SELECT* FROM city WHERE CountryCode NOT IN(SELECT Code FROM country);如下图所示:
3.使用EXISTS关键字查询时,内层查询语句不返回查询的记录,而是返回一个Boolean值;当内层查询返回的值为true时,外层查询语句将进行查询,如果返回false时,将不进行查询或查询结果为空,代码如下:
SELECT* FROM city WHERE EXISTS(SELECT Name FROM country);如下图所示:
4.由第三步可知,与EXISTS相对的是NOT EXISTS,当内层查询返回的值为false时,外层查询语句将进行查询,如果返回true时,将不进行查询或查询结果为空,代码如下:
SELECT* FROM city WHERE NOT EXISTS(SELECT Name FROM country);如下图所示:
5.满足其中的任一条件,就可以通过该条件来执行外层查询语句,用关键字ANY,代码如下:
SELECT* FROM city WHERE Population>= ANY(SELECT Population FROM country);如下图所示:
6.子查询还包含比较运算符,有“>="、“<="、"!="等关键字,代码如下:
SELECT* FROM city WHERE Population>=(SELECT Population FROM country WHERE Name='Afghanistan');
SELECT* FROM city WHERE Population<=(SELECT Population FROM country WHERE Name='Afghanistan');
SELECT* FROM city WHERE Population!=(SELECT Population FROM country WHERE Name='Afghanistan');如下图所示:
7.满足所有条件,只有满足内层查询语句返回所有结果,代码如下:
SELECT* FROM city WHERE Population>= ALL(SELECT Population FROM country WHERE Name='Afghanistan');如下图所示:
注意事项
注意子查询的用法
注意子查询中各个关键字的区别
什么是子查询
子查询就是查询语句的嵌套,即在外部查询中还包含一个内部查询。当一个查询是另一个查询的条件时,称之为子查询。子查询可以使用几个简单命令构造功能强大的复合命令,子查询最常用于SELECT语句的where子句中。另外,子查询可作为一个临时表来使用,完成更为复杂表联结数据的检索功能。子查询类型1.SOHSOHwhere类型子查询用major.sql脚本初始化数据库建表环境,以下语句就是一个标准的子查询例子,其功能是检索出主修学分大于国际贸易专业学分的专业。
SELECT*FROMMajorwheremajorTotalCredit>(SELECTmajorTotalCreditFROMMajorWHEREmajorName='国际贸易')where语句后面条件的括号内为一个子查询:SELECTmajorTotalCreditFROMMajorwheremajorName='国际贸易'查询出来的结果将作为外部查询的条件参数,如本子查询检索到值为196,则外部查询相当于如下语句:SELECT*FROMMajorwheremajorTotalCredit>196外部查询的结果值则为整个查询语句的最终检索数据集,如图子查询操作1所示。
子查询操作1
66037788712
2.from类型子查询用student_info.sql脚本初始化数据库建表环境,如何实现从学生表(student_info)查询出有不及格科目学生的平均成绩?分两步可实现上面的功能要求。
((1)查询出有不及格科目的学生。
select*fromstudent_infowheremath
selectsn
什么是相关子查询
问题一:SQL里,什么叫相关子查询?相关子查询指的是查询中再查询,通常是以一个查询作为条件来供另一个查询使用1>非相关子查询是独立于外部查询的子查询,子查询总共执行一次,执行完毕后将值传递给外部查询。
相关子查询的执行依赖于外部查询的数据,外部查询执行一行,子查询就执行一次。
问题二:相关子查询与不相关子查询有什么区别不相关子查询是指子查询独立于外层语句(主查询),他不依赖于其外层语句的操作结果,他们执行时可分为两个独立的步骤,即先执行子查询,在执行外层查询。例如:
SELECT姓名 FROM STUDENT WHERE入学成绩>(select avg(入学成绩) FROM STUDENT)
相关子查询时一种其子查询和外层相互交叉的数据检索方法.从概念上讲包含相关子查询的语句在执行时部能分为一先一后两个步骤.
问题三:数据库,相关子查询是怎样实现的啊?你可以这样理解:
select sno, o form sc x;把全表中的数据查询出来
然后,再操作
select avg(grade) from sc y where y.sno=x.sno;根据上面的查询中的每一个x.sno查询对应的平均成绩
最后,检查x.grade比其平均成绩大的数据,进行输出
问题四:SQL子查询分别用于什么情况下条件里需要用到另一个查询的结果
问题五:为什么要用嵌套查询?什么是相关子查询和不相关子查询?有什么区别?...嵌套查询是通过where子句的子查询返回内层查询的值作为查询条件,进而实现外层查询的查询结果。
相关子查询:执行查询的时候先取得外层查询的一个属性值,然后执行与此属性值相关的子查询,执行完毕后再取得外层父查询的下一个值,依次再来重复执行子查询;
不相关子查询:子查询的执行不需要提前取得父查询的值,只是作为父查询的查询条件。
索引:使用索引是为了加快查询速度。
问题六:相关子查询事例,具体点的,都有哪些类型,最好能举出实例 1、使用别名的子查询
USE AdventureWorks;
GO
SELECT e1.EmployeeID, e1.ManagerID
FROM HumanResources.Employee AS e1
INNER JOIN HumanResources.Employee AS e2
ON e1.ManagerID= e2.ManagerID
AND e2.EmployeeID= 12
2、使用 IN的子查询和使用 NOT IN的子查询。
USE AdventureWorks;
GO
SELECT Name
FROM Production.Product
WHERE ProductSubcategoryID in('17')------not in不再给出实例。
3、UPDATE、DELETE和 INSERT语句中的子查询。
USE AdventureWorks;
GO
UPDATE Production.Product
SET ListPrice= ListPrice* 2
WHERE ProductID IN
(SELECT ProductID
FROM Purchasing.ProductVendor
WHERE VendorID= 51);
GO--------delete和insert不再给出实例。
4、使用比较运算符的子查询。子查询可以由一个比较运算符(=、、>、>=、、!
(SELECT AVG(ListPrice)
FROM Production.Product)----其他不再给出实例。
5、用 ANY、SOME或 ALL修改的比较运算符
USE AdventureWorks;
GO
SELECT Name
FROM Production.Product
WHERE ListPrice>= ANY
(SELECT MAX(ListPrice)
FROM Production.Product
GROUP BY ProductSubcategoryID)----some和all不再给出实例,做相应替换即可。
6、使用 EXISTS的子查询和使用 NOT EXISTS的子查询。
USE AdventureWorks;
GO
SELECT Name
FROM Production.Product
WHERE EXISTS
(SELECT*
FROM Production.ProductSubcategory
WHERE ProductSubcategoryID=
Production.Product.ProductSubcategoryID
AND Name='Wheels')----not exists不再给出实例,做相应替代即可。
7、用于替代表达式的子查询。
USE AdventureWorks;
GO
SELECT Name, ListPrice,
(SELECT AVG(ListPrice) FROM Production.P......>>
问题七:sql子查询和连接查询的区别是什么呢?悬赏100求答案子查询就是查询中又嵌套的查询,嵌套的级数随各数据库厂商的设定而有所不同,一般最大嵌套数不超过15级,实际应用中,一般不要超过2级,否则代码难以理解.一般来说,所有嵌套子查询都可改写为非嵌套的查询,但是这样将导致代码量增大.子查询就如递归函数一样,有时侯使用起来能达到事半功倍之效,只是其执行效率同样较低,有时用自身连接可代替某些子查询,另外,某些相关子查询也可改写成非相关子查询
表连接都可以用子查询,但不是所有子查询都能用表连接替换,子查询比较灵活,方便,形式多样,适合用于作为查询的筛选条件,而表连接更适合与查看多表的数据
子查询不一定需要两个表有关联字段,而连接查询必须有字段关联(所谓的主外键关系)
问题八:嵌套查询和子查询是一样的概念吗?嵌套查询
是包括外层主查询和内层子查询的查询。
子查询还可以包括子查询,可以是多层子查询,主查询也可以包括多个子查询。
子查询
就是括号中的查询。
看出来了吧:子查询是嵌套查询必不可少的组成部份。
他们虽不是一个概念,但是相关的概念。
如何在MySQL数据库进行子查询
方法/步骤
1
首先,在一个查询中的查询结果作为外层查询的条件,可以用IN关键字,代码如下:
SELECT* FROM city WHERE CountryCode IN(SELECT Code FROM country);
如下图所示:
2
其次,外层查询的条件不在内层查询结果,可以用NOT IN关键字,代码如下:
SELECT* FROM city WHERE CountryCode NOT IN(SELECT Code FROM country);
如下图所示:
3
使用EXISTS关键字查询时,内层查询语句不返回查询的记录,而是返回一个Boolean值;当内层查询返回的值为true时,外层查询语句将进行查询,如果返回false时,将不进行查询或查询结果为空,代码如下:
SELECT* FROM city WHERE EXISTS(SELECT Name FROM country);
如下图所示:
4
由第三步可知,与EXISTS相对的是NOT EXISTS,当内层查询返回的值为false时,外层查询语句将进行查询,如果返回true时,将不进行查询或查询结果为空,代码如下:
SELECT* FROM city WHERE NOT EXISTS(SELECT Name FROM country);
如下图所示:
5
满足其中的任一条件,就可以通过该条件来执行外层查询语句,用关键字ANY,代码如下:
SELECT* FROM city WHERE Population>= ANY(SELECT Population FROM country);
如下图所示:
6
子查询还包含比较运算符,有“>="、“<="、"!="等关键字,代码如下:
SELECT* FROM city WHERE Population>=(SELECT Population FROM country WHERE Name='Afghanistan');
SELECT* FROM city WHERE Population<=(SELECT Population FROM country WHERE Name='Afghanistan');
SELECT* FROM city WHERE Population!=(SELECT Population FROM country WHERE Name='Afghanistan');
如下图所示:
7
满足所有条件,只有满足内层查询语句返回所有结果,代码如下:
SELECT* FROM city WHERE Population>= ALL(SELECT Population FROM country WHERE Name='Afghanistan');
如下图所示:
http://jingyan.baidu.com/article/73c3ce280d68f2e50243d960.html
数据库子查询和什么是子查询的问题分享结束啦,以上的文章解决了您的问题吗?欢迎您下次再来哦!