MySQL查询

MySQL查询

查询语法及顺序

select 查询列表    ⑦
from 表1 别名       ①
连接类型 join 表2   ②
on 连接条件         ③
where 筛选          ④
group by 分组列表   ⑤
having 筛选         ⑥
order by排序列表    ⑧
limit 起始条目索引,条目数;  ⑨

关键字顺序:

  1. select -->显示列
  2. from --> 查询的表
  3. <left, right> join .... on .... --> 左外右外链接
  4. where --> 查询条件
  5. group by --> 分组查询
  6. having --> 筛选
  7. order by --> 排序(asc desc)
  8. limit --> 分页查询

基础查询

查询表中所有数据

select * from 表名;

显示指定列

select 列名1, 列名2... from 表名;

去重查询

distinct 关键字, 下面查询是对列名1进行去重

select distinct 列名1,列名2 from 表明;

条件查询(where)

操作符 描述
= 等于
<> 和 != 不等于
> 大于
< 小于
>= 大于等于
<= 小于等于
between... and ... 在某个范围之间
like 模糊查询(%代表任意数量字符, _代表一个字符)
and
or

查询范围(between)

between x and y 在x和y之间 包括x和y

查询id在5~9之间的内容

select * from 表 where id between 5 and 9;

模糊查询(like)

查询第二个字是 '雷' 的name;

select * fron 表 where name like '_雷%';

查询包含 '雷' 字的name;

select * from 表 where name like '%雷%';

null处理 ifnull()函数

ifnull(列, 替换值) : 如果指定的列为null, 则使用替换值

多表查询(... join... on...)

等值连接

select * from A,B 
where A.x=B.x and A.age=18

内连接 用的更多

select * from A join B 
on A.x=B.x
where A.age=18;

左外查询 (常用)

left join 表 on 表关系

格式:

select * from 表1 left join 表2 on 表1和表2的关系

左外查询案例:

select * from dept left join emp 
on emp.dept_id=dept.id; -- 左外连接查询

右外查询

right join 表 on 表关系

格式和案例和左外连接基本类似

左外查询的时候, from后面的表是主表, 数据会完全展示, join后面的表只有和主表有关系的才会展示, 右外查询反之.

多行查询

注意:

  • 多行函数和是否分组有关,如果查询结果中的数据没有经过分组,默认整个查询结果是一个组,多行函数就会默认统计当前这一个组的数据。产生的结果只有一个。
  • 如果查询结果中的数据经过分组(分的组不止一个),多行函数会根据分的组进行统计,有多少个组,就会统计出多少个结果。

多行函数:

多行函数 说明
count(列名 | *) 统计结果集中指定列的记录的行数
max(列名) 统计结果集中某一列值中的最大值
min(列名) 统计结果集中某一列值中的最小值
sum(列名) 统计结果集中某一列所有值的和
avg(列名) 统计结果集中某一列值的平均值

统计表中总条数

select count(*) from 表;

统计某一列最大值

select max(类名) from 表;

统计某一列平均值

select avg(列名) from 表;

分组查询(group by)

统计各个部门人数

select 部门列, count(*) from 表 group by 部门列;

显示各个部门的最高薪资

select 部门列, max(薪资列) from 表 group by 部门列;

筛选(having)

having一定要和group by一起使用, 用于筛选

having可以使用多行函数

例如: 查询每个分类商品所对应的平均单价,要求平均单价低于100

select 
	category_id,
	avg(price) as p 
from t_item 
group by category_id having p<100;

排序查询(order by)

升序(asc), 降序(desc) 默认升序;

升序查询示例

按薪资升序查询

select 名字, 薪资 from 表 order by 薪资 asc;
-- 或者可以省略asc, 因为默认为升序asc
select 名字, 薪资 from 表 order by 薪资;

分页查询(limit)

格式: limit m, n

  • m是从第几条数据开始(最小为0), (页码-1)*每页记录数

  • n为这一页显示的数据总量, 每页记录数

分页显示示例

每页显示3条记录,返回第 2 页。

select * from 表 limit 3, 3;
/*
	每页3个数据, 所以limit第二个参数是3
	第一页是 0, 1, 2
	第二页是 3, 4, 5
	因为要查询第二页, 所以应该从3开始, 所以第二个下标为3
*/

子查询

子查询, 可以把一个 查询语句的结果当作一个值, 让其他语句使用.

例如:

查询emp表中工资最高的员工信息

select max(sal) from emp; -- 得到5000
select * from emp where sal=5000; -- 根据5000找到对象的员工

将以上两条合并成一条sql语句

select * from emp where sal=(
    select max(sal) from emp
);

合并查询

关键字: union

用来把两个查询语句的结果合并为一个结果, 例如

select 列a, 列b from 表1
union
select 列c, 列d from 表2;

结果是两条查询语句合并的结果, 结果会默认去重,

而且查询的时候两条查询语句的列数要一样才可以

别名 (as)

关键字: as (可省略)

一旦使用了别名, 后续在语句中使用的时候必须要使用别名

例如:

select
	e.name as name,
	d.name as dept
from 
	emp e, 
	dept d
where
	e.dept_id = d.id;
原文地址:https://www.cnblogs.com/zpKang/p/12997432.html