j### distinct
去除查询到的字段的重复项,一般只用在一个字段上,若作用在多个字段则需要所有字段都相等才去除
内连接
内连接只会查询到满足条件的数据
内连接的语法
tablename inner join tablename on 条件
外连接
外连接分为左外连接、右外连接、满外连接
左外连接(left join…on)
不仅仅包含两张表的交集(内连接的数据),还包含左表中剩余未和右表匹配的数据
右外连接(right join…on)
不仅仅包含两张表的交集(内连接的数据),还包含右表中剩余未和左表匹配的数据
满外连接(full join…on)MySQL数据库不支持
包括左表和右表的交集,也包括左表剩余未和右表匹配的数据和右表剩余未和左表匹配的数据
窗口函数
语法
<窗口函数> over (partition by <分组列>
order by <排序列>)
窗口函数的位置可以放两种函数:
- 专用窗口函数,如:rank、dense_rank、row_number等;
- 聚合函数,如,sum、avg、max、min、count等。
窗口函数具有的功能:
- 同时具有分组(partition by)和排序(order by)的功能;
- 不减少原表的行数,所以经常用来在每组内排名。
注意事项
窗口函数原则上只能写在select子句中
使用场景
业务需求“在每组内排名”,比如:
- 排名问题,每个部门按业绩来排名;
- topN问题,找出每个部门排名前N的员工。
具体使用
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 grade;
三种专业窗口函数的区别:
- rank() 排序时会将相同的数据记为同一名次,并且每个数据都会占用名次位;
- dense_rank() 排序时会将相同的数据记为同一名次,相同的数据不会占用名次位;
- row_number() 排序时就算是相同的数据也不会出现一样的名次;
使用聚合函数作为窗口函数
-
max(列)
由于窗口函数的分组不会影响查询到数据的条数,使用max函数作为窗口函数时,会统计当前行与之前查到的所有行中的该列的最大值,并赋值; -
min(列)、avg(列)、sum(列)、count(列)的效果都是统计查询到的数据行和之前的数据进行聚合计算。
导出数据库中某张表的数据
mysqldump -u root -p -h 127.0.0.1 varms simplex_index_data > /home/simplex_index_data.sql
- varms:库名;
- simplex_index_data :表名。