tag 排序
截取數(shù)據(jù)
題目
查找入職員工時(shí)間排名倒數(shù)第三的員工所有信息
CREATE TABLEemployees
(
emp_no
int(11) NOT NULL,
birth_date
date NOT NULL,
first_name
varchar(14) NOT NULL,
last_name
varchar(16) NOT NULL,
gender
char(1) NOT NULL,
hire_date
date NOT NULL,
PRIMARY KEY (emp_no
));
思路
看到這個(gè)題目會(huì)瞬間想到排序斩跌,只有進(jìn)行排序之后才能進(jìn)行選取第行的數(shù)據(jù)饺藤,但是和查找最晚入職員工的所有信息不同的是击儡,這個(gè)無(wú)法使用像max()
和min()
這種簡(jiǎn)單函數(shù)來(lái)實(shí)現(xiàn)了,這就涉及到了order by
蝙砌,進(jìn)行排序后映胁,你會(huì)陷入另外一個(gè)坑阅悍,那就是怎么找出第三行的數(shù)據(jù)附鸽,通過(guò)查找有這種方法使用limit
可以截取某一部分的數(shù)據(jù)屯断,limit
和top
的區(qū)別是top
是無(wú)法截取數(shù)據(jù)的只能從頭獲取指定行數(shù)的數(shù)據(jù)文虏,除非你獲取第一行數(shù)據(jù)侣诺,否則top是沒(méi)辦法截取一行數(shù)據(jù)的,所以只能通過(guò)limit
來(lái)解決氧秘,既然可以截取好多行年鸳,那我就讓limit
后面的兩個(gè)數(shù)據(jù)一樣,這樣不就截取了一行嗎丸相?然后你就會(huì)有這樣的答案
select * from employees where (hire_date = (select hire_date from employees order by hire_date desc limit 3,3))
但為什么還是不對(duì)呢搔确?這里要注意一點(diǎn)limit
后面的行并不是從1開(kāi)始的,是從0開(kāi)始的灭忠,所以最終答案要改成
select * from employees where (hire_date = (select hire_date from employees order by hire_date desc limit 2,2))
總結(jié)
- order by 的升降序排列
- limit 截取查詢的部分結(jié)果集合
- top 獲取指定行數(shù)的數(shù)據(jù)集合