1. 程式人生 > >牛客網-線上程式設計-資料庫實戰

牛客網-線上程式設計-資料庫實戰

第一題:查詢最晚入職員工的所有資訊

思路:查詢,肯定是用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