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

本文详细介绍了MySQL中的子查询使用,包括IN子查询、比较子查询、EXISTS子查询及其在SELECT、WHERE子句中的应用,还有UNION操作的规则以及handler语句在浏览数据时的作用。通过实例解析,帮助读者深入理解数据库查询的高级技巧。
摘要由CSDN通过智能技术生成

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.比较子查询

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值