Microsoft PowerPoint - 資料庫程式設計教材.pptx

Similar documents
Microsoft PowerPoint - asp15

Microsoft PowerPoint - ASP_NET_09

Microsoft PowerPoint - SQL 的查詢語言(ccchen).ppt

HTML網頁基礎語言

威 福 髮 藝 店 桃 園 市 蘆 竹 區 中 山 里 福 祿 一 街 48 號 地 下 一 樓 50,000 獨 資 李 依 純 105/04/06 府 經 登 字 第 號 宏 品 餐 飲 桃 園 市 桃 園 區 信 光 里 民

DB2 (join) SQL DB2 11 SQL DB2 SQL 9.1 DB2 DB2 ( ) SQL ( ) DB2 SQL DB2 DB2 SQL DB2 DB2 SQL DB2 ( DB2 ) DB2 DB2 DB2 SQL DB2 (1) SQL (2) S

四川省普通高等学校

Microsoft PowerPoint - 09.Android 程式設計-SQLite

Microsoft PowerPoint - 第八章 資料查詢-上課.ppt

ACI pdf

PowerPoint 簡報

<4D F736F F D20AC4FBDBDA4FBB67DA96CAABA2DA743A67EAFC5AAA95FA7B9BD5A5F2E646F63>

ex

840 提示 Excel - Excel -- Excel (=) Excel ch0.xlsx H5 =D5+E5+F5+G5 (=) = - Excel 00

上海浦~1

Microsoft PowerPoint - 第八章 資料查詢.ppt

untitled

第六章 SQL 進階查詢

0 0 = 1 0 = 0 1 = = 1 1 = 0 0 = 1

幻灯片 1

6-1 Table Column Data Type Row Record 1. DBMS 2. DBMS MySQL Microsoft Access SQL Server Oracle 3. ODBC SQL 1. Structured Query Language 2. IBM


Microsoft PowerPoint - 008_第八章 合併理論與實作(ccchen).ppt

Microsoft PowerPoint - sql2005_ch09.ppt

