25.獲取員工其當前的薪水比其manager當前薪水還高的相關信息
題目描述:
獲取員工其當前的薪水比其manager當前薪水還高的相關信息旷坦,當前表示to_date='9999-01-01',
結果第一列給出員工的emp_no掏熬,
第二列給出其manager的manager_no,
第三列給出該員工當前的薪水emp_salary,
第四列給該員工對應的manager當前的薪水manager_salary
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 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
))
考慮過程:
①提取de.emp_no,de.dept_no,s.salary獲得一個員工薪水表
②提取dm.emp_no,dm.dept_no,s.salary獲得一個經理薪水表
③合并INNER JOIN獲得一個目標薪水表
④選出員工薪水大于經理的列
SELECT emp_s.emp_no,mar_s.emp_no AS manager_no,emp_s.salary AS emp_salary,mar_s.salary AS manager_salary
FROM (SELECT de.emp_no,de.dept_no,s.salary
FROM dept_emp de,salaries s
WHERE de.emp_no=s.emp_no
AND de.to_date='9999-01-01'
AND s.to_date='9999-01-01') AS emp_s
INNER JOIN (SELECT dm.emp_no,dm.dept_no,s.salary
FROM dept_manager dm,salaries s
WHERE dm.emp_no=s.emp_no
AND dm.to_date='9999-01-01'
AND s.to_date='9999-01-01') AS mar_s
ON emp_s.dept_no=mar_s.dept_no
WHERE emp_s.salary > mar_s.salary
26.匯總各個部門的當前員工title類型的分配數目
題目描述:
匯總各個部門當前員工的title類型的分配數目秒梅,結果給出部門編號dept_no旗芬、dept_name、其當前員工所有的title以及該類型title對應的數目count
CREATE TABLE departments
(
dept_no
char(4) NOT NULL,
dept_name
varchar(40) NOT NULL,
PRIMARY KEY (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 IF NOT EXISTS titles
(
emp_no
int(11) NOT NULL,
title
varchar(50) NOT NULL,
from_date
date NOT NULL,
to_date
date DEFAULT NULL);
解題思路:
①這是一個三表連接加上分組的問題
②先將titles和dept_emp連接捆蜀,然后將departments 填進去
③講dept_no和title分組統(tǒng)計
SELECT dept.dept_no, dp.dept_name, t.title, COUNT(t.title) AS count
FROM titles AS t INNER JOIN dept_emp AS dept
ON t.emp_no = dept.emp_no AND dept.to_date = '9999-01-01' AND t.to_date = '9999-01-01'
INNER JOIN departments AS dp
ON dept.dept_no = dp.dept_no
GROUP BY dept.dept_no, t.title
27.給出每個員工每年薪水漲幅超過5000的員工
題目描述:
給出每個員工每年薪水漲幅超過5000的員工編號emp_no疮丛、薪水變更開始日期from_date以及薪水漲幅值salary_growth,并按照salary_growth逆序排列辆它。
提示:在sqlite中獲取datetime時間對應的年份函數為strftime('%Y', to_date)
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
));
參考高贊答案誊薄,自己編寫的發(fā)生了未知錯誤。
28.查找描述信息中包括robot的電影對應的分類名稱以及電影數目锰茉,而且還需要該分類對應電影數量>=5部
題目描述:
題目描述與編寫信息在此
誰能讓我看看數據長啥樣啊~~
29.使用join查詢方式找出沒有分類的電影id以及名稱
題目描述與編寫信息在此
解題思路:兩種方法
①第一種呢蔫,連接表之后用NOT IN
②第二種,識別分類id是NULL
SELECT f.film_id,f.title
FROM film f LEFT JOIN film_category fc
ON f.film_id = fc.film_id
WHERE f.film_id NOT IN (SELECT film_id FROM film_category);
SELECT f.film_id, f.title FROM film f LEFT JOIN film_category fc
ON f.film_id = fc.film_id WHERE fc.category_id IS NULL
30.使用子查詢的方式找出屬于Action分類的所有電影對應的title,description
SELECT f.title, f.description
FROM film f INNER JOIN film_category fc
ON f.film_id = fc.film_id
WHERE fc.category_id IN (SELECT category_id FROM category
WHERE name="Action")
31.獲取select * from employees對應的執(zhí)行計劃
EXPLAIN SELECT * FROM employees
可以使用 "EXPLAIN" 關鍵字或 "EXPLAIN QUERY PLAN" 短語飒筑,用于描述表的細節(jié)片吊。
SQLite Explain
32.將employees表的所有員工的last_name和first_name拼接起來作為Name
題目描述:
將employees表的所有員工的last_name和first_name拼接起來作為Name,中間以一個空格區(qū)分
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 last_name||" "||first_name AS Name
FROM employees
注:有些版本還可以用CONCAT