Mysql中的一些常考知识
- 窗口函数的位置可以放置以下两种函数:
1>专用窗口函数,包括rownumber(); rank(); denserank()等(后文以这3个为例介绍)。
- rank() 如果有并列名次的行,占用下一名次的位置;
- dense_rank() 如果有并列名次的行,顺次排列,不占用下一名次的位置;
- row_number() 顺次排序,不考虑并列名次问题。
partition by 和 group by的区别:
group by只能得到分组后的统计数据(即每组一条数据),over (partition by)不仅可以得到分组后的统计数据,还可以显示明细数据(即可以显示每组下的各成员内容)。
2 >聚合函数,如sum, avg, count, max, min等。
基本语法:
<窗口函数> OVER (PARTITION BY <用于分组的列名> ORDER BY <用于排序的列名>);
-- over关键字用于指定函数的窗口范围,
-- partition by 用于对表分组,
-- order by子句用于对分组后的结果进行排序。
rank()
将每个班按成绩排名
SELECT *,rank() OVER (PARTITION BY 班级 ORDER BY 成绩 DESC) AS ranking FROM 班级表;
dense_rank(),row_number()的用法及与rank()的区别
SELECT *,rank() OVER (ORDER BY 成绩 DESC) AS ranking,
dense_rank() OVER (ORDER BY 成绩 DESC) AS dense_rank,
row_number() OVER (ORDER BY 成绩 DESC) AS row_number FROM 班级表;
2.sql中聚合函数
MAX MIN SUM AVG COUNT VAR(返回给定表达式中所有值的统计方差) VARP(返回给定表达式中所有值的填充的统计方差) COUNT_BIG(返回指定组中的项目数量,与COUNT函数不同的是COUNT_BIG返回bigint值,而COUNT返回的是int值。)
3.where和having的区别
1)区别
having是在分组后对数据进行过滤
where是在分组前对数据进行过滤
having后面可以使用聚合函数
where后面不可以使用聚合函数
2)sql语句执行顺序
4.怎么筛选出A表没有而B表有的数据
select A.ID from A left join B on A.ID=B.ID where B.ID is null
5.left join后面用on和where的区别
1)on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录。
2)where条件是在临时表生成好后,再对临时表进行过滤的条件。这时已经没有left join的含义(必须返回左边表的记录)了,条件不为真的就全部过滤掉。
6.DQL、DML和DDL的区别
DQL(Data Query Language)数据查询语言:
适用范围:对数据库中的数据进行查询操作,select
DML(Data Manipulation Language)数据操纵语言:
适用范围:对数据库中的数据进行一些简单操作,如insert,delete,update等.
主要指数据的增删改:insert delete update
DDL(Data Definition Language)数据定义语言:
适用范围:对数据库中的某些对象(例如,database,table)进行管理,如Create,Alter和Drop.
建库、建表、设置约束