MYSQL数据操作语言DML之数据查找select
SQL规范
查询表基本数据
select 标识哪些列
from 标识表
//查询所有的列
select *
from 表名
//查询指定的列
select id as 别名,name 别名 //起别名时as是可以省略的,如果别名中有空格使用【"别 名"】
from 表名
去除查询重复行
select distinct 标识列 //distinct是对所有的列名组合进行去重
from 表名
NULL值参与运算时,运算结果都为NULL
select id,price*2 ”别名“ //如果参与运算的price是NULL则结果也是NULL,一般价格是0而不是NULLL
from 表名
如果表名、函数等出现与mysql系统关键字一样需要使用着重号
select * from `order` //如取了表名为order需要用着重号,因为order也是关键字
查询时增加一个固定常量字段列
select ”高中“ high_school ,【其他列】
from 表名
查询过滤
select 标识列
from 表名
where 条件
常见条件
1. is not null //是否不为空
2. least(a,b...) //返回所有参数重中小值,有NULL则返回NULL
3. greatest(a,b...) //返回所有参数中最大值,有NULL则返回NULL
4. between a and b //返回两个值之间
5. isnull //判断是否为空
6. in(a,b...) //属于运算符,还有not in(a,b...)
7. like //模糊匹配,常用通配符:【%】可以匹配0个或多个字符,【_】只能匹配一个字符
8. regexp a 和 rlike a 正则表达式运算符
9. not或!、and或&&、or或||、xor(异或)
排序
select 标识列
from 表名
where 条件
order by 列名 【降序:desc、升序:asc(默认)】//多列排序需要前面列出现值一样才会进行排序
分页
select 标识列
from 表名
limit 偏移量,行数 //如limit 20,10:表示显示第21行到30行的数据
多表查询
select 表名.列名,表名.列名 //如果出现的列名两张表都有则需要指出表名
from 表1 别名,表2 别名
where 条件 //如相同:表1.name = 表2.name,连接n个表需要n-1条件,相当于内连接
select 表名1.列名,表名2.列名
from 表1 别名1,表1 别名2 //相同的一张表取不同别名来形成虚拟的两张表
where 条件 //如相同:别名1.name = 别名2.name
内连接:结果集中不包含一个表与另外一个表不匹配的行【join 表 on 条件】
select 标识列
from 表1
join 表2 on 连接条件 //表示内连接,如相同:表1.name = 表2.name
where 其他条件
外连接:结果集包含一个表与另外一个表不匹配的行,返回左或右中不满足的条件行,成为左外连接或右外连接
select 标识列
from 表1
left/right join 表2 on 连接条件 //left表示左外连接,right表示右外连接
where 其他条件
union 和union all :都表示合并结果集,union all直接合并,union会去重,所以常用union all而不是union
select 标识列1
from 表1
union 【all】// 两个查询的标识列相同。所以可以搭配实现上面的7个外连接
select 标识列1
from 表1
子查询
查询价格高于电脑的商品
select 标识列
from 表名
where price >(
select price
from 表名
where name = “电脑”
)
分组查询
select avg(salary)
from 员工表
group by 部门id
常见函数
函数名 | 意义 |
---|---|
abs(x) | 返回x的绝对值 |
sign(x) | x正数返回1,负数返回-1,0返回0 |
least(a,b…) | 返回参数中的最小值 |
greatest(a,b…) | 返回参数中的最大值 |
rand(x) | 返回0-1随机值 |
round(x) | 返回四舍五入后的值 |
concat(a,b…) | 返回字符串a.b…相连接 |
nullif(a,b) | 比较两个字符串,相同返回null,否则返回a |
avg(x) | 返回平均值 |
sum(x) | 返回总和 |
max(x) | 返回最大值 |
min(x) | 返回最小值 |
count() | 返回数据条数,建议使用count(*) |