一:普通查询
- 查询单个字段或者多个字段
select fieldname1,filed2 from tablename #查询字段从某个表格
- 查询全部字段
select * from tablename #查询表中所有信息
缺点:执行效率低,语义不明确,可读性差优点:简单
- 字段是可以参与运算的以及起别名
select filed1<operation><number> [as] [alias] from tablename
二:条件查询
select field1,filed2 from tablename where condtion=true
运算符 | 说明 |
---|---|
= | 等于 |
<>或者!= | 不等于 |
< | 小于 |
<= | 小于等于 |
> | 大于 |
>= | 大于等于 |
between and | 两个值之间,等价于>=and<= |
is null | 为null(is not null不为空) |
and | 并且 |
or | 或者 |
in | 包含,相当于for,not in不在这个范围 |
not | 取非,主要用于is或in |
like | like为模糊查询,支持%或者下划线匹配 %匹配任意个字符 下划线匹配一个字符 当用户查询的字符串本身含有%或者_时候,要使用ESCAPE’<转码字符>'短语进行转义 默认为"\" |
注意:and的比较级高于or
- 嵌套查询
(1) where 后面直接表达式
(2)where后面接谓词in引导的子查询
(3)where后面接比较谓词ANY(SOME)/ALL引导的子查询
(4)where后面接谓词exists(not exists)引导的子查询
(5)from后面接临时生成的表
说明:子查询不能用orderby语句
三:排序
排序采用order by子句,order by后面跟上排序字段,排序字段可以放多个,多个采用逗号连接,order by默认采用升序(asc),如果存在where子句,那么order by必须放在where后面。
select * from tablename order by field1 desc #降序排序
select * from tablename order by field1 asc #升序排序
select * from tablename order by 3 asc #升序排序(按序号排序,不推荐)
select ename hiredate from emp where hiredate=str_to_date(‘12-03-1981’,‘%m-%d-%Y’)
四:处理函数
select substr(ename,0,1) as ename from emp;
select trim(filed1) as trim from emp;
select ename,(sal+ifnull(comm,0))*12 as yearsal from emp;
函数 | 作用 |
---|---|
Lower | 转换小写 |
upper | 转化大写 |
substr | 取字串(被截取的字符,起始下标,截断的长度) |
length | 取长度 |
trim | 去空格 |
str_to_date | 字符串转化为日期 |
date_format | 日期格式化 |
format | 设置千分位 |
round | 四舍五入 |
rand() | 生成随机数 |
Ifnull | 将null转为一个具体的值 |
sum | 求和 |
avg | 平均值 |
max | 最大值 |
min | 最小值 |
多行处理函数会自动过滤null和空行
五:去重
select distince filed1 from emp1;
作用:将查询结果中的某一字段的重复记录去掉
用法:distinct字段名或者distinct 字段名1,字段名2…
distinct 字段A:去除和字段名A相同的记录
distince 字段A,字段B:去除与字段A和字段B同时相同的记录
注意:distinct只能出现在所有字段最前面,后面如果有多个字段及为多字段去重
六:分组查询
作用:通过哪个或者哪个字段进行分组
七:having
必须和groupby联合使用
select job,avg(sal) as avgsal from emp group by job having avgsal>2000
与where区别:where过滤在group by之前,having过滤在group by 之后.
八:union
将两个sql语句相加
select ename,job from emp where job='manage'
union
select ename,job from emp where job='salary'
九:limit
limit(m,n)
m:记录开始的index,默认为0,表示第一条记录
n:只从m+1开始,取n条
分页:limit(pageNo-1)*pageSize,pageSize
十:执行顺序
(1)from:将硬盘上的表文件加载到内存
(2)where:将符合条件的数据摘取出来,生成一张临时表
(3)groupby:对生成的临时表进行分组.
(4)having:过滤掉group by生成的不符合条件的临时表
(5)select:对临时表进行整列读取
(6)order by:对select生成的临时表,进行重新排序生成新的临时表
(7)limit:对最后生成的临时表的数据行进行截取.
十一: 其他
函数 | 功能 |
---|---|
IF(value,t,f) | 如果value为真,返回f,否则返回f |
IFNULL(value1,value2) | 如果value不为空,则返回value,否则返回value2 |
CASE WHEN [value] then [result1]…else [default] END | 如果value为真,返回result1,否则返回default |
CASE [expr] WHEN [value] then [result1]…else [default] END | 如果expr等于value,返回result1,否则返回default |