欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  数据库

MySQl心得4--4--数据库查询4--子查询_MySQL

程序员文章站 2022-04-07 15:05:28
...
bitsCN.com 1.子查询 在查询条件中,可以使用另一个查询的结果作为条件的一部分,例如,判定列值是否与某个查询的结果集中的值相等,作为查询条件一部分的查询称为子查询。SQL标准允许SELECT多层嵌套使用,用来表示复杂的查询。子查询除了可以用在SELECT语句中,还可以用在INSERT、UPDATE及DELETE语句中。子查询通常与IN、EXIST谓词及比较运算符结合使用。 2.IN子查询 IN子查询用于进行一个给定值是否在子查询结果集中的判断,格式为: expression [ NOT ] IN (subquery ) 其中,subquery是子查询。当表达式expression与子查询subquery的结果表中的某个值相等时,IN谓词返回TRUE,否则返回FALSE;若使用了NOT,则返回的值刚好相反。 例:查找在XSCJ数据库中选修了课程号为206的课程的学生的姓名、学号。 SELECT 姓名,学号 FROM XS WHERE 学号 IN (SELECT 学号 FROM XS_KC WHERE课程号 = '206' ); 说明:在执行包含子查询的SELECT语句时,系统先执行子查询,产生一个结果表,再执行查询。本例中,先执行子查询: SELECT 学号 FROM XS_KC WHERE 课程号='206'; 得到一个只含有学号列的表,XS_KC中的每个课程名列值为206的行在结果表中都有一行。再执行外查询,若XS表中某行的学号列值等于子查询结果表中的任一个值,则该行就被选择。 注意:IN子查询只能返回一列数据。对于较复杂的查询,可以使用嵌套的子查询。 例:查找未选修离散数学的学生的姓名、学号、专业名。 SELECT 姓名,学号,专业名 FROM XS WHERE 学号 NOT IN( SELECT学号 FROM XS_KC WHERE课程号 IN (SELECT 课程号 FROM KC WHERE 课程名 ='离散数学')); 3.比较子查询 这种子查询可以认为是IN子查询的扩展,它使表达式的值与子查询的结果进行比较运算,格式为: expression { | >= | != | } { ALL | SOME | ANY } ( subquery ) 其中,expression为要进行比较的表达式,subquery是子查询。ALL、SOME和ANY说明对比较运算的限制。 如果子查询的结果集只返回一行数据时,可以通过比较运算符直接比较。 ALL指定表达式要与子查询结果集中的每个值都进行比较,当表达式与每个值都满足比较的关系时,才返回TRUE,否则返回FALSE; SOME或ANY是同义词,表示表达式只要与子查询结果集中的某个值满足比较的关系时,就返回TRUE,否则返回FALSE。 例: 查找XS表中比所有计算机系的学生年龄都大的学生学号、姓名、专业名、出生日期。 SELECT 学号, 姓名, 专业名, 出生日期 FROM XS WHERE 出生日期 = | 4; 读取下一行: handler KC read NEXT; 关闭该表: handler KC close; 作者 tianyazaiheruan bitsCN.com
相关标签: 数据库查询