排序函数
- rank() over: 排名相同的两名是并列,但是占用两个名词,1 1 3 4 4 6 这种.
- dense_rank() over : 排名相同的两名是并列的但是占用一个名次.
- row_number() over : 这个函数不需要考虑是否并列,哪怕根据条件查询出来的数值相同也会进行排序.
select score,
(dense_rank() over (order by Score desc)) as 'rank'
from Scores;
Limit
- 此函数的limt(1,2) 代表从1 开始取出2行的数据.
连续等号相当于boolean表达式
如下两条语句是等值的
SELECT
*
FROM
student a,
score b,
score c
WHERE a.`s_id` = b.`s_id` = c.`s_id` ;
---------------------------------------------
SELECT
*
FROM
student a,
score b,
score c
WHERE (a.`s_id` = b.`s_id` AND c.`s_id`=0) OR (a.`s_id` = b.`s_id` AND c.`s_id`=1) ;
=不能用来判断为null 值的数据
select from A a left join B b on a.列名=b.列名 where b.id isnull;
左连接和右连接的使用区别
`左连接是取写在左边表的部分 右连接是取写在右边表的部分
-
聚合函数要使用的话,有一个前提,那就是是必须要有结果集。正如当初传智播客出的书中写到。
根据mysql的执行步骤,当程序执行到where的时候,mysql是没有结果集的,所以聚合函数不能用在where后面。
但聚合函数为什么就可以放在having后面呢?原因是使用having,前面一定要有分组,而分组的时候就已经有结果了,所以就有结果集,满足聚合函数前面一定要有结果集的要求。
聚合函数
case 函数
select
(case
# 当座位号是奇数并且不是不是最后一个座位号时
when mod(id, 2) != 0 and counts!= id then id + 1
# 当座位号是奇数并且是最后一个座位号时,座位号不变
when mod(id, 2) != 0 and counts = id then id
# 当座位号是偶数时
else id - 1
end) as id2,student
from seat,(select count(*) as counts from seat) as b
order by id asc;