(如有錯誤,歡迎指正!)
1.select 語句查詢
(1)查詢employees表員工部門號和性別,要求消除重復行。
mysql> select distinct 員工部門號,性別 from employees;
+-----------------+--------+
| 員工部門號 | 性別 |
+-----------------+--------+
| 2 | 1 |
| 1 | 1 |
| 1 | 0 |
| 5 | 1 |
| 3 | 0 |
| 3 | 1 |
| 4 | 1 |
| 4 | 0 |
+-----------------+--------+
8 rows in set (0.03 sec)
(2)計算salary表每個雇員的實際收入(實際收入=收入-支出)。
mysql> select (收入-支出) as 實際收入 from salary;
+--------------------+
| 實際收入 |
+--------------------+
| 1977.7100524902344 |
| 1494.5899963378906 |
| 2662 |
| 2167.679931640625 |
| 2384.2298889160156 |
| 1880 |
| 2978.459991455078 |
| 1907.4300079345703 |
| 2119 |
| 2770.499954223633 |
| 2332.8999786376953 |
| 1958.14990234375 |
+--------------------+
12 rows in set (0.00 sec)
(3)查詢employees表中員工的姓名和性別,要求sex值為1時,顯示為‘男’,為0時顯示為‘女’。
mysql> Select 姓名,
case
when 性別=1 then "男"
when 性別=0 then "女"
end as 性別
from employees;
+-----------+--------+
| 姓名 | 性別 |
+-----------+--------+
| 王林 | 男 |
| 伍容華 | 男 |
| 王向容 | 男 |
| 李麗 | 女 |
| 劉明 | 男 |
| 朱俊 | 男 |
| 鍾敏 | 女 |
| 張石兵 | 男 |
| 林濤 | 男 |
| 李玉珉 | 男 |
| 葉凡 | 男 |
| 陳林琳 | 女 |
+-----------+--------+
12 rows in set (0.00 sec)
(4)查詢employees表每個雇員的地址和電話,列標題要求顯示為 address 和 telephone。
mysql> select 地址 as adress, 電話號碼 as telephone from employees;
+--------------------+-----------+
| adress | telephone |
+--------------------+-----------+
| 中山路32-1-508 | 83355668 |
| 北京東路100-2 | 83321321 |
| 四牌樓10-0-108 | 83792361 |
| 中山東路102-2 | 83413301 |
| 虎距路100-2 | 83606608 |
| 牌樓巷5-3-106 | 84708817 |
| 中山路10-3-105 | 83346722 |
| 解放路34-1-203 | 84563418 |
| 中山北路24-35 | 83467336 |
| 熱和路209-3 | 58765991 |
| 北京西路3-7-52 | 83308901 |
| 漢中路120-4-12 | 84468158 |
+--------------------+-----------+
12 rows in set (0.00 sec)
(5)計算salary表中員工月收入的平均數。
mysql> select avg(收入)as 月平均收入 from salary;
+-------------------+
| 月平均收入 |
+-------------------+
| 2375.566640218099 |
+-------------------+
1 row in set (0.00 sec)
(6)計算所有員工的總支出。
mysql> select sum(支出) as 總支出 from salary;
+--------------------+
| 總支出 |
+--------------------+
| 1874.1499786376953 |
+--------------------+
1 row in set (0.00 sec)
(7)顯示女雇主的地址和電話。
mysql> select 姓名, 地址,電話號碼 from employees where 性別=0;
+-----------+-------------------+--------------+
| 姓名 | 地址 | 電話號碼 |
+-----------+-------------------+--------------+
| 李麗 | 中山東路102-2 | 83413301 |
| 鍾敏 | 中山路10-3-105 | 83346722 |
| 陳林琳 | 漢中路120-4-12 | 84468158 |
+-----------+-------------------+--------------+
3 rows in set (0.00 sec)
(8)計算員工總數。
mysql> select count(*) from employees;
+----------+
| count(*) |
+----------+
| 12 |
+----------+
1 row in set (0.00 sec)
(9)顯示員工的最高收入和最低收入。
mysql> Select max(收入),min(收入) from salary;
+------------------+--------------------+
| max(收入) | min(收入) |
+------------------+--------------------+
| 3259.97998046875 | 1582.6199951171875 |
+------------------+--------------------+
1 row in set (0.00 sec)
2.條件查詢
(1)顯示月收入高於2000元員工的員工號。
mysql> select 員工編號 from salary where 收入>2000;
+--------------+
| 員工編號 |
+--------------+
| 000001 |
| 020010 |
| 020018 |
| 102201 |
| 108991 |
| 210678 |
| 302566 |
| 308759 |
| 504209 |
+--------------+
9 rows in set (0.00 sec)
(2)查詢1970年以后的員工的姓名和地址。
mysql> select 姓名,地址 from employees where 出生日期>"1970-1-1";
+-----------+--------------------+
| 姓名 | 地址 |
+-----------+--------------------+
| 伍容華 | 北京東路100-2 |
| 王向容 | 四牌樓10-0-108 |
| 劉明 | 虎距路100-2 |
| 鍾敏 | 中山路10-3-105 |
| 張石兵 | 解放路34-1-203 |
| 林濤 | 中山北路24-35 |
| 葉凡 | 北京西路3-7-52 |
+-----------+--------------------+
7 rows in set (0.00 sec)
(3)顯示工作年限三年以上(包含3年)、學歷在本科以上(包含本科)的男性員工的信息。
mysql> select * from employees where 工作年限>=3 and (學歷="本科" or 學歷="碩士") and 性別 = 1;
+--------------+-----------+--------+--------------+--------+--------------+-------------------+--------------+-----------------+
| 員工編號 | 姓名 | 學歷 | 出生日期 | 性別 | 工作年限 | 地址 | 電話號碼 | 員工部門號 |
+--------------+-----------+--------+--------------+--------+--------------+-------------------+--------------+-----------------+
| 010008 | 伍容華 | 本科 | 1976-03-28 | 1 | 3 | 北京東路100-2 | 83321321 | 1 |
| 102201 | 劉明 | 本科 | 1972-10-18 | 1 | 3 | 虎距路100-2 | 83606608 | 5 |
| 302566 | 李玉珉 | 本科 | 1968-09-20 | 1 | 3 | 熱和路209-3 | 58765991 | 4 |
+--------------+-----------+--------+--------------+--------+--------------+-------------------+--------------+-----------------+
3 rows in set (0.00 sec)
(4)查找員工中倒數第二個數字為0的員工的姓名、地址和學歷。
mysql> select 姓名,地址,學歷 from employees where 員工編號 like "%0_";
+-----------+-------------------+--------+
| 姓名 | 地址 | 學歷 |
+-----------+-------------------+--------+
| 王林 | 中山路32-1-508 | 大專 |
| 伍容華 | 北京東路100-2 | 本科 |
| 劉明 | 虎距路100-2 | 本科 |
| 朱俊 | 牌樓巷5-3-106 | 碩士 |
| 張石兵 | 解放路34-1-203 | 本科 |
| 陳林琳 | 漢中路120-4-12 | 大專 |
+-----------+-------------------+--------+
6 rows in set (0.00 sec)
(5)查詢月收入在2000-3000元的員工。
mysql> select * from salary where 收入>=2000 and 收入<=3000;
+--------------+---------+--------+
| 員工編號 | 收入 | 支出 |
+--------------+---------+--------+
| 000001 | 2100.8 | 123.09 |
| 020010 | 2860 | 198 |
| 020018 | 2347.68 | 180 |
| 102201 | 2569.88 | 185.65 |
| 210678 | 2240 | 121 |
| 302566 | 2980.7 | 210.2 |
| 308759 | 2531.98 | 199.08 |
| 504209 | 2066.15 | 108 |
+--------------+---------+--------+
8 rows in set (0.00 sec)
3.多表查詢
(1)查詢王林的基本情況和所工作的部門名稱。
mysql> select * from employees e,departments d where e.員工部門號=d.部門編號 and 姓名="王林";
+--------------+--------+--------+--------------+--------+--------------+-------------------+--------------+-----------------+--------------+-----------------+--------+
| 員工編號 | 姓名 | 學歷 | 出生日期 | 性別 | 工作年限 | 地址 | 電話號碼 | 員工部門號 | 部門編號 | 部門名稱 | 備注 |
+--------------+--------+--------+--------------+--------+--------------+-------------------+--------------+-----------------+--------------+-----------------+--------+
| 000001 | 王林 | 大專 | 1966-01-23 | 1 | 8 | 中山路32-1-508 | 83355668 | 2 | 2 | 人力資源部 | NULL |
+--------------+--------+--------+--------------+--------+--------------+-------------------+--------------+-----------------+--------------+-----------------+--------+
1 row in set (0.00 sec)
(2)查詢財務部、研發部、市場部的員工信息。(預習和學習子查詢相關知識)
mysql> select * from employees e,departments d where e.員工部門號=d.部門編號 and (部門名稱="財務部" or 部門名稱="市場部" or 部門名稱="研發部");
+--------------+-----------+--------+--------------+--------+--------------+--------------------+--------------+-----------------+--------------+
| 員工編號 | 姓名 | 學歷 | 出生日期 | 性別 | 工作年限 | 地址 | 電話號碼 | 員工部門號 | 部門名稱 |
+--------------+-----------+--------+--------------+--------+--------------+--------------------+--------------+-----------------+--------------+
| 010008 | 伍容華 | 本科 | 1976-03-28 | 1 | 3 | 北京東路100-2 | 83321321 | 1 | 財務部 |
| 020010 | 王向容 | 碩士 | 1982-12-09 | 1 | 2 | 四牌樓10-0-108 | 83792361 | 1 | 財務部 |
| 020018 | 李麗 | 大專 | 1960-07-30 | 0 | 6 | 中山東路102-2 | 83413301 | 1 | 財務部 |
| 302566 | 李玉珉 | 本科 | 1968-09-20 | 1 | 3 | 熱和路209-3 | 58765991 | 4 | 研發部 |
| 308759 | 葉凡 | 本科 | 1978-11-18 | 1 | 2 | 北京西路3-7-52 | 83308901 | 4 | 研發部 |
| 504209 | 陳林琳 | 大專 | 1969-09-03 | 0 | 5 | 漢中路120-4-12 | 84468158 | 4 | 研發部 |
| 102201 | 劉明 | 本科 | 1972-10-18 | 1 | 3 | 虎距路100-2 | 83606608 | 5 | 市場部 |
| 102208 | 朱俊 | 碩士 | 1965-09-28 | 1 | 2 | 牌樓巷5-3-106 | 84708817 | 5 | 市場部 |
| 111006 | 張石兵 | 本科 | 1974-10-01 | 1 | 1 | 解放路34-1-203 | 84563418 | 5 | 市場部 |
+--------------+-----------+--------+--------------+--------+--------------+--------------------+--------------+-----------------+--------------+
9 rows in set (0.00 sec)
(3)查詢每個雇員的基本情況和薪水情況。
(找到兩種方法)
mysql> Select * from employees join salary using(員工編號);
mysql> Select * from employees e,salary s where e.員工編號=s.員工編號 ;
+--------------+-----------+--------+--------------+--------+--------------+--------------------+--------------+-----------------+---------+--------+
| 員工編號 | 姓名 | 學歷 | 出生日期 | 性別 | 工作年限 | 地址 | 電話號碼 | 員工部門號 | 收入 | 支出 |
+--------------+-----------+--------+--------------+--------+--------------+--------------------+--------------+-----------------+---------+--------+
| 000001 | 王林 | 大專 | 1966-01-23 | 1 | 8 | 中山路32-1-508 | 83355668 | 2 | 2100.8 | 123.09 |
| 010008 | 伍容華 | 本科 | 1976-03-28 | 1 | 3 | 北京東路100-2 | 83321321 | 1 | 1582.62 | 88.03 |
| 020010 | 王向容 | 碩士 | 1982-12-09 | 1 | 2 | 四牌樓10-0-108 | 83792361 | 1 | 2860 | 198 |
| 020018 | 李麗 | 大專 | 1960-07-30 | 0 | 6 | 中山東路102-2 | 83413301 | 1 | 2347.68 | 180 |
| 102201 | 劉明 | 本科 | 1972-10-18 | 1 | 3 | 虎距路100-2 | 83606608 | 5 | 2569.88 | 185.65 |
| 102208 | 朱俊 | 碩士 | 1965-09-28 | 1 | 2 | 牌樓巷5-3-106 | 84708817 | 5 | 1980 | 100 |
| 108991 | 鍾敏 | 碩士 | 1979-08-10 | 0 | 4 | 中山路10-3-105 | 83346722 | 3 | 3259.98 | 281.52 |
| 111006 | 張石兵 | 本科 | 1974-10-01 | 1 | 1 | 解放路34-1-203 | 84563418 | 5 | 1987.01 | 79.58 |
| 210678 | 林濤 | 大專 | 1977-04-02 | 1 | 2 | 中山北路24-35 | 83467336 | 3 | 2240 | 121 |
| 302566 | 李玉珉 | 本科 | 1968-09-20 | 1 | 3 | 熱和路209-3 | 58765991 | 4 | 2980.7 | 210.2 |
| 308759 | 葉凡 | 本科 | 1978-11-18 | 1 | 2 | 北京西路3-7-52 | 83308901 | 4 | 2531.98 | 199.08 |
| 504209 | 陳林琳 | 大專 | 1969-09-03 | 0 | 5 | 漢中路120-4-12 | 84468158 | 4 | 2066.15 | 108 |
+--------------+-----------+--------+--------------+--------+--------------+--------------------+--------------+-----------------+---------+--------+
12 rows in set (0.01 sec)
(4)查詢研發部在1970年以前的員工姓名和薪水情況。
mysql> select e.姓名,s.收入,s.支出
from employees e,salary s,departments d
where e.員工部門號=d.部門編號
and e.員工編號=s.員工編號
and d.部門名稱="研發部"
and e.出生日期<"1970" ;
+-----------+---------+--------+
| 姓名 | 收入 | 支出 |
+-----------+---------+--------+
| 李玉珉 | 2980.7 | 210.2 |
| 陳林琳 | 2066.15 | 108 |
+-----------+---------+--------+
2 rows in set, 1 warning (0.00 sec)
(5)查詢employees表中員工的姓名、住址和收入水平,要求2000元以下顯示為‘低收入’,2000-3000顯示為‘中等收入’,3000元以上顯示為‘高收入’。
mysql> select 姓名,地址,
case
when 收入<2000 then "低收入"
when 收入>3000 then "高收入"
when 收入>2000 and 收入<3000 then "中等收入"
end as "收入等級"
from employees,salary
where employees.員工編號=salary.員工編號;
+-----------+--------------------+--------------+
| 姓名 | 地址 | 收入等級 |
+-----------+--------------------+--------------+
| 王林 | 中山路32-1-508 | 中等收入 |
| 伍容華 | 北京東路100-2 | 低收入 |
| 王向容 | 四牌樓10-0-108 | 中等收入 |
| 李麗 | 中山東路102-2 | 中等收入 |
| 劉明 | 虎距路100-2 | 中等收入 |
| 朱俊 | 牌樓巷5-3-106 | 低收入 |
| 鍾敏 | 中山路10-3-105 | 高收入 |
| 張石兵 | 解放路34-1-203 | 低收入 |
| 林濤 | 中山北路24-35 | 中等收入 |
| 李玉珉 | 熱和路209-3 | 中等收入 |
| 葉凡 | 北京西路3-7-52 | 中等收入 |
| 陳林琳 | 漢中路120-4-12 | 中等收入 |
+-----------+--------------------+--------------+
12 rows in set (0.00 sec)
4.分類匯總與排序
(1)按部門列出該部門的員工人數。
mysql> select d.部門名稱, count(e.姓名) as "員工總人數"
from employees e,departments d
where e.員工部門號=d.部門編號 group by d.部門名稱;
+-----------------+-----------------+
| 部門名稱 | 員工總人數 |
+-----------------+-----------------+
| 人力資源部 | 1 |
| 市場部 | 3 |
| 研發部 | 3 |
| 經理辦公室 | 2 |
| 財務部 | 3 |
+-----------------+-----------------+
5 rows in set (0.00 sec)
(2)分別統計男性員工和女性員工人數。
mysql> select count(*) as "人數",
case
when 性別=1 then "男"
when 性別=0 then "女"
end as 性別
from employees group by 性別;
+--------+--------+
| 人數 | 性別 |
+--------+--------+
| 3 | 女 |
| 9 | 男 |
+--------+--------+
2 rows in set, 1 warning (0.00 sec)
(3)查找雇員數超過2人的部門名稱和員工數量。
mysql> select d.部門名稱, count(e.姓名) as "員工總人數"
from employees e,departments d
where e.員工部門號=d.部門編號
group by d.部門名稱
having count(*)>2 ;
+--------------+-----------------+
| 部門名稱 | 員工總人數 |
+--------------+-----------------+
| 市場部 | 3 |
| 研發部 | 3 |
| 財務部 | 3 |
+--------------+-----------------+
3 rows in set (0.00 sec)
(4)按員工學歷分組統計各種學歷人數。
mysql> select 學歷,count(*) as 人數
from employees
group by 學歷;
+--------+--------+
| 學歷 | 人數 |
+--------+--------+
| 大專 | 4 |
| 本科 | 5 |
| 碩士 | 3 |
+--------+--------+
3 rows in set (0.00 sec)
(5)將員工信息按出生日期從大到小排序。
mysql> select * from employees order by 出生日期;
+--------------+-----------+--------+--------------+--------+--------------+--------------------+--------------+-----------------+
| 員工編號 | 姓名 | 學歷 | 出生日期 | 性別 | 工作年限 | 地址 | 電話號碼 | 員工部門號 |
+--------------+-----------+--------+--------------+--------+--------------+--------------------+--------------+-----------------+
| 020018 | 李麗 | 大專 | 1960-07-30 | 0 | 6 | 中山東路102-2 | 83413301 | 1 |
| 102208 | 朱俊 | 碩士 | 1965-09-28 | 1 | 2 | 牌樓巷5-3-106 | 84708817 | 5 |
| 000001 | 王林 | 大專 | 1966-01-23 | 1 | 8 | 中山路32-1-508 | 83355668 | 2 |
| 302566 | 李玉珉 | 本科 | 1968-09-20 | 1 | 3 | 熱和路209-3 | 58765991 | 4 |
| 504209 | 陳林琳 | 大專 | 1969-09-03 | 0 | 5 | 漢中路120-4-12 | 84468158 | 4 |
| 102201 | 劉明 | 本科 | 1972-10-18 | 1 | 3 | 虎距路100-2 | 83606608 | 5 |
| 111006 | 張石兵 | 本科 | 1974-10-01 | 1 | 1 | 解放路34-1-203 | 84563418 | 5 |
| 010008 | 伍容華 | 本科 | 1976-03-28 | 1 | 3 | 北京東路100-2 | 83321321 | 1 |
| 210678 | 林濤 | 大專 | 1977-04-02 | 1 | 2 | 中山北路24-35 | 83467336 | 3 |
| 308759 | 葉凡 | 本科 | 1978-11-18 | 1 | 2 | 北京西路3-7-52 | 83308901 | 4 |
| 108991 | 鍾敏 | 碩士 | 1979-08-10 | 0 | 4 | 中山路10-3-105 | 83346722 | 3 |
| 020010 | 王向容 | 碩士 | 1982-12-09 | 1 | 2 | 四牌樓10-0-108 | 83792361 | 1 |
+--------------+-----------+--------+--------------+--------+--------------+--------------------+--------------+-----------------+
12 rows in set (0.01 sec)
