一、基本查询
1. 全字段查询
selet * from `tb_names`;
2. 指定字段查询
select `field_name1`, `field_name2`, ..., `field_nameN` from `tb_names`
3. 条件查询
select `field_name1`, `field_name2`, ..., `field_nameN` from `tb_name1`, `tb_name2`, ..., `tb_nameN` where condition1 ...;
二、查询补充(排序, 限制, 去重, 范围查询)
1. 排序
select `field_name1`, `field_name2`, ..., `field_nameN` from `tb_name1`, `tb_name2`, ..., `tb_nameN` order by `field_name1` [asc 或 desc], `field_name2` [asc 或 desc], ...;
-- asc: 升序, 默认
-- desc: 降序
2. 限制查询数量(limit start, count)
select `field_names` from `tb_name1`, `tb_name2`, ..., `tb_nameN` limit [start,] count;
-- limit count: 限制查询count条数据
-- limit start, count: 从第start位置开始查询count条数据
3. 去重(distinct)
select distinct field_name from `tb_name1`, `tb_name2`, ..., `tb_nameN`;
4. 模糊查询(like)
select `field_name1`, `field_name2`, ..., `field_nameN` from `tb_name1`, `tb_name2`, ..., `tb_nameN` where `field_name` like ['xx%' 或者 'xx_' ]
-- `%`: 匹配任意多个字符
-- `_`:匹配任意一个字符
5. 范围查查询(in 或 between `a` and `b`)
5.1. select `field_name1`, `field_name2`, ..., `field_nameN` from `tb_name1`, `tb_name2`, ..., `tb_nameN` where `field_name` [not] between a and b;
-- 在范围(a,b)内[外]的都会被查询出来。
5.2. select `field_name1`, `field_name2`, ..., `field_nameN` from `tb_name1`, `tb_name2`, ..., `tb_nameN` where `field_name` [not] in (...);
-- 在所给范围内[外]的数据会被查询出来
三、聚合与分组
3.1 聚合函数
函数
作用
count(field_name)
统计个数
sum(field_name)
求和
max(field_name)
求最大值
min(field_name)
求最小值
avg(field_name)
求平均值
group_concat(field_name)
列出字段的全部值
-- 聚合
select aggregate_function(`field_name`) from `tb_name`;
-- aggregate_function: 聚合函数
select aggregate_function(`field_name`) as `new_name` from tb_name;
-- as `new_name`: 对聚合后的列进行重命名
3.2 聚合分组(group by)
select `group_field_name`, aggregate_function(`field_name`) from `tb_name` group by `group_field_name`;
-- 在分组的条件下,只能出现出现分组字段和聚合字段,如果其他的字段没有意义,会报错!
3.3 聚合分组筛选(having 条件)
select `group_field_name`, aggregate_function(`field_name`) from `tb_name` group by `group_field_name` having conditions;
select `group_field_name`, aggregate_function(`field_name`) as `new_name` from `tb_name` where conditions group by `group_field_name` having conditions;
where和 having的区别和组合使用
where 不可以使用别名,having可以
where不能操作聚合函数
where和having组合使用是先执行where筛选数据,最后用having筛选数据
where要写在group by 前面 having要写在group by 后面
as, 聚合函数, where, having 的执行顺序
先执行where对数据进行筛选
在执行聚合函数和as
最后执行having对聚合分组后的数据再一次进行筛选
四、子查询
当一次查询的结果在下一次查询时要使用
例如:我们要实现查询出一个年级学生年龄大于平均年龄的学生的信息需求可以使用如下语句
select * from student where age > (select avg(age) from student);
五、连接查询
5.1 内链接
5.1.1 无条件内连接
无条件内连接,又名交叉连接/笛卡尔连接
第一张表种的每一项会和另一张表的每一项依次组合
select `field_name` from `tb_name1` [inner] join `tb_name2`;
5.1.2 有条件内连接
在无条件内链接的基础上,加上一个on子句
当连接的时候,筛选出那些有实际意义的记录来进行组合
select `field_name` from `tb_name1` inner join `tb_name2` on `field_name1`=`field_name2`;
5.2 外连接
5.2.1 左外连接
以左表为基准
两张表做连接的时候,在连接条件不匹配的时候留下左表中的数据,而右表中的数据以NULL填充
select `field_name` from `tb_name1` left join `tb_name2` on `field_name1` = `field_name2`;
4.2.2 右外连接
以右表为基准
对两张表做连接的时候,在连接条件不匹配的时候留下右表中的数据,而左表中的数据以NULL填充
select `field_name` from `tb_name1` right join `tb_name2` on `field_name_1` = `field_name_2`;