3-2-4:查詢資料(select)

SQL語法

select [distinct] 欄位串列
from 資料表名稱
where 條件式
group by 群組欄位
having 群組條件
order by 排序欄位串列 [預設遞增ASC | 遞減DESC]

說明

  1. Select 後面列出要查詢的欄位名稱,如果所有欄位皆要列出,則可以使用符號 ‘*’ 表示。
  2. Distinct 表示選擇不重複的資料。
  3. From 後面接資料表名稱,可以包含多個資料表。
  4. 資料表名稱或欄位名稱可以另取別名,例如“資料表名稱 AS 別名” 或是 “資料表名稱 別名”。
  5. Where 條件式中使用「比較運算子」、「邏輯運算子」以及「模糊或範圍條件」來篩選資料。
  6. Group By 欄位1, 欄位2, …, 欄位n [Having 條件式]:Group By 依照欄位內容將資料群組,Having 則可篩選需要的群組。
  7. Order By 欄位1, 欄位2, …, 欄位n [Asc|Desc]:依照某一個欄位來進行排序。排序之順序預設為由小至大遞增Asc,若要由大至小遞減排序,則為Desc。
  8. 在SQL中提供聚合函數統計資料表中數值資料的最大值、最小值、平均值及合計值等。

常用的聚合函數

聚合函數說明
Count(*)計算個數函數
Count(欄位名稱)計算該欄位名稱之不具NULL值的個數
Avg(欄位名稱)計算平均函數
Sum(欄位名稱)計算總合函數
Max(欄位名稱)計算最大值函數
Min(欄位名稱)計算最小值函數

範例

某公司的員工資料表Emp如下:

eidenamesexaddress(地址)salary(薪水)dept(部門)
e001王大同中壢區健行路20000d01
e002李小明八德區介壽路25000d01
e003林上華平鎮區中豐路30000d02
e004丁中民中壢區中正路32000d03
e005陳文心平鎮區民族路22000d01
e006李小英中壢區中山路28000d03

題目1

查詢所有的員工資料。

【解】觀看教學影片

select * from Emp

題目2

查詢王大同的地址。

【解】觀看教學影片

select address from Emp where ename = '王大同'

題目3

查詢部門d01的員工姓名。

【解】觀看教學影片

select ename from Emp where dept = 'd01'

題目4

查詢住在’中壢區’的員工編號及姓名。

【解】觀看教學影片

select eid, ename from Emp where address like '中壢區%'

題目5

查詢薪資高於26000元的員工編號及姓名。

【解】觀看教學影片

select eid, ename from Emp where salary > 26000

題目6

查詢薪資高於26000元的男性員工編號及姓名。

【解】觀看教學影片

select eid, ename from Emp where salary > 26000 and sex = '男'

題目7

查詢薪資高於24000元的男性員工編號及姓名,並依照薪資由高至低排序。

【解】觀看教學影片

select eid, ename from Emp
where salary > 24000 and sex = '男'
order by salary desc

題目8

計算平均薪資。

【解】觀看教學影片

select avg(salary) from Emp

題目9

查詢最高薪資的員工姓名。

【解】觀看教學影片

select max(salary) from Emp

題目 10

請計算男性員工的平均薪資。

【解】觀看教學影片

# 方法 1
select avg(Salary) from Emp where sex = '男'
# 方法 2
select avg(Salary) from Emp group by sex having sex = '男'

題目 11

請計算男性與女性員工的平均薪資各是多少。

【解】觀看教學影片

select sex, avg(salary) from Emp group by sex

題目 12

請計算部門d01的員工人數。

【解】觀看教學影片

select count(*) from Emp where dept = 'd01'