mysql默认不区分大小写
条件查询
select * from students -- 查询students表的所有数据
select * from students where score>=80; -- 查询score大于等于80的数据
select * from students where score>=80 and gender='m'; -- 查询score大于等于80且gender为m的数据
select * from students where score>=80 or gender='m'; -- 查询score大于等于80或gender为m的数据
select * from students where not class_id=2;
select * from students where class_id!=2; -- 查询class_id不为2的数据(用<>也可以)
select * from students where(score<80 or score >90) and gender='M'; --复合查询
投影查询
select id, score, name from students; -- 显示id,score,name列
select id, score points, name from students; -- 显示查询时将score重命名为points
select id, score points, name from students where gender = 'M'; -- 复合查询
排序
默认根据主键排序
select id, name, gender, score from students order score; -- 将查询结果根据score从低到高显示(默认升序ASC可省略)
select id, name, gender, score from students order score desc; -- 倒序,将查询结果根据score从高到低显示
select id, name, gender, score from students order by score desc, gender; -- 先按score升序排序,相同的按gender倒序排序
select * from students where class_id = 1 order score desc; -- 复合查询
分页
select * from students limit 3 offset 0; -- 查询结果每页最多3条,显示第1面(注意索引从0开始)
select * from students limit 4 offset 1; -- 查询结果每页最多4条,显示第2面
聚合查询
使用聚合函数进行查询,就是聚合查询
聚合函数
SUM 计算某一列的合计值,该列必须为数值类型
AVG 计算某一列的平均值,该列必须为数值类型
MAX 计算某一列的最大值(不限于数值类型)
MIN 计算某一列的最小值(不限于数值类型)
select count(*) from students; -- 查询students表中一共有多少记录
select count(*) num from students; -- 给列名count设置一个别名num
select count(*) from students where gender='m'; -- 查询gender为m的记录数量
select avg(score) from sudents where gender='m' -- 查询男生的平均成绩
注意:如果聚合查询的WHERE条件没有匹配到任何行,COUNT()会返回0,而MAX()、MIN()、MAX()和MIN()会返回NULL
select avg(score) average from students where gender = 'X';
分组
select count(*) from students group by gender; -- 根据gender进行分组显示数量
select count(*),class_id from students group by class_id; -- 根据class_id进行分组显示数量和class_id
select count(*),gender,class_id from students group by class_id,gender; -- 根据多个条件进行分组(先根据class_id分组,后根据gender分组)
多表查询
注意查询行数是所选表的乘积
select * from students,classes; --同时从students和classes表中查询
selectstudents.id sid,
students.name,
students.gender,
students.score,
classes.id cid,
classes.name cnamefrom students, classes; --查询时设置别名
selects.id sid,
s.name,
s.gender,
s.score,
c.id cid,
c.name cnamefrom students s, classes c; --查询时为表设置别名
selects.id sid,
s.name,
s.gender,
s.score,
c.id cid,
c.name cnamefromstudents s, classes cwhere s.gender = 'M' AND c.id = 1; --使用where语句
View Code
连接查询
SELECT s.id, s.name, s.class_id, c.name class_name, s.gender, s.score
FROM students s
INNER JOIN classes c
ON s.class_id = c.id;
注意INNER JOIN查询的写法是:
先确定主表,仍然使用FROM 的语法;
再确定需要连接的表,使用INNER JOIN 的语法;
然后确定连接条件,使用ON ,这里的条件是s.class_id = c.id,表示students表的class_id列与classes表的id列相同的行需要连接;
可选:加上WHERE子句、ORDER BY等子句。
这是内查询INNER JOIN,只返回同时存在于两张表的行数据
还有外查询,外查询分为RIGHT OUTER JOIN,LEFT OUTER JOIN和FULL OUTER JOIN。它们的区别是:
RIGHT OUTER JOIN返回右表都存在的行。如果某一行仅在右表存在,那么结果集就会以NULL填充剩下的字段。
LEFT OUTER JOIN则返回左表都存在的行。如果某一行仅在左表存在,那么结果集就会以NULL填充剩下的字段。
FULL OUTER JOIN会把两张表的所有记录全部选择出来,并且,自动把对方不存在的列填充为NULL