星星排列 _for loop Protected Sub Page_Load(ByVal sender As Object, ByVal e As Dim h As Integer = 7 'h 為變數 ' Dim i, j As Integer For i = 1 To h

爲 1

( )... 5 ( ) ( )

Microsoft PowerPoint - Fig03_Stack.ppt [相容模式]

untitled

Microsoft PowerPoint - sql2005_ch08.ppt

If Close[Length]!= 0 Then B Close[Length] 是 Length 日前的 Close 不是 0 的話則執行 B % Number 以 Divisor 來求取除法並傳回剩下的部份和 Divisor 具備相同的符 號 格式 :Number % Divisor Numb

Chapter 8

Microsoft PowerPoint - SAGE 2010

DIY香草植物乾燥

SQL: Interactive Queries (2)

fsfdsa

Microsoft Word - 2CA13內文.doc

Microsoft Word - DataStruct-981.doc

3 Driver do Microsoft Access (*.mdb) hisdata IFIX 1.4

PowerPoint Presentation

< A4BDA769A657B3E62E786C7378>

投影片 1

主程式 : public class Main3Activity extends AppCompatActivity { ListView listview; // 先整理資料來源,listitem.xml 需要傳入三種資料 : 圖片 狗狗名字 狗狗生日 // 狗狗圖片 int[] pic =new

Microsoft PowerPoint - db_ch12.ppt

(Microsoft Word \252\305\244j\246D\301`\301\277\270q8\251P.doc)

课程名称:数据库系统概论

Microsoft PowerPoint - ch11.ppt

epub 61-6

习题1


<4D F736F F D203938BEC7ACECBCD2C0C0B8D5A8F7AEE6A6A1C0C92DB57BA6A1B35DAD705FA6B3B8D1B5AA5F2E646F63>

Microsoft Word - _m30.doc

Microsoft PowerPoint - ch03_AEL0080.ppt

石家庄~3

(Microsoft Word -

Microsoft Word - administrative-law-08.doc

untitled

Microsoft PowerPoint - asp14

untitled

FZUBRIDGE

gongGaoMingCheng

Wuqi 資訊 萬事通 1 交通資訊 告訴您如何來梧棲遊玩 火車 沙鹿火車站下車 至中山路搭乘巨業客運往清水 梧 棲班車 沙鹿車站 / 沙鹿區中正街 94 號 服務電話 ( 服務時間 06:00~24:00) 網站

MySQL資料庫教學

PowerPoint Presentation


高中信息技术课程标准

Microsoft PowerPoint - Lotus Domino 8 and DB2.ppt [相容模式]

Microsoft Word 電腦軟體設計.doc

Microsoft Word - 透析8051之迴圈控制方法.doc

學 科 100% ( 為 單 複 選 題, 每 題 2.5 分, 共 100 分 ) 1. 請 參 閱 附 圖 作 答 : (A) 選 項 A (B) 選 項 B (C) 選 項 C (D) 選 項 D Ans:D 2. 下 列 對 於 資 料 庫 正 規 化 (Normalization) 的 敘

Transcription:

第三章 SQL 查詢指令 一 SELECT 指令設定查詢範圍 二 WHERE 子句的比較運算子 三 WHERE 子句的邏輯運算子 四 ORDER BY 排序子句 五 SQL 聚合函數

一 SELECT 指令設定查詢範圍 (1)SQL 查詢指令只有一個 SELECT 指令, 其基本語法如下所示 : SELECT 欄位 1, 欄位 2, 欄位 N FROM 資料表或檢視表 WHERE 查詢條件 上述 SELECT 子句的欄位 1, 欄位 2, 欄位 N 為記錄欄位, FROM 子句指定查詢目標是資料表或檢視表,WHERE 子句為查詢的篩選條件, 以口語來說就是 從資料表或檢視表取回符合 WHERE 子句條件的紀錄資料, 包含欄位 1, 欄位 2, 欄位 N

(2) 顯示資料表的部分欄位 在使用 SELECT 指令查詢資料表時, 我們可以一一列出需要顯示的欄位名稱清單, 而不用顯示所有欄位 SELECT [ 學號 ],[ 姓名 ], [ 生日 ]FROM[ 學生 ] 上述 SELECT 指令顯示學生資料表的學號 姓名和生日共 3 個以, 逗號分隔的欄位, 可以找到 8 筆記錄, 如右圖所示 :

(3) 顯示資料表的所有欄位 SELECT 指令如果需要顯示所有欄位, 可以直接使用 * 符號代表所有欄位, 而不用一一列出顯示的欄位名稱清單 SELECT * FROM 課程 上述 SELECT 指令的執行結果可以顯示課程資料表的所有紀錄和欄位, 共有 8 筆記錄, 如右圖所示 :

(4) 欄位別名 SELECT 指令預設是使用資料表定義的欄位名稱來顯示查詢結果, 基於需要, 我們可以使用 AS 關鍵字指定欄位別名, 其中 AS 關鍵字本身可有可無 SELECT 學號 AS 學生學號, 姓名 AS 學生姓名, 生日 AS 學生生日 FROM 學生 上述 SELECT 指令可以顯示學生資料表的學號 姓名和生日欄位, 可以看到欄位標題顯示的是別名, 而不是原來的欄位名稱, 如右圖所示 :

(5) 欄位沒有重複值 在資料表紀錄的欄位如果有重複值, 即不同記錄的欄位擁有相同值 SELECT 指令可以加上 DISTINCT 指令, 只顯示其中一筆記錄資料 SELECT DISTINCT 學分 FROM 課程 上述 SQL 指令的欄位學分如果有重複值, 只會顯示其中一筆, 如右圖所示 :

二 WHERE 子句的比較運算子 運算子 說明 = 等於 <>,!= 不等於 (EX:WHERE 學分!= 3 ) >, < 大於, 小於 >=, <= 大於等於, 小於等於 (EX:WHERE 學分 >= 3 )!>,!< 不大於, 不小於

(1) 條件值為字串 WHERE 子句的條件運算式可以使用比較運算子來執行字串比較, 其中條件值的字串需要使用單引號 ( ) 括起 SELECT * FROM 學生 WHERE 學號 = S002 (2) 條件值為日期 / 時間 WHERE 子句的條件運算式如果是日期 / 時間值的比較, 如同字串, 也需要使用單引號 ( ) 括起 SELECT * FROM 學生 WHERE 生日 = 1978-02-02

(3) 條件值為數值 WHERE 子句條件運算式的條件值如果是數值, 數值並不需要使用單引號 ( ) 括起 SELECT * FROM 課程 WHERE 學分 < 4

三 WHERE 子句的邏輯運算子 運算子 說明 LIKE 包含 (WHERE 姓名 LIKE 李 % ) BETWEEN/AND 在一個範圍內 (WHERE 學號 BETWEEN S001 AND S005 ) IN 屬於清單之一 NOT 非 EX WHERE 姓名 NOT LIKE 夏 % AND 且 ( 需兩個皆為真 ) AND 姓名 NOT LIKE 李 % OR 或 ( 需其中一個為真 ) ( ) LIKE 包含子字串運算子 運算子說明 % 代表 0 或更多任意字元長度的字串 (WHERE 姓名 LIKE 李 % ) _ 代表 1 個長度的字元或中文字 (WHERE 姓名 LIKE 陳 _ 廷 )

(1) 使用 % 查詢教授資料表中, 屬於資訊相關科系 CS 和 CIS 的教授記錄 SELECT * FROM 教授 WHERE 科系 LIKE %S% 上述 SELECT 指令的篩選條件是使用 LIKE 運算子, 可以查詢科系欄位擁有英文字母 S 科系的教授資料 換句話說, 只需要欄位值擁有子字串 S 就符合條件, 共找到 3 筆記錄, 如下圖所示 :

(2) 使用 _ 查詢學生資料表中, 姓名姓陳, 而且名字最後一個字是安的學生資料 SELECT * FROM 學生 WHERE 姓名 LIKE 陳 _ 安 上述 SELECT 指令的條件是使用 _ 符號代表任何一個中文字, 可以找到 2 筆記錄, 如下圖所示 :

(3)BETWEEN/AND 運算子可以定義欄位值需要符合的範圍, 範圍值可以是文字 數值或和日期 / 時間資料 查詢學生資料表生日欄位的範圍是 1977 年 1 月 1 日到 1977 年 12 月 31 日出生的學生記錄 SELECT * FROM 學生 WHERE 生日 BETWEEN 1977-1-1 AND 1977-12-31 上述 SELECT 指令的條件是日期範圍, 共找到 4 筆記錄, 如下圖所示 :

(4)NOT 運算子可以搭配邏輯運算子, 取得與條件相反的查詢結果 學生已經修了 CS101 CS222 CS100 和 CS213 四門課, 準備進一步查詢課程資料表, 看看還有哪些課程可以修 SELECT * FROM 課程 WHERE 課程編號 NOT IN ( CS101, CS222, CS100, CS213 ) 上述 SELECT 指令是當課程編號不是 CS101 CS222 CS100 和 CS213 就符合條件, 共找到 5 筆記錄, 如下圖所示 :

(5)AND 運算子連接前後運算式必須同時為真時, 整個 WHERE 子句的條件才為真 查詢課程資料表的課程編號欄位包含 '1' 子字串, 而且課程名稱欄位有 ' 程式 ' 子字串 SELECT * FROM 課程 WHERE 課程編號 LIKE %1% AND 課程名稱 LIKE % 程式 % 上述 SELECT 指令的條件可以找到 1 筆符合條件的記錄, 如下圖所示 :

(6)OR 運算子連接的前後條件, 只需任何一個條件為真, 即為真 查詢課程資料表的課程編號欄位包含 '1' 子字串, 或課程名稱欄位有 ' 程式 ' 子字串 SELECT * FROM 課程 WHERE 課程編號 LIKE %1% OR 課程名稱 LIKE % 程式 % 上述 SELECT 指令的條件可以找到 6 筆符合條件的記錄, 如下圖所示 :

(1) 由小到大排序 四 ORDER BY 排序子句 查詢課程資料表學分大於等於 3 的記錄, 而且使用學分欄位由小到大進行排序 SELECT * FROM 課程 WHERE 學分 >= 3 ORDER BY 學分 ASC 上述 SELECT 指令的條件可以找到 7 筆符合條件的記錄, 而且是使用學分欄位由小到大進行排序, 如下圖所示 :

(2) 由大到小排序 查詢課程資料表學分大於等於 3 的記錄, 而且使用學分欄位由大到小進行排序 SELECT * FROM 課程 WHERE 學分 >= 3 ORDER BY 學分 DESC 上述 SELECT 指令的條件可以找到 7 筆符合條件的記錄, 而且是使用學分欄位由大到小進行排序, 如下圖所示 :

五 SQL 聚合函數 運算子說明範例 COUNT( 運算式 ) 計算記錄筆數 1.Select count (*) as 學生數 from 學生 2.Select count (*) as 課程數 from 課程 where 學分 >=3 3. Count (DISTINCT 姓名 )as 人數 把重複的姓名筆數去除 AVG( 運算式 ) 計算欄位平均 1.Select avg( 學分 )as 平均學分 from 課程 2.Select count (*) as 課程數, avg( 學分 )as 平均學分 from 課程 where 課程名稱 LIKE % 設計 % MAX( 運算式 ) 計算欄位最大值 Select MAX (year (Getdate()) year( 生日 )) As 最大年齡 from 學生 MIN( 運算式 ) 計算欄位最小值 Select MIN(year (Getdate()) year( 生日 )) As 最小年齡 from 學生 SUM( 運算式 ) 計算欄位總合

(1)COUNT() 函數 1. 查詢學生資料表的學生總數, 如下所示 : SELECT COUNT (*) as 學生數 FROM 學生 2. 在學生資料表查詢有生日資料的學生總數, 即生日欄位不是空值 NULL 的記錄數, 如下所示 : SELECT COUNT (*) as 學生數 FROM 學生 上述 SELECT 指令因為學生資料表的生日欄位有空值, 所以查詢結果的記錄數是 7, 如下圖所示 :

(2)AVG() 函數 1. 在課程資料表查詢課程學生的平均值, 如下所示 : SELECT AVG ( 學分 )as 平均學分 FROM 課程 2. 在課程資料表查詢課程編號包含 '1' 子字串的課程總數, 和學分的平均值, 如下所示 : SELECT COUNT (*) as 課程總數, AVG( 學分 )as 學分平均值 FROM 課程 WHERE 課程編號 LIKE %1%

(3)MAX() 函數 1. 在學生資料表查詢年齡最大的學生是幾歲,YEAR() 函數可以取得年份 ; GETDATE() 函數取得今天的日期, 如下所示 : SELECT MAX(YEAR(GETDATE()) YEAR( 生日 ) ) AS 最大年齡 FROM 學生 2. 在課程資料表查詢課程編號包含 '1' 子字串的最大學分數, 如下所示 : SELECT MAX( 學分 ) AS 最大學分數 FROM 課程 WHERE 課程編號 LIKE %1%

(4)MIN() 函數 1. 在學生資料表查詢年齡最小的學生是幾歲,YEAR() 函數可以取得年份 ; GETDATE() 函數取得今天的日期, 如下所示 : SELECT MN(YEAR(GETDATE()) YEAR( 生日 ) ) AS 最小年齡 FROM 學生 2. 在課程資料表查詢課程編號包含 '1' 子字串的最少學分數, 如下所示 : SELECT MIN( 學分 ) AS 最少學分數 FROM 課程 WHERE 課程編號 LIKE %1%

(5)SUM() 函數 1. 在學生資料表計算學生年齡的平均,IS NOT NULL 條件是指非空值的記錄 ( 因為有一筆記錄的生日欄位是空值 ), 如下所示 : SELECT SUM(YEAR(GETDATE()) YEAR( 生日 )) / COUNT (*) AS 平均年齡 FROM 學生 WHERE 生日 IS NOT NULL 2. 在課程資料表計算課程編號包含 '1' 子字串的學分數總和, 如下所示 : SELECT SUM( 學分 ) AS 學分總和 FROM 課程 WHERE 課程編號 LIKE %1%