トピック
1. 営業部門で最年長の従業員の名前を検索します
。 2. 財務部門で最低給与の従業員の名前を検索します。
3. 各部門の合計収入が 9000 を超える部門の名前をリストします
。 4. 検索します。給与 7500 ~ 8500 元、最年長者の名前と所属
5. 営業部門の最も収入の低い従業員の入勤時間を調べます
6. 財務部門のそれ以上の収入の従業員の名前2,000 元以上
7. 各部門の平均収入と部門名をリストします
8. IT 技術部門のエントリ
9. 財務部門の総収入;
最初に部門番号で並べ替え、次にエントリに従って従業員情報テーブルを並べ替えます早い時間から遅い時間まで
11. まだ従業員がいない部門を調べる;
12. 部門の従業員をリストアップする 収入が 7000 を超える部門番号と部門名をリストする;
13. 各部門および部門名の従業員の合計収入をリストする;
14.各部門の最年長の従業員の名前、部門名を列挙します;
15. 李思の収入と部門名を尋ねます
16. 各部門の最も収入の高い従業員の名前、部門名、収入、および降順に列挙します収入 17.
従業員が 1 人以上いる部門の名前を列挙してください
19. Zhang San がいる部門の名前を見つけてください
練習問題
準備
mysql> create database work3;
mysql> use work3;
mysql> create table dept(
-> dept1 int,
-> dept_name varchar(11)
-> );
Query OK, 0 rows affected (0.01 sec)
mysql> create table emp(
-> sid int,
-> name varchar(11),
-> age int,
-> worktime_start date,
-> incoming int,
-> dept2 int
-> );
Query OK, 0 rows affected (0.01 sec)
mysql> insert into dept values (101,'财务'),(102,'销售'),(103,'IT技术'),(104,'行政');
Query OK, 4 rows affected (0.00 sec)
Records: 4 Duplicates: 0 Warnings: 0
mysql> insert into emp values (1789,'张三',35,'1980/1/1',4000,101),(1674,'李四',32,'1983/4/1',3500,101),(1776,'王五',24,'1990/7/1',2000,101),(1568,'赵六',57,'1970/10/11',7500,102),(1564,'荣七',64,'1963/10/11',8500,102),(1879,'牛八',55,'1971/10/20',7300,103);
Query OK, 6 rows affected, 6 warnings (0.00 sec)
Records: 6 Duplicates: 0 Warnings: 6
mysql> select * from dept;
+-------+-----------+
| dept1 | dept_name |
+-------+-----------+
| 101 | 财务 |
| 102 | 销售 |
| 103 | IT技术 |
| 104 | 行政 |
+-------+-----------+
4 rows in set (0.00 sec)
mysql> select * from emp;
+------+--------+------+----------------+----------+-------+
| sid | name | age | worktime_start | incoming | dept2 |
+------+--------+------+----------------+----------+-------+
| 1789 | 张三 | 35 | 1980-01-01 | 4000 | 101 |
| 1674 | 李四 | 32 | 1983-04-01 | 3500 | 101 |
| 1776 | 王五 | 24 | 1990-07-01 | 2000 | 101 |
| 1568 | 赵六 | 57 | 1970-10-11 | 7500 | 102 |
| 1564 | 荣七 | 64 | 1963-10-11 | 8500 | 102 |
| 1879 | 牛八 | 55 | 1971-10-20 | 7300 | 103 |
+------+--------+------+----------------+----------+-------+
6 rows in set (0.00 sec)
答え
1. 営業部門の最年長従業員の名前を見つけます。
mysql> select name as 姓名,age as 年龄,dept_name from dept inner join emp on dept.dept1=emp.dept2 where dept_name = '销售' order by age desc limit 1;
+--------+--------+-----------+
| 姓名 | 年龄 | dept_name |
+--------+--------+-----------+
| 荣七 | 64 | 销售 |
+--------+--------+-----------+
1 row in set (0.00 sec)
2. 財務部門で最低給与の従業員の名前を見つけます。
mysql> select name as 姓名,age as 年龄,dept_name from dept inner join emp on dept.dept1=emp.dept2 where dept_name = '财务' order by age limit 1;
+--------+--------+-----------+
| 姓名 | 年龄 | dept_name |
+--------+--------+-----------+
| 王五 | 24 | 财务 |
+--------+--------+-----------+
1 row in set (0.00 sec)
3.各部門の合計収入が9000を超える部門名を列挙してください
mysql> select dept_name as `部门`,sum(incoming) as `总收入` from dept inner join emp on dept.dept1=emp.dept2 group by dept_name having `总收入` > 9000;
+--------+-----------+
| 部门 | 总收入 |
+--------+-----------+
| 财务 | 9500 |
| 销售 | 16000 |
+--------+-----------+
2 rows in set (0.00 sec)
4. 7500~8500元の給与、最高齢者の名前と所属を尋ねる。
mysql> select name as `姓名`,age as `年龄`,dept_name as `部门`,incoming as `工资` from dept inner join emp on dept.dept1=emp.dept2 where incoming between 7500 and 8500;
+--------+--------+--------+--------+
| 姓名 | 年龄 | 部门 | 工资 |
+--------+--------+--------+--------+
| 荣七 | 64 | 销售 | 8500 |
| 赵六 | 57 | 销售 | 7500 |
+--------+--------+--------+--------+
2 rows in set (0.00 sec)
5. 営業部門で最も給与の低い従業員がいつ入社したかを調べる
mysql> select name as `姓名`,worktime_start as `入职时间`,dept_name as `部门`,incoming as `工资` from dept inner join emp on dept.dept1=emp.dept2 where dept_name = '销售' order by worktime_start limit 1;
+--------+--------------+--------+--------+
| 姓名 | 入职时间 | 部门 | 工资 |
+--------+--------------+--------+--------+
| 荣七 | 1963-10-11 | 销售 | 8500 |
+--------+--------------+--------+--------+
1 row in set (0.00 sec)
6. 収入が2,000元を超える財務部門の従業員の名前
mysql> select name as `姓名`,dept_name as `部门`,incoming as `工资` from dept inner join emp on dept.dept1=emp.dept2 where dept_name = '财务' and incoming > 2000;
+--------+--------+--------+
| 姓名 | 部门 | 工资 |
+--------+--------+--------+
| 张三 | 财务 | 4000 |
| 李四 | 财务 | 3500 |
+--------+--------+--------+
2 rows in set (0.00 sec)
7. 各部門の平均収入と部門名を列挙してください
mysql> select dept_name as `部门`,avg(incoming) as `平均工资` from dept inner join emp on dept.dept1=emp.dept2 group by dept_name;
+----------+--------------+
| 部门 | 平均工资 |
+----------+--------------+
| 财务 | 3166.6667 |
| 销售 | 8000.0000 |
| IT技术 | 7300.0000 |
+----------+--------------+
3 rows in set (0.00 sec)
8. ITテクノロジー部門に入社した社員の社員番号
mysql> select sid as `员工号`,name as `姓名`,dept_name as `部门` from dept inner join emp on dept.dept1=emp.dept2 where dept_name = 'IT技术';
+-----------+--------+----------+
| 员工号 | 姓名 | 部门 |
+-----------+--------+----------+
| 1879 | 牛八 | IT技术 |
+-----------+--------+----------+
1 row in set (0.00 sec)
9. 財務部門の収入の合計。
mysql> select dept_name as `部门`,sum(incoming) as `总工资` from dept inner join emp on dept.dept1=emp.dept2 group by dept_name having dept_name = '财务';
+--------+-----------+
| 部门 | 总工资 |
+--------+-----------+
| 财务 | 9500 |
+--------+-----------+
1 row in set (0.00 sec)
10. まず部門番号の大小でソートし、次に従業員情報テーブルを入力時刻に従って早い順から遅い順にソートします。
mysql> select name,dept_name,worktime_start from emp inner join dept on emp.dept2=dept.dept1 order by dept1 desc, worktime_start desc;
+--------+-----------+----------------+
| name | dept_name | worktime_start |
+--------+-----------+----------------+
| 牛八 | IT技术 | 1971-10-20 |
| 赵六 | 销售 | 1970-10-11 |
| 荣七 | 销售 | 1963-10-11 |
| 王五 | 财务 | 1990-07-01 |
| 李四 | 财务 | 1983-04-01 |
| 张三 | 财务 | 1980-01-01 |
+--------+-----------+----------------+
6 rows in set (0.00 sec)
11. まだ従業員がいない部門を調べます。
mysql> select name,dept_name,worktime_start from emp left join dept on emp.dept2=dept.dept1 where dept_name is null;
12. 収入が 7000 を超える部門の従業員の部門番号と部門名をリストします。
mysql> select name,incoming,dept_name,dept2 from emp inner join dept on emp.dept2=dept.dept1 where incoming > 7000;
+--------+----------+-----------+-------+
| name | incoming | dept_name | dept2 |
+--------+----------+-----------+-------+
| 荣七 | 8500 | 销售 | 102 |
| 赵六 | 7500 | 销售 | 102 |
| 牛八 | 7300 | IT技术 | 103 |
+--------+----------+-----------+-------+
3 rows in set (0.00 sec)
13. 従業員の総収入と各部門の部門名をリストします。
mysql> select dept_name as `部门`,sum(incoming) as `总工资` from dept inner join emp on dept.dept1=emp.dept2 group by dept_name;
+----------+-----------+
| 部门 | 总工资 |
+----------+-----------+
| 财务 | 9500 |
| 销售 | 16000 |
| IT技术 | 7300 |
+----------+-----------+
3 rows in set (0.00 sec)
14. 各部門の最年長従業員の名前と部門名をリストします。
mysql> select dept.dept_name as 部门,emp.name as 姓名 from dept inner join (select deptt2,max(age) as max_age from emp group by dept2) as temp on temp.dept2=dept.dept1 inner join emp on temp.dept2=emp.dept2 and temp.max_age=emp.age;
+----------+--------+
| 部门 | 姓名 |
+----------+--------+
| 财务 | 张三 |
| 销售 | 荣七 |
| IT技术 | 牛八 |
+----------+--------+
3 rows in set (0.00 sec)
15. リー・シーの収入と部門名を調べる
mysql> select emp.name,dept.dept_name,emp.incoming from emp inner join dept on emp.dept22=dept.dept1 where emp.name = '李四';
+--------+-----------+----------+
| name | dept_name | incoming |
+--------+-----------+----------+
| 李四 | 财务 | 3500 |
+--------+-----------+----------+
1 row in set (0.00 sec)
16. 各部門の最も収入の多い従業員の名前、部門名、収入を収入の多い順に列挙してください
mysql> select de.name,de.dept_name,temp.max_incoming from (select emp.name,dept.dept_name,emp.incoming from emp inner join dept on emp.dept2=dept.dept1) as de right join (seleect max(incoming) as max_incoming,dept2 from emp group by dept2) as temp on de.incoming==temp.max_incoming;
+--------+-----------+--------------+
| name | dept_name | max_incoming |
+--------+-----------+--------------+
| 张三 | 财务 | 4000 |
| 荣七 | 销售 | 8500 |
| 牛八 | IT技术 | 7300 |
+--------+-----------+--------------+
3 rows in set (0.00 sec)
17. 複数の従業員がいる部門の名前を列挙してください
mysql> select dept_name,count(dept_name) as `员工人数` from dept inner join emp on dept.dept1=emp.dept2 group by dept_name having `员工人数` > 1;
+-----------+--------------+
| dept_name | 员工人数 |
+-----------+--------------+
| 财务 | 3 |
| 销售 | 2 |
+-----------+--------------+
2 rows in set (0.00 sec)
19. チャン・サンの部署の名前を調べてください
mysql> select name,dept_name from emp inner join dept on dept.dept1=emp.dept2 where name='张三';
+--------+-----------+
| name | dept_name |
+--------+-----------+
| 张三 | 财务 |
+--------+-----------+
1 row in set (0.00 sec)