SQL语句子查询

2019-10-11 12:08 来源:未知

 

图片 1

3.分包ANY(SOME)或ALL谓词的子查询:

子查询再次来到单值时方可用相比较运算符,但回到多值时要用ANY(有的系统用SOME)或ALL谓词修饰符。使用ANY或ALL也非得同一时间接选举用相比较运算符。

>ANY   :  大于子查询结果中的有个别值

>ALL    :  大于子查询结果中的全体值

=ANY   :   等于子查询结果中的有个别值

 

查询非Computer系中比Computer系自便三个上学的小孩子年龄小的学员姓名和年龄。

SELECT Sname,Sage FROM Student

WHERE Sage<ANY(SELECT Sage FROM Student WHERE Sdegree='CS') AND Sdegree!='CS';

 可选取聚焦函数,且功效更加高:

SELECT Sname,Sage FROM Student

WHERE Sage<

(SELECT MAX(Sage) FROM Student WHERE Sdegree='CS')

AND Sdegree!='CS';

 

-- =ANY 与子查询IN一样
SELECT * FROM T2 WHERE N=ANY (SELECT N FROM T1)
SELECT * FROM T2 WHERE N IN (SELECT N FROM T1)

我们先看图说话,如图1.

1.包括IN谓词的子查询:

子查询往往是三个相会。

查询与迈克在同一个系的学习者:

SELECT Sno,Sname,Sdept FROM Student WHERE Sdept IN
(SELECT Sdept FROM Student WHERE Sname='Mike');

子查询的查询条件不依据于父查询,成称为不相关子查询。

子查询的询问条件信任于父查询,成称为相关子查询。

 

查询选修了DB_Design的上学的儿童学好和姓名。

SELECT Sno,Sname FROM Student WHERE Sno IN
(SELECT Sno FROM SC WHERE Cno IN
(SELECT Cno FROM Course WHERE Cname='DB_Design')
);

 

--ALL,ANY,SOME 的子查询
-- >ALL 父查询中的结果集大于子查询中每二个结实聚集的值,则为真
SELECT * FROM T2 WHERE N>ALL (SELECT N FROM T1)

子查询的天性:

1、子查询必需放在一对小括号内

2、“=”相比运算符,还能够与其余的比较运算符一同利用,须求子查询的列只好有二个

3、子查询普通作为WHERE的尺度

4、子查询中无法冒出O路虎极光DE奥迪Q5 BY 子句,如若想要排序,只可以对父查询举行排序,也等于说ORDER BY只好出现在父查询语句中。


嵌套查询

贰个SELECT  FROM  WHERE语句称为三个查询块。

嵌套查询:将八个查询块嵌套在另七个查询块的WHERE子句可能HAVING短语的尺度中的查询。

注:子查询的SELECT语句中不能够选拔O途锐DER BY子句,O翼虎DER BY子句只好对终极查询结果排序。

 

-- >ANY,SOME 父查询中的结果集大于子查询中大肆二个结实集中的值,则为真
SELECT * FROM T2 WHERE N>ANY(SELECT N FROM T1)
SELECT * FROM T2 WHERE N>SOME(SELECT N FROM T1)

注意:

当子查询中不是独有一列的景观下,会报那样的一无所长。如图2,所以我们将红框的星号,改成想查询的某一列就足以了。如图3.

图片 2

图2

图片 3

图3

2.包蕴相比较运算符的子查询:

当客商确切知道内层查询重返的是单个值时,能够用>、<、=、>=、<=、!=(<>)等相比较运算符。

 

SELECT Sno,Sname,Sdegree FROM Student WHERE Sdegree=
(SELECT Sdegree FROM Student WHERE Sname='Mike');

 

SELECT Sno,Cno FROM SC x WHERE Grade>=
(SELECT AVG(Grade) FROM SC y WHERE y.Sno=x.Sno);  (相关子查询)

 

图片 4

(3)比较运算符

子查询能够由多个相比较运算符和一些入眼字引进,查询结果重回二个值列表。语法如下:

SELECT *

FROM table

WHERE XX operator【ANY/ALL/SOME】(子查询)

operator表示相比运算符:ANY、ALL和SOME是SQL扶持的在子查询中张开相比的基本点字。

ANY和SOME:表示外围查询范围规范与子查询再次来到值进行相比较,假使外围查询中有自由四个数据满意相比较标准,则整个回去;使用ALL关键字表示外围查询范围标准与子查询重返值进行比较,外围子查询重临结果必得全部满足比较基准。

图片 5

图4

图片 6

图5

1、>ALL : 父查询中山高校于子查询结果中的全部值,如图

图片 7

图6

2、>ANY :父查询的列值中,必得最少大于子查询再次回到值列表中的贰个值,如图7

图片 8

图7

瞩目:SOME与ANY的意义与用法同样。如图8.

图片 9

图8

3、=ANY和子查询IN:父查询中列值必得在子查询再次回到的列表中留存,如图9

图片 10

图9

4、<>ANY 和 NOT IN:

