一、无条件查询——select
1.1 全部
语法:select * from 表名;
select * from student;
1.2 去重后——distinct
语法:select distinct 列1名,列2名 from 表名;
select distinct class from student;
1.3 别名处理后——as
语法:select 列名1 as ‘列名1别名’, 列名2 as ‘列名2别名’ from 表名
select name as '姓名', sex as '性别' from student;
1.4 运算符处理后
语法:select 字段处理句 from 表名;
运算符 | 含义 | 运算符 | 含义 |
---|---|---|---|
+ | 加法 | - | 减法 |
* | 乘法 | / | 除法 |
% | 求余 |
select name, price as '人民币', price/6 as '美元' from myshopping;
1.5 统计函数处理后
语法:select 统计函数(列名) from 表名
注意:无数据时,count()返回值为0,其它都为null。
统计函数 | 含义 | 统计函数 | 含义 |
---|---|---|---|
count() | 总行数 | avg() | 单列值的平均值 |
sum() | 单列值的总和 | now() | 当前时间 |
max() | 单列值的最大值 | min() | 单列值的最小值 |
select avg(stu_grade) as '平均成绩' from stu_info;
-- 结果:统计平均成绩。
1.6 拼接处理后——concat
语法:select 字段1,concat(字段2,字段3) from 表名;
select name,concat('¥',price) as '人民币', concat('$',price/6) as '美元' from myshopping;
二、条件查询——where
2.1 运算符
语法:where 列名 运算符 值
类型 | 运算符 |
---|---|
关系运算符 | >、 >=、 <、 <=、 !=(<>)、 =; |
逻辑运算符 | AND(&&)、OR ( || ) 、NOT( ! ) 、XOR |
select * from stu_info where (age >= 18 and clazz = 'C1') and code = '01'
2.2 通配符——like
语法:where 列名 like ‘字符+通配符’
通配符 | 作用 |
---|---|
% | 替代多字符 |
_ | 替代一个字符 |
[charlist] | 字符列中,任何一字符 |
[^charlist] 或者 [!charlist] | 不在字符列中 |
-- 以a开头的列值
select * from stu_info where name like 'a%';
-- 以a结尾的列值
select * from stu_info where name like '%a';
-- 含a的列值
select * from stu_info where name like '%a%';
2.3 离散型——in
语法:where 列名 in (列值1,列值2,…)
select * from stu_info where name in ('张三', '李四');
-- 结果:获取到name='张三'和name='李四'的所有学生信息。
2.4 区间型——between and
语法:where 列名 between 列值1 and 列值2
遵循 [列值1, 列值2) 原则
select * from stu_info where id between 1000 and 1500;
-- 结果:获取id∈[1000,1500)的所有学生信息。
2.5 空值型——is null
语法:where 列名 is null
select * from t_department where employee_number is null;
-- 结果:获取没有员工的部门。
三、排序行数分组查询
3.1 排序——order by
3.1.1 单字段排序
语法:order by 列名 ASC | DESC
说明:ASC升序排列(默认值),DESC降序排列。
select * from stu_info order by class DESC;
-- 结果:按班级降序排列。
3.1.2 多字段排序
语法:order by 列1名 ASC | DESC,列2名 ASC | DESC,
select * from stu_info order by class DESC, name ASC;
-- 结果:按班级降序排列,在班级内部按姓名升序排列。
3.2 行数限制后——limit
3.2.1 数量限制
语法:limit 数字
select * from stu_info limit 5;
-- 结果:选取前五个学生信息。
3.2.2 起始位置+数量 限制
语法:limit 起始位置,数量
注意:起始位置从0开始计数,同数组。
select * from stu_info limit 10,5;
-- 结果:从第11名~第15名,共5名学生的学生信息。
3.3 分组查询——group by
3.3.1 单字段分组查询
3.3.1.1 简单分组
语法:select 列名 from 表名 group by 定组列名
说明:意义不大
select * from stu_info group by class;
3.3.1.2 统计分组——group_concat()
语法:select 列1名, group_concat(列2名) from 表名 group by 列1名
group_concat(列2名)作用:把列1值相同的所有列2值放在一个单元格内。
select class, group_concat(name) as '班级学生姓名' from stu_info group by class;
-- 查询姓名相同的同学信息。
select * from stu_info where name =
3.3.2 多字段分组查询
语法:select 列1名,列2名 from 表名 group by 定组列1名,定组列2名
select dept_ID, name from t_employee group by dept_ID, emp_ID;
3.3.3 限制分组查询 ——having
语法:select 列1名,列2名 from 表名 group by 定组列1名,定组列2名 having condition;
select
dept_ID as '部门ID',avg(salary) as '部门平均工资', group_concat(name) as '部门成员', count(name) as '部门人数' from t_employee
group by dept_ID
having avg(salary) > 2000;
四、小结
完整语法
- select 结果展现列名处理
- from 表名
- where 条件语句
- group by 分组依据
- having 分组条件