MySQL常用关键字

1.distinct

返回列值,去除重复值
SELECT DISTINCT 列名称 FROM 表名称

2.order by

根据字段由小到大排序(系统默认由小到大),

  • 若第一个字段重复了,order by后再加一字段再比较。
  • 也可将sal换成数字(代表在表中是第几个字段,从1开始计数)
select name,job,sal from table_name where name = ‘张三’ order by sal;

3.asc desc

手动指定按字段由小到大排序(升序关键字 asc)(降序关键字desc)
 

select name,job,sal from table_name where name = ‘张三’ order by sal desc;

4.limit

返回部分条数据

SELECT * FROM table LIMIT start_index,num_Line; // 表示从start_index开始 num_Line行数据
SELECT * FROM table LIMIT 0,-1; // 检索记录行 0-last.全部数据
SELECT * FROM table LIMIT 5; //检索前 5 个记录行

5. rank() dense_rank() row_number()

将表中按钱顺序排名。

注意:MySQL有rank关键字,建议将rank替换为`rank` 。不是单引号 是键盘1左边的符号。

rank():返回的相关等级会跳跃;

dense_rank():返回的相关等级不会跳跃;

row_number():返回的是行信息,没有排名;

select employee_name,
       money,
       rank() over(order by money) `rank`,
       dense_rank() over(order by money) dense_rank,
       row_number() over(order by money) row_number
  from salary;

6.group by

将数据按照 group by 后面的字段分组,只返回每组的一条统计信息。即将字段值重复的行合并为一行

https://blog.csdn.net/qq403580298/article/details/90756352

每一个班级里面最高分数的同学是谁。

select name, class , max(score) from test_group group by class;

 

7.partition by

partition  by关键字是分析性函数的一部分,它和聚合函数(如group by)不同的地方在于它能返回一个分组中的多条记录,而聚合函数一般只有一条反映统计值的记录,

partition  by用于给结果集分组,如果没有指定那么它把整个结果集作为一个分组。

partition by 与group by不同之处在于前者返回的是分组里的每一条数据,并且可以对分组数据进行排序操作。后者只能返回聚合之后的组的数据统计值的记录。

(1)把每个人学生的成绩按照升序排名 (思路:根据学生姓名分组 根据每个人成绩排序)

select *,ROW_NUMBER() over( partition by Name order by Score ) 排名 from UserGrade;

(2)把每个学科的成绩分别进行排名 (思路:根据学科分组 根据成绩排序)

select *,ROW_NUMBER() over( partition by Course order by Score ) 排名 from UserGrade;

8.having

having字句可以让我们筛选成组后的各种数据,where字句在聚合前先筛选记录。

having与where的区别:
having是在分组后对数据进行过滤
where是在分组前对数据进行过滤
having后面可以使用聚合函数
where后面不可以使用聚合

在查询过程中执行顺序:from>where>group(含聚合)>having>order>select。

显示每个地区的总人口数和总面积.
select region, sum(population), sum(area) from bbc group by region;




显示每个地区的总人口数和总面积.仅显示那些面积超过1000000的地区。
select region, sum(population), sum(area)
from bbc
group by region
having sum(area)>1000000;
不能用where来筛选超过1000000的地区,因为表中不存在这样一条记录。

9.in

in常用于where表达式中,其作用是查询某个范围内的数据。not in与in作用相反

select * from where field in (value1,value2,value3,…)

 

查询book表中id为2和4的所有数据:

select * from where id in (2,4)

10.on

on:作用是作为生成临时表的条件 。

where:临时表生成后,作为筛选。

on是生成临时表时使用的条件,上面我们采用的是左外连接,左外连接是以左表为基础的,左表的记录将会全部表示出来,而右表只会显示符合搜索条件的记录。也就是说emp是左表,dept是右表,条件是emp的deptno与dept中的deptno相等且为40时才连接,但emp表中不存在deptno为40的记录,也就是右表没有符合条件的记录,而记录不足的地方均用NULL来补充。


而where是在临时表生成好后,再对临时表进行过滤。也就是说emp表与dept的连接条件只是emp的deptno与dept中的deptno相等,然后在对生成的临时表进行筛选,由于emp表中不存在deptno为40的记录,所以未找到符合条件的记录。

由于内连接是从结果表中删除与其他被连接表中没有匹配行的所有行,所有在内连接时on和where的结果是相同的。而左外、右外与全连接由于它的特殊性,on和where造成的差别大小取决于表达式和表中的数据。

11.datediff

DATEDIFF() 函数返回两个日期之间的天数。

SELECT DATEDIFF('2008-12-30','2008-12-29') AS DiffDate
DiffDate
1
SELECT DATEDIFF('2008-12-29','2008-12-30') AS DiffDate
DiffDate
-1

 

12.in和exists

1. in()适合B表比A表数据小的情况

2. exists()适合B表比A表数据大的情况

当A表数据与B表数据一样大时,in与exists效率差不多,可任选一个使用.

select * from A where id in(select id from B)


select a.* from A a where exists(select 1 from B b where a.id=b.id)

https://blog.csdn.net/weichi7549/article/details/108181623

13.decimal数据类型

float:浮点型,含字节数为4,32bit,数值范围为-3.4E38~3.4E38(7个有效位)

double:双精度实型,含字节数为8,64bit数值范围-1.7E308~1.7E308(15个有效位)

decimal:数字型,128bit,不存在精度损失,常用于银行帐目计算。(28个有效位)

decimal(a,b)

a指定指定小数点左边和右边可以存储的十进制数字的最大个数,最大精度38。 b指定小数点右边可以存储的十进制数字的最大个数。小数位数必须是从0 到 a之间的值。默认小数位数是 0。 

score decimal(5,2) -- 取值范围是 -999.99 到 999.99

 

14.UNION和UNION ALL

UNION用于合并两个或多个select语句的结果集,多个select内部必须有相同数量的列,数据类型相似,列顺序相同。

select name from table1
union
select name from table2

union会把重复的值过滤掉,union all会把重复的值显示出来。

  • 9
    点赞
  • 102
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值