<>ANY: 父查询的结果中列的值与子查询再次回到的值列表中有贰个不均等的就能够,也等于ORAV4可能的涉及,父查询中列的值不等于子查询中值a,恐怕不等于b,或然不等于c。

NOT IN:父查询的结果中列的值必得不能够存在,在子查询的再次来到值的列表中,相当于AND何况的涉及,父查询中列的值不等于子查询中的值a,而且不等于b,并且不等于c。

图片 11

 4.带有EXISTS谓词的子查询:

EXISTS代表存在量词∃。带有EXISTS谓词的子查询不回来任何数据,只发生逻辑值true或然false。

询问全数选修了1001科目的学生姓名。

SELECT Sname FROM Student WHERE EXISTS
(SELECT * FROM Sc WHERE Student.Sno=Sc.Sno AND Cno='1001');

查询未有选修1001科目标学习者姓名。

SELECT Sname FROM Student WHERE NOT EXISTS
(SELECT * FROM Sc WHERE Student.Sno=Sc.Sno AND Cno='1001');

 

部分带EXISTS或NOT EXISTS谓词的子查询无法被其他花样的子查询替代,但全体带IN谓词、相比运算符、ANY和ALL谓词的子查询都能用到EXISTS谓词的子查询替代。

 

SQL中一向不全称量词,全称量词用存在量词表示。

查询选修了整套科指标学习者姓名。(有一点绕)

SELECT Sname FROM Student WHERE NOT EXISTS(
SELECT * FROM Course WHERE NOT EXISTS(
SELECT * FROM Sc WHERE Student.Sno=Sc.Sno AND Course.Cno=Sc.Cno));

 

SQL中尚无包罗逻辑运算 p→q=¬p∨q

查询起码选修了学生2014002选修的万事科指标学员号码。

 

SELECT DISTINCT Sno FROM SC SCX WHERE NOT EXISTS(
SELECT * FROM SC SCY WHERE SCY.Sno='2016002' AND NOT EXISTS (
SELECT * FROM SC SCZ WHERE SCZ.Sno=SCX.Sno AND SCZ.Cno=SCY.Cno));

图片 12

看图之后,大家可以很轻巧的领悟了子查询。

--T1(2,3)
--T2(1,2,3,4)

(1)使用IN关键字

             IN关键字:能够使父查询相称子查询再次回到的四个单列值

            NOT IN:将父查询条件中的表明式与子查询重返的结果进行相比,把不相配的新闻体现出现。

举例说:在【教务管理体系】数据库中,查询和“小花四嫂”在同三个“年级”的学习者“姓名”、“性别”、“年级”的新闻。语句如下:

           USE 教务管理种类

           SELECT 姓名,性别,年级 

           FROM 学生消息 S1

           WHERE S1.年级  IN  (SELECT 年级 FROM 学生音信 S2  WHERE S2.姓名=‘小花表嫂’)

本实例中询问也能够利用本身连接来完结,代码如下:

          USE 教务管理种类

          SELECT S1.姓名,S1.性别,S1.年级

          FROM 学生消息 S1,S2

          WHERE S1.年级=S2.年级 AND S2.姓名=‘小花四嫂’、

图片 13

(2)使用EXISTS关键字

EXISTS:只管敬仲查询是不是有再次来到行,如查有重回行,再次回到结果为真true,不然为假false。并不使用子查询的结果,仅用于测量检验子查询是还是不是有重回结果。

NOT EXISTS: 当子查询再次来到空行或询问战败时,外围查询成功;而子查询成功时或回到非空行,则外围查询失利。

语法格式:

SELECT * FROM table WHERE EXISTS / NOT EXISTS(子查询语句)

瞩目:借使实查询中能够回来数据行,即查询成功,则子查询外围的询问也能打响;借使实查询战败那么外围的询问也会停业,这里EXISTS连接的子查询能够领略为外部查询的触及条件。

-- <>ANY 与NOT IN
--<>ANY
--OWrangler成效父查询中的结果集不等于子查询中的a可能b或许c,则为真
SELECT * FROM T2 WHERE N <>ANY(SELECT * FROM T1)

图1

--NOT IN
--AND功能父查询中的结果集不等于子查询中私行三个结果聚集的值,则为真
SELECT * FROM T2 WHERE N NOT IN(SELECT * FROM T1)

子查询:在八个查询语句中包括了其余多少个查询语句

 


图片 14

依据子查询再次来到行数的分歧又可将其分成:重临多行的子查询。返回单行的子查询和嵌套子查询。

1、重临多行的子查询

       重返多行的子查询是指实践查询语句获得的结果集中,再次来到了多行数据的子查询。平时景象下,对子查询的顶牛都是经过WHERE子句达成的,但实质上仍是能够动用于SELECT语句以致HAVING短语中。

       在子查询中得以行使IN关键字。EXISTS关键字和比较运算符来连接表。

预加防范八个表:

 

图片 15

 

 

TAG标签: 数据库
版权声明:本文由彩民之家高手论坛发布于彩民之家高手论坛,转载请注明出处:SQL语句子查询