【sql】牛客网练习题 (共 61 题)
【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`)); 題解: 1 select * from employees order by hire_date desc limit 1; ? ?【2】查找入職員工時間排名倒數第三的員工所有信息 (表同問題1)題解:limit m, n 表示從第 m 條數據(0-based)開始取 n 條數據。(或者也可以理解成 limit m, n? 表示從第 m + 1 條數據開始, 取 n 條數據) 1 select * from employees order by hire_date desc limit 2, 1; ?【3】查找當前薪水詳情以及部門編號dept_no查找各個部門當前(to_date='9999-01-01')領導當前薪水詳情以及其對應部門編號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`)); 題解:兩張表 join 一下,然后選擇 salaries 表作為主表join dept表。 (注意寫法)。 select s.* , d.dept_no from salaries as s join dept_manager as d on s.emp_no=d.emp_no where s.to_date = '9999-01-01' and d.to_date = '9999-01-01' ? 【4】查找所有已經分配部門的員工的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`)); 題解: select emp.last_name, emp.first_name, dept.dept_no from employees as emp join dept_emp as dept on emp.emp_no = dept.emp_no; ?【5】查找所有員工的last_name和first_name以及對應部門編號dept_no查找所有員工的last_name和first_name以及對應部門編號dept_no,也包括展示沒有分配具體部門的員工。創建表語句同第4題。題解:因為沒有分配具體部門的員工也需要展示,所以,需要 left join。INNER JOIN 兩邊表同時有對應的數據,即任何一邊缺失數據就不顯示。LEFT JOIN 會讀取左邊數據表的全部數據,即便右邊表無對應數據。RIGHT JOIN 會讀取右邊數據表的全部數據,即便左邊表無對應數據。?注意on與where有什么區別,兩個表連接時用on,在使用left??jion時,on和where條件的區別如下:1、?on條件是在生成臨時表時使用的條件,它不管on中的條件是否為真,都會返回左邊表中的記錄。?2、where條件是在臨時表生成好后,再對臨時表進行過濾的條件。這時已經沒有left??join的含義(必須返回左邊表的記錄)了,條件不為真的就全部過濾掉。 select emp.last_name, emp.first_name, dept.dept_no from employees as emp left join dept_emp as dept on emp.emp_no = dept.emp_no;【6】查找所有員工入職時候的薪水情況
【7】查找薪水漲幅超過15次的員工號emp_no以及其對應的漲幅次數t
【8】找出所有員工當前具體的薪水salary情況
【9】獲取所有部門當前manager的當前薪水情況
【10】獲取所有非manager的員工emp_no
【11】獲取所有員工當前的manager
【12】獲取所有部門中當前員工薪水最高的相關信息
【13】從titles表獲取按照title進行分組
【14】從titles表獲取按照title進行分組,注意對于重復的emp_no進行忽略。
【15】查找employees表所有emp_no為奇數
【16】統計出當前各個title類型對應的員工當前薪水對應的平均工資
【17】獲取當前薪水第二多的員工的emp_no以及其對應的薪水salary
【18】查找當前薪水排名第二多的員工編號emp_no
【19】查找所有員工的last_name和first_name以及對應的dept_name
【20】查找員工編號emp_now為10001其自入職以來的薪水salary漲幅值growth
【21】查找所有員工自入職以來的薪水漲幅情況
【22】統計各個部門對應員工漲幅的次數總和
【23】對所有員工的當前薪水按照salary進行按照1-N的排名
【24】獲取所有非manager員工當前的薪水情況
【25】獲取員工其當前的薪水比其manager當前薪水還高的相關信息
【26】匯總各個部門當前員工的title類型的分配數目
【27】給出每個員工每年薪水漲幅超過5000的員工編號emp_no
【28】查找描述信息中包括robot的電影對應的分類名稱以及電影數目
【29】使用join查詢方式找出沒有分類的電影id以及名稱
【30】使用子查詢的方式找出屬于Action分類的所有電影對應的title,description
【31】獲取select
【32】將employees表的所有員工的last_name和first_name拼接起來作為Name,中間以一個空格區分
【33】創建一個actor表,包含如下列信息
【34】批量插入數據
【35】批量插入數據,如果數據已經存在,請忽略,不使用replace操作
【36】創建一個actor_name表,將actor表中的所有first_name以及last_name導入改表
【37】對first_name創建唯一索引uniq_idx_firstname,對last_name創建普通索引idx_lastname
【38】針對actor表創建視圖actor_name_view
【39】針對上面的salaries表emp_no字段創建索引idx_emp_no,查詢emp_no為10005,
【40】在last_update后面新增加一列名字為create_date
【41】構造一個觸發器audit_log,在向employees表中插入一條數據的時候,觸發插入相關的數據到audit中
【42】刪除emp_no重復的記錄,只保留最小的id對應的記錄。
【43】將所有to_date為9999-01-01的全部更新為NULL,且
【44】將id=5以及emp_no=10001的行數據替換成id=5以及emp_no=10005,其他數據保持不變,使用replace實現。
【45】將titles_test表名修改為titles_2017
【46】在audit表上創建外鍵約束,其emp_no對應employees_test表的主鍵id
【47】如何獲取emp_v和employees有相同的數據no
【48】將所有獲取獎金的員工當前的薪水增加10%
【49】針對庫中的所有表生成select
【50】將employees表中的所有員工的last_name和first_name通過(')連接起來。
【51】查找字符串'10,A,B'
【52】獲取Employees中的first_name,查詢按照first_name最后兩個字母,按照升序進行排列
【53】按照dept_no進行匯總,屬于同一個部門的emp_no按照逗號進行連接,結果給出dept_no以及連接出的結果employees
【54】查找排除當前最大、最小salary之后的員工的平均工資avg_salary
【55】分頁查詢employees表,每5行一頁,返回第2頁的數據
【56】獲取所有員工的emp_no
【57】使用含有關鍵字exists查找未分配具體部門的員工的所有信息。
【58】獲取employees中的行數據,且這些行也存在于emp_v中
【59】獲取有獎金的員工相關信息。
【60】統計salary的累計和running_total
【61】對于employees表中,給出奇數行的first_name???轉載于:https://www.cnblogs.com/zhangwanying/p/9901456.html
總結
以上是生活随笔為你收集整理的【sql】牛客网练习题 (共 61 题)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 关于pipeline
- 下一篇: JavaScript函数练习