MySQL之SELECT集合

SQL语句的标准在不同的数据库管理系统中,兼容性不同,第一次学习MySQL数据库管理系统已经是好久的事了,当然,我也并没有深入的去研究过其他的数据库管理系统,所以正如那位大佬说,你没有资格做选择,因为你没有经历其他的,所以只能说现在的好!不论如何,我就是喜欢MySQL,如果有时间进一步研究了其他的数据库管理系统,也许会改变,话不多说,进入正题,今天主要整理了SELECT相关的SQL语句,期望对各位读者有所帮助

数据查询
SELECT * FROM Student;
SELECT sname,sage FROM Student;
#可以查询字符串,将查询字符串显示在查询结果中
SELECT sname,'birthday:',year FROM Student;
SELECT DISTINCT sno FROM SC;  #取出重复行
如果没有指定DISTINCT的话,默认是ALL,重复数据也会被显示出来

条件查询
SELECT * FROM stu WHERE sage < 18;
SELECT * FROM stu WHERE sage BETWEEN 20 AND 23;
SELECT * FROM stu WHERE sdept IN ('CS','MA','IS');
条件查询之模糊查询  %代表任意长度  _代表一个长度
SELECT * FROM WHERE sname LIKE 'test'; 等价于  SELECT * FROM Student WHERE sname='test';
SELECT * FROM Student WHERE sname LIKE '李%'; #匹配所有的李姓数据
SELECT * FROM Student WHERE sname LIKE '李_'; #匹配所有的李姓两个字的数据
SELECT * FROM Student WHERE sname NOT LIKE '李_'; #匹配所有的除李姓两个字之外的数据
-- 当查询条件中包含通配符%或者_时,我们需要通过关键词 ESCAPE '\'  通配符进行转义  mysql不能使用该关键字
SELECT * FROM stu WHERE name  LIKE '123\_ads%'
SELECT * FROM stu WHERE name LIKE '123\_ads__s_'
SELECT * FROM stu WHERE name IS NULL;
SELECT * FROM stu WHERE dept='CS' AND age < 18
-- AND 的优先级高于 OR
SELECT * from stu WHERE dept='CS' OR dept='MA' 
-- ORDER BY 子句
SELECT * FROM stu WHERE age BETWEEN 18 and 20 ORDER BY id DESC;-- 倒叙   ASC是升序
-- GROUP BY 想要在group by中使用条件,就需要借助having关键字
SELECT * FROM stu  GROUP BY age; -- 依据年龄进行分组
SELECT * FROM stu GROUP BY age HAVING COUNT(*) > 3;
SELECT count(name) FROM stu GROUP BY sex HAVING avg(age)>1

连接查询
-- 查询两个表中,所有name字段相同的数据
SELECT * from stu,users WHERE stu.name = users.name
-- 根据相同id取用户名
SELECT users.name from users,stu where users.id = stu.id
-- 当某个字段只在一个表中存在时,那就可以省略表前缀
SELECT users.name,password from users,stu where users.id = stu.id
外连接
-- 左外连接,会将users表中的数据全部显示出来,stu中没有的则为空
SELECT stu.name,class,users.id FROM users LEFT OUTER JOIN stu ON(stu.id=users.id)
-- 左外连接,会将stu表中的数据全部显示出来,users中没有的则为空
SELECT stu.name,class,users.id FROM stu LEFT  OUTER JOIN users ON(users.id=stu.id)
-- 右外连接,会将users表中的数据全部显示出来 与左外连接相反
SELECT stu.name,class,users.id FROM stu RIGHT OUTER JOIN users ON(users.id=stu.id)
多表连接
SELECT * FROM users,stu,attricle WHERE users.id=stu.id AND users.id = attricle.id

嵌套查询
在SQL语句中,一个select-from-where语句称为一个查询块,将一个查询块嵌套在另一个查询块的where子句或having短语的条件中的查询称为嵌套查询
-- in表示前面的值是否在后面的集合中
SELECT * FROM attricle WHERE id IN(SELECT id FROM users WHERE name='test')
不相关子查询 : 子查询的条件不依赖与父级
相关子查询 : 子查询的查询条件依赖于父级
EXISTS子查询
带有EXISTS关键词的子查询不返回任何数据,只产生逻辑真“true”或逻辑假值“false”
当EXISTS后面的查询语句查询出结果之后,前面才能查询出结果,否则查询结果为空
SELECT * FROM stu WHERE EXISTS(SELECT name FROM users WHERE id=18)
NOT EXISTS与额、EXISTS恰恰相反

集合查询(UNION,INTERSECT, EXCEPT)
UNION      并操作
INTERSECT  交操作 (mysql不支持)
EXCEPT     查操作 (mysql不支持)
注:参加集合操作的个查询结果的列数必须相同
SELECT name FROM stu UNION SELECT password FROM users 

基于派生表的查询
子查询不仅可以出现在WHERE子句中,还可以出现在FROM子句中,这时子查询生成的临时派生表成为主查询的查询对象
通过FROM子句生成派生表时,必须为派生表起一个别名,可以使用as关键字,也可以省略
简单理解:一个查询语句要作为别人查询语句的源头
SELECT name FROM Student,(SELECT sno FROM SC WHERE NO='1')as SCI WHERE Student.sno=SCI.sno;

全部为本人亲自整理,并经过测试的语句,如有错句,病句劳烦留言!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

anansec

打赏是我创作路上的加油剂!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值