1. 查询指定列以及查询所有在上一篇已经写过,不再赘述。
 2. 查询经过计算的值
 -  格式:select 子句的的目标列表达式(可以是属性列也可以是表达式) from 表名
 -  select * from student where entertime>'2017-05-01';
 3. 选择表中的若干元组:
 - DISTINCT消除重复的行:
 - SELECT DISTINCT Sclass from student;
 - 查询满足条件的元组
 - 比较大小:=,>,<,>=,<=,!=,<>(不等于),!>,!<,not;
 - 确定范围:BETWEEN AND,NOT BETWEEN AND;
 - ---查找年龄在18-20之间的学生:select * from student where Sage BETWEEN 18 AND 20;
 - 确定集合:IN,NOT IN;
 - 字符匹配:LIKE,NOT LIKE;(这里会使用通配符%或 _,其中%是指任意长度的字符串,而 _ 代表任意单个字符,如果目标字符串中含有通配符例如:“xing _test”,则需要使用ESCAPE '<换码字符>',在SQL语句中要写成 "LIKE xing \_test ESCAPE '\'; " )
 ---- 例如查找学号倒数第三位是5的学生:select * from student where Snumber like '%5__';
 - 空值:IS NULL,IS NOT NULL;
 - 多重条件(逻辑运算):AND,OR,NOT;
 - ORDER BY子句默认值是升序ASC;      降序DESC;
 4. 聚集函数:
聚集函数只能用于SELECT子句和GROUP BY 中的HAVING子句;
 - COUNT(*)              统计元组个数
 - COUNT([DISTINCT | ALL] <列名>)  统计一列中值的个数
 - 为方便,以下括号中用...代替[DISTINCT | ALL] <列名>
 - SUM(...)       计算一列值的总和
 - AVG(...)        计算一列值的平均数
 - MAX(...)      求一列值中的最大值
 - MIN(...)       求一列值中的最小值
 - 如果DISTINCT则计算的时候要取消指定列中的重复值,否则的话不取消重复值.
 - select COUNT(*) from student;
 - select SUM(Sage) from student;
 -  select AVG(Sage) from student;
 -  select MIN(Sage) from student;
 - select MAX(Sage) from student;
 5. GROUP BY 子句
 - 将查询结果按照一列或者多列的值分组,值相等的为一组;
 - 例如:查询学生表中,不同的班级分别有多少人。表中有学生所属班级Sclass字段,按照GROUP BY子句查询后,同一个班的为一组,有多少个班级就会出现多少条查询结果。
 - select Sclass,COUNT(*) from student group by Sclass;
 - 结果为:| Sclass | COUNT(*) |
        +--------+----------+
        |      1 |        4 |
        |      2 |        1 |
        |      3 |        1 |
        +--------+----------+
 - 如果需要查询人数最多的班级情况呢?
 - 只需要对GROUP BY查询出的结果进行排序并限制查询的数据为一条即可。如果需要最大值,则进行降序排序;如果需要最小值,则升序;
 - select Sclass,COUNT(*) as sumNum  from student group by Sclass ORDER BY sumNum desc limit 1;结果如下:
+——–+——–+ 
 | Sclass | sumNum | 
 +——–+——–+ 
 | 1 | 4 | 
 +——–+——–+
6. 嵌套查询
 - SQL语言中一个 SELECT-FROM-WHERE语句称为一个查询块,将一个查询块嵌套在另一个查询块的WHERE子句或HAVING短语的条件中的查询称为嵌套查询。
 - 查出和名为num1在同一个班级的学生姓名:
 - select Sname from student where Sclass in(select Sclass from student where Sname="num1");
+——–+ 
 | Sname | 
 +——–+ 
 | num1 | 
 | byu7 | 
 | nids | 
 | dhasjk | 
 +——–+


