mysql高级查询 二_MySQL高级查询(二)

EXISTS 和NOT EXISTS子查询

EXISTS子查询

语法:

SELECT ……… FROM 表名 WHERE EXISTS (子查询);

例:

SELECT `studentNo` AS 学号,`studentResult` 成绩 FROM `result`

WHERE EXISTS(

/*查询LOgic Java最后一次考试成绩大于80的记录*/

SELECT * FROM `result` WHERE `subjectNo`=(

SELECT `subjectNo` FROM `subject` WHERE `subjectName` = `Logic Java`

)AND `examDate` = (

SELECT MAX(`examDate`) FROM `result` WHERE `subjectNo`=(

SELECT `subjectNo` FROM `subject` WHERE `subjectName` = `Logic Java`

)

)AND `studentResult` >80

)AND `subjectNo`=(

SELECT `subjectNo` FROM `subject`  WHERE `subjectName` = `Logic Java`

)ORDER BY `studentResult` DESC LIMIT 5;

附注:EXISTS关键字后的参数是一个任意的子查询,如果该子查询有返回行,则EXISTS子查询         的结果为true ,此时再执行外层查询,反之查询结果没有返回行,则为false,外层查询将不         执行.

NOT EXISTS子查询

语法:

SELECT ……… FROM 表名 WHERE NOT EXISTS (子查询);

例:

SELECT AVG(studentResult)+5 AS 平均分 FROM result

WHERE NOT EXISTS(

/*查询Logic Java最后一个次考试成绩小于60 的记录*/

SELECT * FROM `result` WHERE `subjectNo` = (

SELECT `subjectNo` FROM `subject` WHERE `subjectName` = `Logic Java`

)AND `examDate` = (

SELECT MAX(`examDate`) FROM `result` WHERE `subjectNo` = (

SELECT `subjectNo` FROM `subject` WHERE `subjectName` = `Logic Java`

)

)AND `sutdentResult`>60

) AND `examDate` = (

SELECT MAX(`examDate`) FROM `result` WHERE `subjectNo` = (

SELECT `subjectNo` FROM `subject` WHERE `subjectName` = `Logic Java`

)

)

附注:

NOT EXISTS 为EXISTS的取反操作,表示不存在.

当子查询没有返回行时,结果为true,反之亦然.

子查询注意事项

子查询语句可以嵌套在SQL语句中任何表达式出现的位置

嵌套在SELECT语句中的SELECT子句中的子查询如下:

语法: SELECT (子查询) FROM 表名;

3.嵌套在SELECT语句的FROM子句中的子查询语句如下:

语法: SELECT  *  FROM (子查询) AS 别名;

4 只要出现在子查询中而没有出现在父查询中的表不能包含在输出列.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值