详解MySql基本查询、连接查询、子查询、正则表达查询

2019-01-05 09:47:05王旭
select * from STUDENT where STU_ID IN(select STU_ID from GRADE where STU_SCORE>85);

查找大于85分的学生信息

2、与EXISTS结合
EXISTS和NOT EXISTS操作符只测试某个子查询是否返回了数据行。如果是,EXISTS将是true,NOT EXISTS将是false。

select * from STUDENT where EXISTS (select STU_ID from GRADE where STU_SCORE>=100);

如果有学生成绩大于100,才查询所有的学生信息

3、ALL、ANY和SOME子查询
any和all的操作符常见用法是结合一个相对比较操作符对一个数据列子查询的结果进行测试。它们测试比较值是否与子查询所返回的全部或一部分值匹配。比方说,如果比较值小于或等于子查询所返回的每一个值,<=all将是true,只要比较值小于或等于子查询所返回的任何一个值,<=any将是true。some是any的一个同义词。

select STU_ID from GRADE where STU_SCORE <67;

只要学号大于上面的任意一个就显示出来:

select * from STUDENT where STU_ID >= any (select STU_ID from GRADE where STU_SCORE <67);

六、合并查询结果
合并查询结果是将多个SELECT语句的查询结果合并到一起。因为某种情况下,需要将几个SELECT语句查询出来的结果合并起来显示。
使用UNION关键字时,数据库系统会将所有的查询结果合并到一起,然后去除掉相同的记录。而UNION ALL关键字则只是简单的合并到一起。其语法规则如下:

SELECT语句1 UNION | UNION ALL SELECT语句2 UNION | UNION ALL …. SELECT语句n ;

七、排序与取数
7.1、order by
(1)order by price //默认升序排列
(2)order by price desc //降序排列
(3)order by price asc //升序排列,与默认一样
(4)order by rand() //随机排列,效率不高

select * from GRADE where STU_SCORE >80 order by STU_SCORE;

默认是按升序的,
也可以这么写

select * from GRADE where STU_SCORE >80 order by STU_SCORE ASC;

结果如下: