1、WHERE表达式
条件表达式即是,对记录进行过滤,满足条件进行显示。如果没有指定WHERE子句,则显示所有记录;在WHERE表达式中,可以使用MySQL支持的函数或者运算符。
root@localhost test>SELECT id,username FROM user WHERE id % 2 = 0;
![](https://i-blog.csdnimg.cn/blog_migrate/e4e09e7907d9cf426d8de457e604d896.png)
2、GROUP...BY...
此外还可以进行分组,分组的时候即可以指定列名也可以指定列的位置,查询结果分组:
[GROUP BY {col_name | position } [ASC | DESC],...]
其中ASC为升序,DESC为降序,为默认的。user表的全部记录如下:
现在来对sex进行分组,由于sex中只有两种“类型”,是0和NULL类型,因此会有两种分组
root@localhost test>SELECT sex FROM user GROUP BY sex;
3、分组条件HAVING...
还可以带有分组条件HAVING
[HAVING where_condition]
分组可以全部记录都做分组,也可以只对一部分记录做分组
root@localhost test>SELECT sex FROM user GROUP BY sex HAVING age > 25;
会出现如上的错误,这是因为在采用HAVING进行分组条件指定的时候,一定要保证分组的条件要么为一个聚合函数,要么保证这么字段必须出现在SELECT语句中,因此进行如下的修改
root@localhost test>SELECT sex,age FROM user GROUP BY sex HAVING age > 25;
那什么是聚合函数呢?即是max,min,avg,sum这些函数永远只有一个返回值
root@localhost test>SELECT sex,age FROM user GROUP BY sex HAVING age > 25;
root@localhost test>SELECT sex,age FROM user GROUP BY sex HAVING count(id) >= 2;
![](https://i-blog.csdnimg.cn/blog_migrate/c1ac5610b494908b5e0b9cb3bf05d145.png)
4、ORDER BY...
还可以对分组的结果进行排序,使用ORDER BY 语法结构
[ORDER BY {col_name | expr | position } [ASC | DESC ],...]
在使用语句SELECT * FROM user的时候,使用的是默认的插入顺序进行显示
root@localhost test>SELECT * FROM user ORDER BY id DESC;
对id进行降序排列显示
也可以按照两个字段进行排序,如果第一个字段就可以排出想要的结果,则忽略第二个字段;但如果第一个字段不能排出想要的结果,则遵守第二字段,甚至是第三个字段。
在上表中发现age有相同的字段,默认是从小到大
root@localhost test>SELECT * FROM user ORDER BY age;
![](https://i-blog.csdnimg.cn/blog_migrate/85c54f5e0b1b01255828ba140669235f.png)
这里如果age相同,则按照id 进行降序排列
root@localhost test>SELECT * FROM user ORDER BY age,id DESC;
注意两张表的异同
5、LIMIT限制查询数量
LIMIT语句限制查询结果的返回数量
[LIMIT {[offset,] row_count | row_count OFFSET offset }
root@localhost test>SELECT * FROM user LIMIT 2;
按照标的插入顺序(默认显示方式)只显示表中所有记录的前两条记录
如果想显示从第m条记录开始显示共显示n条,怎么办呢?即是显示的是[m,m+n],如在user表中显示第3条、第4条记录
应该显示的第3条和第4条,但是因为SELECT语句中的记录是从0开始的,因此LIMIT后的3表示的SELECT语句中的第4条记录
此外id 号和结果集中的顺没有任何联系,即id排在结果集中的第一个位置,就是0,第二位置就是1...
root@localhost test>SELECT * FROM user ORDER BY id DESC;
![](https://i-blog.csdnimg.cn/blog_migrate/b882240fb67185f3f6fef75096b243f7.png)
root@localhost test>SELECT * FROM user ORDER BY id DESC LIMIT 2,2;
现在来看看INSERT中的用法
INSERT [INFO] table_name SET col_name ={expr|DEFAULT},...
此方法可以使用子查询(SubQuery)
root@localhost test>CREATE TABLE test2(
-> id TINYINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
-> usernaem VARCHAR(20)
-> );
这里首先创建一张新表,把user表中年龄大于30 的记录写入到test2表中
root@localhost test>insert test2 select username from user where age >= 30;
因为虽然表test2中记录数据的列只有username,但是实际上还有一列id列,因此做如下修改
root@localhost test>insert test2(usernaem) select username from user where age >= 30;