单表查询
-- 查询全部数据
select * from 表名;
-- 查询部分字段
select 字段1[,字段2,...] from 表名;
-- 简单的条件查询
select *|字段1[,字段2,...] from 表名
where 条件表达式;
where后的条件表达式:
1)去重
-- 当查询的字段有多个时,必须所有的字段完全相同才被认为是重复记录
-- 默认情况下是all
select distinct|all 字段列表 from 表名;
2)排序
-- 单字段排序,仅按照一个指定的字段进行升序asc或降序desc排序,默认asc
select *|字段列表 from 表名
order by 字段名 [asc|desc];
-- 多字段排序,先按照字段1进行排序,当字段1相等时,再按照字段2进行排序,依次类推下去
select *|字段1[,字段2,...] from 表名
order by 字段1 [asc|desc] [字段2 [asc|desc],...]
-- 注意:系统将null看作最小的值
3)限量
可以限定记录的数量,也可以限定从哪一条记录开始
限量查询数据
-- 默认偏移量为0,而第一条记录的偏移量为0
select *|字段1[,字段2,...] from 表名
limit [偏移量,] 记录数;
-- 注意:记录数表示限定的最大记录数量,当大于实际记录数量时,以实际为准
限量更新数据
update 表名 set 字段1=值1[,字段2=值2,...]
[where 条件表达式]
[order by 字段1 [asc|desc] [字段2 [asc|desc],...]] -- 按顺序更新
limit [偏移量,] 记录数;
限量删除数据
delete from 表名
[where 条件表达式]
[order by 字段1 [asc|desc] [字段2 [asc|desc],...]] -- 按顺序更新
limit [偏移量,] 记录数;
4)分组与聚合函数
select 查询选项列表 from 表名
[where 条件表达式]
group by 字段名1 [order by [asc|desc]] [,字段名2 [order by [asc|desc] ],...]
having 条件表达式;
;
/*
注意:
1.group by 字段名表示按照指定的字段进行分组;
2.查询选项只能是指定的分组字段或者非分组字段的聚合函数后;
3.mysql 默认情况下对分组字段进行升序排序,group by的分组排序是否需要order by(与版本有关) ,最好加上order by
4.多分组统计:按字段1分组后,再按字段2分组,相对于组内再分组,依次类推下去,最后得到一个个小组,每个小组数据进行统计
5.having与where两者的作用对象不同,where子句作用于基表或视图,从中选择满足条件的元组,而having短语作用于组,从中选择满足条件的组。 另外注意where与having的位置,以及where后的条件表达式中不能有聚合函数,而having后的条件表达式中可以有。
*/
常用聚合函数
函数名 | 描述 |
---|---|
count() | 返回参数字段的数量,count(字段名),不统计null记录,但是count(*),统计的是符合条件的记录总数,故记录中某字段为null也不影响 |
sum() | 返回参数字段的总和 |
avg() | 返回参数字段的平均值 |
max() | 返回参数字段的最大值 |
min() | 返回参数字段的最小值 |
group_concat() | 返回参数字段的连接字符串 |
注意:在聚合函数括号内的参数前加上distinct表示对不重复的记录进行相关操作,缺省为all。
5)别名
select 字段 [as] 别名 from 表名 [as] 表别名
6)数学函数
select 函数;
单表查询总结
多表查询
联合查询UNION
在保证多个select语句的查询字段数相同的情况下,合并多个查询的结果
select ....
union [all|distinct] select...
[union [all|distinct] select...];
/*
all表示保留所有的记录,distinct是默认值可省略,表示去掉重复的记录
若select语句涉及到排序限量等操作,需要用()将整个select语句括起来
*/
连接查询
\quad
正确的查询方式是:以两表中相互关联的字段作为查询条件进行查询。
1)内连接
根据匹配条件,返回表1与表2所有匹配的记录
select 查询选项列表 from 表1
[inner] join 表2
on 匹配条件;
2)左连接
用于返回左表中的所有记录,以及右表中符合连接条件的记录。当左表的某行记录在右表中没有匹配的记录时,右表中相关记录设为NULL
select 查询选项列表 from 表1
left [outer] join 表2
on 匹配条件;
3)右连接
用于返回右表中的所有记录,以及左表中符合连接条件的记录。当右表的某行记录在左表中没有匹配的记录时,左表中相关记录设为NULL
select 查询选项列表 from 表1
right [outer] join 表2
on 匹配条件;
4)全连接
其结果是在内连接查询的基础上还显示左右两边互不匹配的数据。写法:左连接查询 UNION 右连接查询
select 查询选项列表 from 表1 left join 表2 on 匹配条件
union
select 查询选项列表 from 表1 right join 表2 on 匹配条件
嵌套查询
-- 当from后的数据源是子查询时必须为其设置别名
select 字段列表 from (select 语句) as 别名
子查询
\quad where子查询有带比较运算符,in,exist,all,any关键字的子查询
1)带比较运算符
2)带关键词in
where 条件判断 in (select语句);
3)带关键词exists
\quad
当子查询语句返回记录时,exists表达式为true,此时执行前面的查询语句。子查询语句没有返回任何记录时,exists语句为false,不执行前面的查询语句。
where exists(子查询语句); --子查询语句有结果则exists(子查询语句)返回1,否则返回0
where not exists(子查询语句); --与exists相反
4)带关键词any,all
where 表达式 比较运算符 all(子查询语句);
-- 给定的判断条件只有符合子查询结果中的每条记录,结果才返回1,否则返回0
where 表达式 比较运算符 any(子查询语句);
-- 给定的判断条件只要符合子查询结果中的任一记录,结果返回1,否则返回0
复制表
判断查询