牛客線上程式設計練習:SQL9_中等
阿新 • • 發佈:2021-01-31
SQL練習:SQL9_中等
題目: 獲取所有部門當前(dept_manager.to_date=‘9999-01-01’)manager的當前(salaries.to_date=‘9999-01-01’)薪水情況,給出dept_no, emp_no以及salary,輸出結果按照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`));
題解
#方式1:隱式內連線
SELECT D.dept_no,D.emp_no,S.salary
FROM dept_manager D,salaries S
WHERE D.emp_no = S.emp_no AND D.to_date = '9999-01-01' AND S.to_date = '9999-01-01'
ORDER BY D.dept_no
#方式2:顯式內連線
SELECT D.dept_no,D.emp_no,S.salary
FROM dept_manager D
INNER JOIN salaries S ON D.emp_no = S.emp_no # INNER可省略
WHERE D.to_date = '9999-01-01' AND S.to_date = '9999-01-01'
ORDER BY D.dept_no
#方式3:左外連線
SELECT D.dept_no,D.emp_no,S.salary
FROM dept_manager D
LEFT JOIN salaries S ON D.emp_no = S.emp_no # OUTER可省略
WHERE D.to_date = '9999-01-01' AND S.to_date = '9999-01-01'
ORDER BY D.dept_no
#方式4:右外連線
SELECT D.dept_no,D.emp_no,S.salary
FROM dept_manager D
RIGHT OUTER JOIN salaries S ON D.emp_no = S.emp_no # OUTER可省略
WHERE D.to_date = '9999-01-01' AND S.to_date = '9999-01-01'
ORDER BY D.dept_no
個人整理的筆記,僅供學習使用,有問題麻煩指正。
題目及解答思路均來源於:牛客網