練習(xí)SQL利器尾序,徘椋客網(wǎng)SQL實戰(zhàn)題庫,1~8題

練習(xí)SQL利器琢歇,牛客網(wǎng)SQL實戰(zhàn)題庫揭保,1~8題

牌呛辏客網(wǎng)SQL實戰(zhàn)網(wǎng)址:https://www.nowcoder.com/ta/sql
持續(xù)更新——記錄自己在牛客網(wǎng)SQL的做題過程

1.查找最晚入職員工的所有信息

題目描述:
查找最晚入職員工的所有信息
CREATE TABLE employees (
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));

應(yīng)該考慮的問題:
①最晚入職的當(dāng)天未必就一個人味榛,也許有多人予跌,使用排序并限制得只能取得指定數(shù)量的結(jié)果

SELECT * 
FROM employees 
WHERE hire_date = (
                            SELECT MAX(hire_date) 
                            FROM employees);

注:日期最大的就是最晚的,日期較早就是較小继榆。

2.查找入職員工時間排名倒數(shù)第三的員工所有信息

題目描述:
查找入職員工時間排名倒數(shù)第三的員工所有信息
CREATE TABLE employees (
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));

應(yīng)該考慮的問題:
①取的是日期倒數(shù)第三的人汁掠,不是倒數(shù)第三的人

SELECT emp_no, birth_date, first_name, last_name, gender, hire_date
FROM employees
WHERE hire_date=(
                          SELECT DISTINCT hire_date
                          FROM employees
                          ORDER BY hire_date DESC
                          LIMIT 2,1);

注:
①糯渲遥客網(wǎng)網(wǎng)友EricZeng的嚴(yán)謹(jǐn)寫法乞榨,可以學(xué)習(xí)当娱。
②LIMIT是從0開始計數(shù)考榨。

3.查找各個部門當(dāng)前(to_date='9999-01-01')領(lǐng)導(dǎo)當(dāng)前薪水詳情以及其對應(yīng)部門編號dept_no

題目描述:
查找各個部門當(dāng)前(to_date='9999-01-01')領(lǐng)導(dǎo)當(dāng)前薪水詳情以及其對應(yīng)部門編號dept_no
CREATE TABLE dept_manager (
dept_no char(4) NOT NULL,
emp_no int(11) NOT NULL,
from_date date NOT NULL,
to_date date NOT NULL,
PRIMARY KEY (emp_no,dept_no));
CREATE TABLE salaries (
emp_no int(11) NOT NULL,
salary int(11) NOT NULL,
from_date date NOT NULL,
to_date date NOT NULL,
PRIMARY KEY (emp_no,from_date));
應(yīng)該考慮的問題:
①薪水表是按年發(fā)放的,所以要過濾掉以前的薪水冀惭,只保留現(xiàn)在還在的當(dāng)前領(lǐng)導(dǎo)的薪水

SELECT s.*,d.dept_no FROM salaries AS s,dept_manager AS d
WHERE s.emp_no = d.emp_no 
AND s.to_date='9999-01-01'
AND d.to_date='9999-01-01'

注:
①用AND可以加條件

4.查找所有已經(jīng)分配部門的員工的last_name和first_name

題目描述:
查找所有已經(jīng)分配部門的員工的last_name和first_name
CREATE TABLE dept_emp (
emp_no int(11) NOT NULL,
dept_no char(4) NOT NULL,
from_date date NOT NULL,
to_date date NOT NULL,
PRIMARY KEY (emp_no,dept_no));
CREATE TABLE employees (
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));

應(yīng)該考慮的問題:
①因為是查找已分配部門的員工散休,所以dept_no不應(yīng)該為空乐尊,應(yīng)該使用內(nèi)連接。

SELECT emp.last_name,emp.first_name,dept.dept_no 
FROM dept_emp dept,employees emp
WHERE emp.emp_no = dept.emp_no

注:表連接扔嵌。

5.查找所有員工的last_name和first_name以及對應(yīng)部門編號dept_no

題目描述:
查找所有員工的last_name和first_name以及對應(yīng)部門編號dept_no,也包括展示沒有分配具體部門的員工
CREATE TABLE dept_emp (
emp_no int(11) NOT NULL,
dept_no char(4) NOT NULL,
from_date date NOT NULL,
to_date date NOT NULL,
PRIMARY KEY (emp_no,dept_no));
CREATE TABLE employees (
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));

應(yīng)該考慮的問題:
①沒有具體分配的員工也要展示谣殊,也就是要保證employees表的完整
②內(nèi)連接已經(jīng)不能滿足需求牺弄,需要用左連接或者又連接

SELECT e.last_name,e.first_name,d.dept_no 
FROM employees e LEFT JOIN dept_emp d
ON e.emp_no=d.emp_no;

注:
①內(nèi)連接(INNER JOIN)兩邊表任何一邊缺失都不顯示宜狐。
②左連接(LEFT JOIN)抚恒,右邊表可以無對應(yīng)數(shù)據(jù)。
③右連接(RIGHT JOIN)俭驮,左邊表可以無對應(yīng)數(shù)據(jù)。

6. 查找所有員工入職時候的薪水情況

題目描述:
查找所有員工入職時候的薪水情況遗遵,給出emp_no以及salary逸嘀, 并按照emp_no進行逆序
CREATE TABLE employees (
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));
CREATE TABLE salaries (
emp_no int(11) NOT NULL,
salary int(11) NOT NULL,
from_date date NOT NULL,
to_date date NOT NULL,
PRIMARY KEY (emp_no,from_date));

