mysql怎么集合查询_MySql集合查询
SELECT语句的查询结果是元组的集合,所以多个SELECT语句的结果可进⾏集合操作。
集合操作主要包括并操作UNION、交操作INTERSECT、差操作EXCEPT。
注意,参加集合操作的各查询结果的列数必须相同;对应的数据类型也必须相同。
本⽰例中的数据表有student,sc,course三个,数据表的具体内容请看:
UNION⽰例:
例⼦1.1
题⽬:查询计算机科学系的学⽣及年龄不⼤于19岁的学⽣。
SQL语句:
SELECT * FROM Student WHERE Sdept='CS' UNION
SELECT * FROM Student WHERE Sage<=19 查询结果:
修改apk中的服务器域名
本查询实际上是求计算机系的所有学⽣与年龄不⼤于19岁的学⽣的并集。
与它等效的SQL语句是:
SELECT * FROM Student WHERE Sdept='CS' OR Sage<=19
注意:虽然这个两个SQL语句是等效的,但是本质上是不⼀样的,第⼀个SQL语句是分别进⾏两次SELECT然后将结果取并集;第⼆个SQL语句是直接进⾏了⼀次SELECT语句查询。
INTERSECT⽰例:
MySql语句并不⾄此INTERSECT,所以只能使⽤其替代语句
例⼦2.1mysql面试题集合
题⽬:查询计算机科学系中年龄不⼤于19岁的学⽣。
对应的SQL语句应该是:
SELECT * FROM Student
WHERE Sdept='CS'
INTERSECT
SELECT * FROM Student
WHERE Sage<=19;
替代的SQL语句:
SELECT *
FROM student
WHERE Sdept = 'CS'
AND Sage <=19
查询结果:
例⼦2.2
题⽬:查询即选修了课程1⼜选修了课程2的学⽣。(就是查询选修课程1的学⽣集合与选修课程2的学⽣集合的交集)对应的SQL语句应该是:
SELECT Sno FROM SC
WHERE Cno='1'
INTERSECT
SELECT Sno FROM SC
WHERE Cno='2';
替代的SQL语句为:
(使⽤IN)
SELECT Sno
FROM SC
WHERE Cno = '1'
AND Sno
IN (
SELECT Snofps是什么意思
FROM SCopenfire
WHERE Cno = '2'
)
或者为:
(使⽤EXISTS)
SELECT Sno
FROM SC SCX
WHERE Cno = '1'
AND EXISTS (
javascript基础入门学习
SELECT Sno
FROM SC SCY
WHERE Cno = '2'
AND SCX.Sno = SCY.Sno
) 查询结果为:
或者为:
(使⽤JOIN ON)
SELECT *
FROM SC SCX
JOIN SC SCY ON ( SCX.Cno = '1'
AND SCY.Cno = '2'
AND SCX.Sno = SCY.Sno )
EXCEPT操作:
很不幸,MySql也不⽀持EXCEPT操作,只能使⽤替代的语句。
例⼦3.1
查询计算机科学系的学⽣与年龄不⼤于19岁的学⽣的差集。
对应的SQL语句为:
SELECT * FROM Student WHERE Sdept='CS'
EXCEPT
SELECT * FROM Student WHERE Sage<=19;
也就是查询计算机科学系中年龄⼤于19岁的学⽣。
替换语句为:
(直接使⽤WHERE,不得不说这么做很简单,但是意思上不是很好理解) SELECT *
FROM Student
WHERE Sdept = 'CS'
AND Sage >19
查询结果为:
或者替换语句为:
(使⽤NOT IN)
SELECT *
FROM Student
WHERE Sdept = 'CS'
AND Sno NOT
IN (
SELECT Sno
FROM Student
WHERE Sage <=19
) 查询结果为:
或者使⽤替换语句为:(使⽤NOT EXISTS)
SELECT *
FROM Student SX
WHERE Sdept = 'CS'
AND NOT
EXISTS (
SELECT *
FROM Student SY
WHERE SY.Sage <=19
AND SX.Sno = SY.Sno
) 查询结果为:
对集合操作结果的排序
ORDER BY⼦句只能⽤于对最终查询结果排序,不能对中间结果排序。
任何情况下,ORDER BY⼦句只能出现在最后;对集合操作结果排序时,ORDER BY⼦句中⽤数字指定排序属性。下⾯是⼀种错误的写法:
SELECT * FROM Student
WHERE Sdept='CS'
ORDER BY Sno
UNION
SELECT * FROM Student
WHERE Sage<=19
ORDER BY Sno;
div水平居中怎么设置正确的应该是:
SELECT * FROM Student
WHERE Sdept='CS'
UNION
SELECT * FROM Student
WHERE Sage<=19
ORDER BY 2; 输出结果:
如果写成:
SELECT * FROM Student
WHERE Sdept='CS'
UNION
SELECT * FROM Student
WHERE Sage<=19
ORDER BY 1; 输出结果为:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。