SQLトレーニング

 

タイトル説明

従業員テーブルの概要は次のとおりです。

テーブル作成ステートメントは次のとおりです。

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.従業員の最後から3番目の従業員のすべての情報を検索します

select * from employees where hire_date = (select distinct(hire_date) from employees order by hire_date desc limit 2,1);

 

タイトル説明

すべての従業員の給与表の給与の概要は次のとおりです。

各部門のリーダーシップのdept_managerテーブルの簡単な説明は次のとおりです。

テーブル作成ステートメントは次のとおりです。

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`));


CREATE TABLE `dept_manager` (
`dept_no` char(4) NOT NULL,
`emp_no` int(11) NOT NULL,
`to_date` date NOT NULL,
PRIMARY KEY (`emp_no`,`dept_no`));

 

3.現在の給与の詳細と部門番号dept_noを検索します

各部門リーダーの給与の詳細とそれに対応する部門番号dept_noを見つけてください。出力結果は、salaries.emp_noの昇順で並べ替えられます。また、出力結果のdept_no列が最後の列であることに注意してください。

select dept_manager.emp_no, salary, from_date, dept_manager.to_date, dept_no from salaries, dept_manager where salaries.emp_no =
dept_manager.emp_no order by dept_manager.emp_no asc;

 

タイトル説明

従業員テーブルがあり、従業員プロファイルは次のとおりです。

部門テーブルがあり、dept_empプロファイルは次のとおりです。

 

テーブル作成ステートメントは次のとおりです。

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`));


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`));

第四に、割り当てられたすべての部門の従業員情報を見つけます

割り当てられた部門のすべての従業員のlast_name、first_name、およびdept_noを見つけてください。割り当てられていない部門の従業員は表示されません。

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;

 

タイトル説明

給与表があり、給与は次のとおりです。

 

テーブル作成ステートメントは次のとおりです。

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`));

 

給与が15回以上変更された従業員番号emp_noと、それに対応する変更回数tを見つけてください。上記の例の出力は次のとおりです。

5.給与が15回以上変更された従業員番号emp_noと、対応する変更数tを見つけます。

select emp_no, count(*) as t from salaries group by emp_no having t > 15;

全従業員の具体的な給与状況を把握し、同じ給与を1回だけ表示し、逆の順序で表示してください。

select distinct(salary) from salaries order by salary desc;

部門リーダーではないすべての従業員を見つけてくださいemp_no

select emp_no from employees where emp_no not in (select emp_no from dept_manager); 

 

タイトル説明

次のような従業員テーブルdept_empプロファイルがあります。

最初の行は、従業員番号10001の部門がd001部門であることを示しています。

 

部門マネージャーテーブルdept_managerの簡単な説明は次のとおりです。

最初の行は、部門d001のマネージャーが10002という番号の従業員であることを示しています。

 

すべての従業員とそれに対応するマネージャーを取得します。従業員がマネージャーの場合、表示されません。上記の例は次のとおりです。

6、すべての従業員の現在のマネージャーを取得します

SELECT de.emp_no, dm.emp_no AS manager_no 
FROM dept_emp AS de INNER JOIN dept_manager AS dm
ON de.dept_no = dm.dept_no 
WHERE de.emp_no <> dm.emp_no;

 

タイトル説明

次のような従業員テーブルdept_empプロファイルがあります。

給与表の給与の概要は次のとおりです。

 

すべての部門の従業員の最高給与に関する関連情報を取得し、dept_no、emp_no、および対応する給与を部門番号の昇順で指定します。上記の例の出力は次のとおりです。

 

 

7つ目は、各部門の現在の従業員の最高給与に関する関連情報を取得する

select 
    t1.dept_no,t1.emp_no,t1.salary
from 
    (select d.emp_no,d.dept_no,s.salary from dept_emp d join salaries s on d.emp_no=s.emp_no WHERE d.to_date = '9999-01-01' AND s.to_date = '9999-01-01') t1
    join 
    (select d.dept_no,max(salary)as salary from dept_emp d join salaries s on d.emp_no=s.emp_no WHERE d.to_date = '9999-01-01' AND s.to_date = '9999-01-01' group by d.dept_no) t2
