牛客網-線上程式設計-資料庫實戰
第一題:查詢最晚入職員工的所有資訊
思路:查詢,肯定是用SELECT;所有資訊,萬用字元 *;
最晚入職:(1)可以使用WHERE子句來選擇,匯聚函式Max(),對日期可用YEAR(),MONTH(),DATE(),進行分割比較,但是我想了一下,子查詢太複雜。
(2)可以對日期進行降序排序,然後輸出第一行。可以使用ORDER BY和LIMIT;
SELECT * FROM employees ORDER BY hire_date DESC LIMIT 1
通過!開心!
(3)但是第一種方法還是具有可行性,時間不分割也可以使用max來獲得最大值。
SELECT * FROM employees WHERE hire_date=(SELECT Max(hire_date) FROM employees)
第二題:查詢入職員工時間排名倒數第三的員工所有資訊
思路:可以利用第一題的第二種思路,LIMIT可以限制從第幾行輸出幾行。
SELECT * FROM employees ORDER BY hire_date DESC LIMIT 2,1
第三題:查詢各個部門當前(to_date='9999-01-01')領導當前薪水詳情以及其對應部門編號dept_no
注意:題目中給出了兩個表,不同的輸出列在不同的表裡,所以要考慮如何輸出兩個表裡的資訊。內聯結,內連線,好像還不一樣
SELECT s.*,d.dept_no FROM salaries s, dept_manager d WHERE d.to_date='9999-01-01' AND s.to_date='9999-01-01' AND d.emp_no=s.emp_no
後一項可以換成任意兩個表中的公共項
內連線:
SELECT salaries.emp_no,salaries.salary,salaries.from_date,salaries.to_date,dept_no
From salaries INNER JOIN dept_manager
on salaries.to_date='9999-01-01' AND dept_manager.to_date='9999-01-01' AND salaries.emp_no=dept_manager.emp_no
前面的輸出在兩個表中都包含的一定要寫完全名,另外名字一定要寫對(真的),匹配的時候字串要加單引號,
第四題:查詢所有已經分配部門的員工的last_name和first_name
第一個表就是已分配部門的,根據第一個表中的emp_no找出第二個表中的員工的last_name和first_name
SELECT last_name, first_name,dept_no FROM employees, dept_emp WHERE employees.emp_no=dept_emp.emp_no
第五題:查詢所有員工的last_name和first_name以及對應部門編號dept_no,也包括展示沒有分配具體部門的員工
根據題目分析可知是典型的左連線
SELECT last_name, first_name, dept_no FROM employees LEFT JOIN dept_emp ON employees.emp_no=dept_emp.emp_no