mysql 条件查询去重_MySQL查询

MySQL查询

查询语法及顺序

select 查询列表 ⑦

from 表1 别名 ①

连接类型 join 表2 ②

on 连接条件 ③

where 筛选 ④

group by 分组列表 ⑤

having 筛选 ⑥

order by排序列表 ⑧

limit 起始条目索引,条目数; ⑨

关键字顺序:

select -->显示列

from --> 查询的表

\ join .... on .... --> 左外右外链接

where --> 查询条件

group by --> 分组查询

having --> 筛选

order by --> 排序(asc desc)

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;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值