on 
    t1.dept_no=t2.dept_no and t1.salary= t2.salary
order by 
    t1.dept_no asc;

 

emp_noが奇数で、last_nameがMaryではないemployeesテーブル内のすべての従業員を見つけて、hire_dateに従って逆の順序で配置してください。

select * from employees where emp_no % 2 = 1 and last_name != 'Mary' order by hire_date desc;

 

タイトル説明

従業員の役職表の役職の概要は次のとおりです。

 

給与表の給与の概要は次のとおりです。

 

テーブル作成ステートメントは次のとおりです。

CREATE TABLE titles (
`emp_no` int(11) NOT NULL,
`title` varchar(50) NOT NULL,
`from_date` date NOT NULL,
`to_date` date DEFAULT NULL);

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`));

8.各タイトルタイプに対応する従業員の給与に対応する平均給与平均を計算します

各役職タイプに対応する従業員の給与に対応する平均給与平均を計算してください。結果には、タイトルと平均給与平均が与えられ、平均の昇順でソートされます。上記の例の出力は次のとおりです。

select title, avg(salary) as avg from salaries, titles where titles.emp_no = salaries.emp_no group by titles.title order by avg;

2番目に高い給与を持つ従業員のemp_noとそれに対応する給与を取得してください

select emp_no, salary from salaries order by salary desc limit 1,1;

 

タイトル説明

次のようなemployeesテーブルemployeesのプロファイルがあります。

給与表の給与の概要は次のとおりです。

 

2番目に高い給与の従業員番号emp_no、salary salary、last_name、first_nameを見つけてください。orderbyを使用して完了することはできません。上記の例の出力は次のとおりです。

9. 2番目に給与が高い従業員の情報を見つけます。これは、次の注文では完了できません。 

select s.emp_no, s.salary, e.last_name, e.first_name from salaries s join
employees e on s.emp_no = e.emp_no and s.emp_no = (select s1.emp_no from salaries s1
join salaries s2 on s1.salary <= s2.salary group by s1.emp_no having count(1) = 2);

 

タイトル説明

次のようなemployeesテーブルemployeesのプロファイルがあります。

 

部門テーブルの簡単な説明は次のとおりです。

 

次のように、部門の従業員関係テーブルdept_empの簡単な説明があります。

すべての従業員のlast_nameとfirst_name、および対応するdept_nameを見つけてください。これには、一時的に部門が割り当てられていない従業員も含まれます。上記の例の出力は次のとおりです。

10.一時的に部門が割り当てられていない従業員を含む、すべての従業員のlast_nameとfirst_name、および対応するdept_nameを見つけます

select last_name, first_name, t.dept_name from employees left join (select emp_no, dept_emp.dept_no as dept_no, dept_name from dept_emp, departments where dept_emp.dept_no = departments.dept_no) t on employees.emp_no = t.emp_no;

タイトル説明

次のようなemployeesテーブルemployeesのプロファイルがあります。

 

給与表の給与の概要は次のとおりです。

 

入社後のすべての従業員の昇給を見つけ、従業員番号emp_noとそれに対応する昇給の増加を指定し、増加に応じて昇順で、上記の例の出力は次のようになります。

(注:employeesテーブルとsalariesテーブルにレコードがあり、対応する従業員番号と昇給レコードがある従業員がいる可能性がありますが、辞任した従業員のsalariesテーブルに最新のto_date!= '9999-01-01'があります。 、そのようなデータは検索結果に表示されません、上記のemp_noは2です)

11.入社後の全従業員の昇給を調べる

SELECT sCurrent.emp_no, (sCurrent.salary-sStart.salary) AS growth
FROM (SELECT s.emp_no, s.salary FROM employees e INNER JOIN salaries s ON e.emp_no = s.emp_no WHERE s.to_date = '9999-01-01') AS sCurrent
INNER JOIN (SELECT s.emp_no, s.salary FROM employees e INNER JOIN salaries s ON e.emp_no = s.emp_no WHERE s.from_date = e.hire_date) AS sStart
ON sCurrent.emp_no = sStart.emp_no
ORDER BY growth

 

 

 

おすすめ

転載: blog.csdn.net/xiao__jia__jia/article/details/113789478