单表查询语法及优先级
语法
SELECT 字段1,字段2… FROM 表名
WHERE 条件
GROUP BY field
HAVING 筛选
ORDER BY field
LIMIT 限制条数
在这里插入图片描述
优先级
from 1.找到表:from
where 2.拿着where指定的约束条件,去文件/表中取出一条条记录
group by 3.将取出的一条条记录进行分组group by,如果没有group by,则整体作为一组
having 4.将分组的结果进行having过滤
select 5.执行select
distinct 6.去重
order by 7.将结果按条件排序:order by
limit 8.限制结果的显示条数
例
先创建一个表
create table employee(
-> id int not null unique auto_increment,
-> emp_name varchar(20) not null,
-> sex enum('male','female') not null default 'male', #大部分是男的
-> age int(3) unsigned not null default 28,
-> hire_date date not null,
-> post varchar(50),
-> post_comment varchar(100),
-> salary double(15,2),
-> office int, #一个部门一个屋子
-> depart_id int
-> );
插入数据
insert into employee(emp_name,sex,age,hire_date,post,salary,office,depart_id) values
-> ('laura','male',18,'20170301','teacher',7300.33,401,1),
-> ('wendy','male',78,'20150302','teacher',1000000.31,401,1),
-> ('iris','male',81,'20130305','teacher',8300,401,1),
-> ('david','male',73,'20140701','teacher',3500,401,1),
-> ('sinala','male',28,'20121101','teacher',2100,401,1),
-> ('john','female',18,'20110211','teacher',9000,401,1),
-> ('shaer','male',18,'19000301','teacher',30000,401,1),
-> ('guojin','male',48,'20101111','teacher',10000,401,1),
->
-> ('一一','female',48,'20150311','sale',3000.13,402,2),
-> ('丫丫','female',38,'20101101','sale',2000.35,402,2),
-> ('丁丁','female',18,'20110312','sale',1000.37,402,2),
-> ('星星','female',18,'20160513','sale',3000.29,402,2),
-> ('格格','female',28,'20170127','sale',4000.33,402,2),
->
-> ('张野','male',28,'20160311','operation',10000.13,403,3),
-> ('程咬金','male',18,'19970312','operation',20000,403,3),
-> ('程咬银','female',18,'20130311','operation',19000,403,3),
-> ('程咬铜','male',18,'20150411','operation',18000,403,3),
-> ('程咬铁','female',18,'20140512','operation',17000,403,3)
-> ;
查看表中记录
简单查询
-
查询其中的几个字段
-
避免重复
针对某一列去重 distinct:不同的
-
通过四则运算查询
-
查看年薪
-
重命名
-
也可以不用as,直接用空格,字段与字段之间用逗号
-
-
显示格式
- 对查询的字段统一定义显示格式 concat: 合并,连接
- 指定分割符
把要查询的字段用:分开
- 指定分割符
- 对查询的字段统一定义显示格式 concat: 合并,连接
-
case 语句:可以加上一些条件,根据不同的条件显示不同的结果,使结果显示出的效果不一样,相对于contat显示统一的结果。
语法
SELECT
( # 开启一个case语句
CASE # 条件的开始
WHEN emp_name = ‘jingliyang’ THEN # 类似于if条件语句 如果满足此条件
emp_name # 就显示此结果
WHEN emp_name = ‘alex’ THEN
CONCAT(emp_name,’_BIGSB’)
ELSE # 除此之外
concat(emp_name, ‘SB’)
END # 条件结束
) as new_name # 给筛选出来的这一列起别名
FROM
emp; # 表名
where 约束
- 比较运算符 : >, <, >=, <=, !=
2. between 40 and 200 : 在40 到200 之间
3. in(80, 90, 100) 范围描述,值是80或90或100
- like ‘laura%’ 看起来像laura开头的
通配符pattern 可以是% 或_
%表示任意多字符
_表示一个字符
5. 逻辑运算符: 在多个条件可以使用逻辑运算符and or not
group by
- 单独使用group by 关键字分组
在表面找到所有信息根据post分组,post有三组,于是显示三个选项
- distinct 只能对一个字段进行筛选,而group by 可对某一字段进行分组了之后再进行聚合操作,如对每个组进行平均薪资的计算。avg : average
- group_concat() 把一组里面的内容拼接
聚合函数
- count 计数
- max 求最大值
- sum 求和
having 过滤
order by 排序
- 按单列排序
默认从小到大排序,ascent 增加,上升 , descent:下降
- 按多列排
limit 限制显示的 查询记录数
默认初始位置为0
limit 0,3 从第0 开始,先显示第一条
RegExp 正则表达式
reg: regular 规则 ,指定的规则
exp:expression 表达式
在mysql中不支持非贪婪匹配