應(yīng)該考慮的問題:
①因為員工會有多次漲薪,所以salaries.emp_no 不唯一翼岁,這時我們就應(yīng)該確定具體確定這個薪水的時間,也就是這個入職時間hire_date

SELECT e.emp_no, s.salary FROM employees AS e, salaries AS s
WHERE e.emp_no = s.emp_no AND e.hire_date = s.from_date
ORDER BY e.emp_no DESC

7.查找薪水漲幅超過15次的員工號emp_no以及其對應(yīng)的漲幅次數(shù)t

題目描述:
查找薪水漲幅超過15次的員工號emp_no以及其對應(yīng)的漲幅次數(shù)t
CREATE TABLE salaries (
emp_no int(11) NOT NULL,
salary int(11) NOT NULL,
from_date date NOT NULL,
to_date date NOT NULL,
PRIMARY KEY (emp_no,from_date));

應(yīng)該考慮的問題:
①需要利用分組函數(shù)GROUP BY對emp_no進行分組悉患。
②需要利用分組限定條件限定t值

SELECT emp_no,COUNT(emp_no) as t FROM salaries
GROUP BY emp_no HAVING t>15

注:①好像是先選擇列和計算榆俺,然后再進行分組和再一次計算,也就是按照語句的順序進行谴仙。

8.找出所有員工當(dāng)前具體的薪水salary情況

題目描述:
找出所有員工當(dāng)前(to_date='9999-01-01')具體的薪水salary情況,對于相同的薪水只顯示一次,并按照逆序顯示
CREATE TABLE salaries (
emp_no int(11) NOT NULL,
salary int(11) NOT NULL,
from_date date NOT NULL,
to_date date NOT NULL,
PRIMARY KEY (emp_no,from_date));

SELECT DISTINCT salary FROM salaries 
WHERE to_date='9999-01-01'
ORDER BY salary DESC
或
SELECT DISTINCT salary FROM salaries 
WHERE to_date='9999-01-01'
GROUP BY salary
ORDER BY salary DESC;

注:
①大表一般用distinct效率不高揩局,大數(shù)據(jù)量的時候都禁止用distinct掀虎,建議用group by解決重復(fù)問題。
②在不同記錄數(shù)較小時驰怎,count group by性能普遍高于count distinct二打,尤其對于text類型表現(xiàn)的更明顯。而對于不同記錄數(shù)較大的場景继效,count group by性能反而低于直接count distinct(牛客網(wǎng)網(wǎng)友—啊啥水果的總結(jié))

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末厉颤,一起剝皮案震驚了整個濱河市凡简,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌帜乞,老刑警劉巖溉仑,帶你破解...
    沈念sama閱讀 206,482評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異怨喘,居然都是意外死亡,警方通過查閱死者的電腦和手機必怜,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評論 2 382
  • 文/潘曉璐 我一進店門梳庆,熙熙樓的掌柜王于貴愁眉苦臉地迎上來暖途,“玉大人膏执,你說我怎么就攤上這事∑劾酰” “怎么了征峦?”我有些...
    開封第一講書人閱讀 152,762評論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長类腮。 經(jīng)常有香客問我蛉加,道長,這世上最難降的妖魔是什么七婴? 我笑而不...
    開封第一講書人閱讀 55,273評論 1 279
  • 正文 為了忘掉前任打厘,我火速辦了婚禮贺辰,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘饲化。我一直安慰自己,他們只是感情好硫眨,可當(dāng)我...
    茶點故事閱讀 64,289評論 5 373
  • 文/花漫 我一把揭開白布巢块。 她就那樣靜靜地躺著巧号,像睡著了一般姥闭。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上棚品,一...
    開封第一講書人閱讀 49,046評論 1 285
  • 那天铜跑,我揣著相機與錄音,去河邊找鬼锅纺。 笑死,一個胖子當(dāng)著我的面吹牛拣帽,可吹牛的內(nèi)容都是我干的嚼锄。 我是一名探鬼主播,決...
    沈念sama閱讀 38,351評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼拧粪,長吁一口氣:“原來是場噩夢啊……” “哼沧侥!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起宴杀,我...
    開封第一講書人閱讀 36,988評論 0 259
  • 序言:老撾萬榮一對情侶失蹤旺罢,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后扁达,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,476評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡炉旷,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,948評論 2 324
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了骏啰。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片抽高。...
    茶點故事閱讀 38,064評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖壁熄,靈堂內(nèi)的尸體忽然破棺而出碳竟,到底是詐尸還是另有隱情,我是刑警寧澤莹桅,帶...
    沈念sama閱讀 33,712評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站懂拾,受9級特大地震影響铐达,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜瓮孙,卻給世界環(huán)境...
    茶點故事閱讀 39,261評論 3 307
  • 文/蒙蒙 一杭抠、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧偏灿,春花似錦、人聲如沸菩混。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,264評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春呼畸,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背蛮原。 一陣腳步聲響...
    開封第一講書人閱讀 31,486評論 1 262
  • 我被黑心中介騙來泰國打工另绩, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人蹦漠。 一個月前我還...
    沈念sama閱讀 45,511評論 2 354
  • 正文 我出身青樓车海,卻偏偏與公主長得像,于是被迫代替她去往敵國和親侍芝。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,802評論 2 345

推薦閱讀更多精彩內(nèi)容