7. 带有谓词的子查询
- >ANY 大于子查询结果中的某个值
- >ALL 大于子查询结果中的所有值
- 以此类推各种符号下的情况
- EXISTS谓词,其查询不返回任何数据,只产生逻辑真 true或者逻辑假值 false(存在true ,不存在 false),NOT EXISTS(查询为空时返回 true ,反之返回 false)。
8. 集合查询:
- UNION 并操作

- 查询一班和二班的学生:select * from student where Sclass=1 UNION select * from student where Sclass =2; 
 +—–+——–+——+——+————+————+——-+——–+ 
 | Sid | Sname | Ssex | Sage | Snumber | entertime | Sdept | Sclass | 
 +—–+——–+——+——+————+————+——-+——–+ 
 | 1 | num1 | 男 | 19 | 2014150001 | 2017-09-14 | CS | 1 | 
 | 2 | byu7 | 男 | 19 | 2014150011 | 2017-02-14 | CS | 1 | 
 | 3 | nids | 男 | 17 | 2014150561 | 2017-07-14 | CS | 1 | 
 | 6 | dhasjk | ds | 19 | 2014150011 | 2017-04-20 | CS | 1 | 
 | 4 | ew | 男 | 19 | 2014150361 | 2016-06-23 | CS | 2 | 
 +—–+——–+——+——+————+————+——-+——–+ 
 - INTERSECT交操作:(MySQL中不支持,用and替换) 
 - 查询一班中年龄小于18岁的人:SELECT * FROM student WHERE Sclass=1 and Sage<18; 
 +—–+——-+——+——+————+————+——-+——–+ 
 | Sid | Sname | Ssex | Sage | Snumber | entertime | Sdept | Sclass | 
 +—–+——-+——+——+————+————+——-+——–+ 
 | 3 | nids | 男 | 17 | 2014150561 | 2017-07-14 | CS | 1 | 
 +—–+——-+——+——+————+————+——-+——–+ 
 - EXCEPT差操作:(MySQL中不支持) 
 - 查询19岁不是一班的学生:mysql> select * from student where Sage=19 and Sclass<>’1’; 
 +—–+——-+——+——+————+————+——-+——–+ 
 | Sid | Sname | Ssex | Sage | Snumber | entertime | Sdept | Sclass | 
 +—–+——-+——+——+————+————+——-+——–+ 
 | 4 | ew | 男 | 19 | 2014150361 | 2016-06-23 | CS | 2 | 
 +—–+——-+——+——+————+————+——-+——–+


9. 基于派生表的查询:
—–子查询不仅可以出现在WHERE子句中,还可以出现在FROM子句中,这时子查询生成临时派生表成为主查询的查询对象。
—– 查询所有所有学号倒数第三位是5的学生了姓名: select distinct Sname from student ,(select Snumber from student where Snumber like ‘%5__’) as newTable where student.Snumber=newTable.Snumber;

+——-+ 
 | Sname | 
 +——-+ 
 | nids | 
 | dsa | 
 +——-+


其中newTable是给查询结果取的别名;
10.属性的约束条件
- 列值非空:NOT NULL;
- 列值唯一:UNIQUE;
- 检查列值是否满足一个条件表达式:CHECK短语;MySQL好像不能用,可以用enmu来代替:

mysql> create table testcheck( 
 -> id int not null primary key, 
 -> sex enum(‘男’,’女’), 
 -> name char ); 
 Query OK, 0 rows affected (0.32 sec)mysql> desc testcheck; 
 +——-+—————–+——+—–+———+——-+ 
 | Field | Type | Null | Key | Default | Extra | 
 +——-+—————–+——+—–+———+——-+ 
 | id | int(11) | NO | PRI | NULL | | 
 | sex | enum(‘男’,’女’) | YES | | NULL | | 
 | name | char(1) | YES | | NULL | | 
 +——-+—————–+——+—–+———+——-+ 
 3 rows in set (0.01 sec)mysql> insert into testcheck value(1,’dsad’,”f”); 
 ERROR 1265 (01000): Data truncated for column ‘sex’ at row 1


以上错误显示,对性别的限制起到了作用。