第11章 SQL基本查詢指令 11-1 SELECT查詢指令 11-2 WHERE子句的比較運算子 11-3 WHERE子句的邏輯運算子

Slides:



Advertisements
Similar presentations
第二章 简单的 SQL 语句. 本章要点  创建一个简单的表  SQL 语句介绍  最简单的查询语句 select  带有限制条件的查询  查询结果的排序显示.
Advertisements

Java 技术与应用 数据库应用 ( 第 14 章 ) 西安交大 卫颜俊 2008 年 12 月 电子信箱: QQ: 网站 : /java.
第一單元 建立java 程式.
Select 指令 基本結構 WHERE Like語法 Order by與group by Having 與 AS
課程名稱:資料庫系統 授課老師:李春雄 博士
目 录 第 1 章 数据库技术基础 第 2 章 SQL Server基础 第 3 章 数据库管理 第 4 章 查询和视图
SQL的简单查询.
第5章 关系数据库标准语言SQL 主讲:张丽芳.
第2章 SQL语言初步 2.1 SQL的基本概念 2.2 基本表、索引的创建、删除和修改操作 2.3 SQL的查询语句——SELECT
第2讲 Transact-SQL语言.
数据库技术 实践.
高等院校计算机教材系列 数据库原理与应用(第2版) 任课教师:刘雅莉
Chap 11 SQL基本查詢指令.
第8章 SELECT敘述的基本查詢 8-1 SELECT查詢指令 8-2 SELECT子句 8-3 FROM子句 8-4 WHERE子句
数据库原理及应用 《数据库原理及应用》课程组 荆楚理工学院.
第4章 关系数据库标准语言SQL 4.1 SQL语言概述 4.2 SQL数据查询功能 4.3 SQL数据操作功能 4.4 SQL数据定义功能.
第3章 SQL的基础知识 数据库管理及应用 3.1 SQL简介 3.2 SQL的数据模型 3.3 标识符 3.4 使用SQL语句管理数据库
文科计算机小公共课规划教材 Access 程序设计.
第一讲 数据查询优化.
《计算机应用基础》 第六章 Access数据库管理系统
Chap 13 視界與資料庫程式設計.
计算机应用基础 上海大学计算中心.
第3章 数据查询与SQL命令.
Views ,Stored Procedures, User-defined Function, Triggers
第5讲 分组查询 IBM Confidential.
SQL Structured Query Language 用以操縱資料庫的指令集 資料操作語言DML:操作資料錄
第六章 學習SQL語言.
9 SELECT敘述的進階查詢 9-1 SQL的多資料表查詢 9-2 合併查詢 9-3 集合運算查詢 9-4 子查詢
LINQ 建國科技大學 資管系 饒瑞佶.
2、掌握SQL中各种查询方法和数据更新方法 3、掌握SQL中视图的定义方法和用法 4、掌握SQL的授权机制
Chap 10 SQL定義、操作與控制指令.
第八章 利用SELECT查詢資料.
彰化縣政府補助辦理網頁設計資料庫應用班 ASP與資料庫介紹 建國技術學院資管系 饒瑞佶.
SQL語法 定義與操作指令.
第3章 MySQL教學範本 主從式資料庫系統 - CH3.
SQL Stored Procedure SQL 預存程序.
第九章 進階的查詢技巧.
SQL SERVER 一些经典语句 1.
PHP與MySQL 入門學習指南 凱文瑞克 著 第 27 章 資料庫查詢作業.
第 七 章 SQL的查詢語言 課程名稱:資料庫系統 各位同學大家好,我是李春雄老師,本學期所開設的課程名稱為「資料結構」,
SQL語法.
MySQL 結構化查詢語言 MySQL.
第十七章 資料庫SQL 17-1 SELECT 17-2 INSERT 17-3 UPDATE 17-4 DELETE.
App Inventor2呼叫PHP存取MySQL
資料庫程式設計 VB資料庫設計簡介 週次:6 建國科技大學 資管系 饒瑞佶.
第一單元 建立java 程式.
数据库技术.
第 19 章 XML記憶體執行模式.
第6章 資料庫設計與實體關聯模型 6-1 資料庫設計的基礎 6-2 實體關聯模型 6-3 建立實體關聯圖 6-4 實體關聯圖的常見錯誤
第18章 SQL結構化查詢語言 18-1 SQL語言的基礎 18-2 SQL的查詢指令 18-3 SQL子查詢與合併查詢.
資料庫系統 李翊豪 2017/12/21 Reference
輸入&輸出 函數 P20~P21.
3. SQL语言的应用 3.1 SQL历史和优点 3.2 数据查询 3.3 数据操纵.
第14章 SQL数据查询与操纵 内容提要 本章知识点
SQL查询语句 蔡海洋.
CH05. 選擇敘述.
挑戰C++程式語言 ──第8章 進一步談字元與字串
本讲内容 SQL 概述 SQL 的查询功能 SQL 的操作功能 SQL 的定义功能.
第 10 章 更多的查詢技巧.
8 SELECT敘述的基本查詢 8-1 SELECT查詢指令 8-2 SELECT子句 8-3 FROM子句 8-4 WHERE子句
SQL語法教學 2015/10/15 John.
第 4 章 認識 SQL 語言與資料型別.
11 檢視表的建立 11-1 檢視表的基礎 11-2 建立檢視表 11-3 修改與刪除檢視表 11-4 編輯檢視表的內容.
資料庫系統_答案 Database System Week3
Cloud Training Material- 事件 Sherman Wang
網路程式-ASP 授課:方順展.
String類別 在C語言中提供兩種支援字串的方式 可以使用傳統以null結尾的字元陣列 使用string類別
第4章 数据查询.
SQLite資料庫 靜宜大學資管系 楊子青.
Joining Multiple Tables
Presentation transcript:

第11章 SQL基本查詢指令 11-1 SELECT查詢指令 11-2 WHERE子句的比較運算子 11-3 WHERE子句的邏輯運算子 11-5 聚合函數 11-6 SQL語言的群組與排序

11-1 SELECT查詢指令 11-1-1 顯示資料表的部分欄位 11-1-2 顯示資料表的所有欄位 11-1-3 欄位沒有重複值 11-1-4 欄位別名

11-1 SELECT查詢指令-說明 SQL語言DML的資料查詢只有一個SELECT指令,其基本語法如下所示: SELECT column1, column2, …, columnN FROM table1, table2, …, tableN WHERE conditions GROUP BY column1, column2, …, columnN HAVING search_conditions ORDER BY column1, column2, …, columnN

11-1 SELECT查詢指令-圖例

11-1 SELECT查詢指令-資料表範例

11-1-1 顯示資料表的部分欄位-說明 SELECT指令查詢資料表時,可以指明查詢結果所需的欄位清單,換句話說,可以只查詢資料表中所需的部分欄位。

11-1-1 顯示資料表的部分欄位-範例 SQL查詢範例:Ch11-1-1.sql 查詢Students資料表的所有學生記錄,不過,只顯示學號、姓名和生日三個欄位,如下所示: SELECT sid, name, birthday FROM Students

11-1-2 顯示資料表的所有欄位-說明 如果查詢結果需要顯示資料表的所有欄位,SELECT指令可以直接使用’*’符號代表資料表的所有欄位,而不用一一列出欄位清單。

11-1-2 顯示資料表的所有欄位-範例 SQL查詢範例:Ch11-1-2.sql 查詢Courses資料表的所有課程記錄並且顯示所有欄位,如下所示: SELECT * FROM Courses

11-1-3 欄位沒有重複值-說明 如果資料表記錄的欄位值擁有重複值,在SELECT指令後可以使用DISTINCT指令分辨重複的欄位值,一旦欄位擁有重複值,就只會顯示其中一筆記錄。

11-1-3 欄位沒有重複值-範例 SQL查詢範例:Ch11-1-3.sql 查詢Courses資料表課程資料擁有不同的學分數種類,如下所示: SELECT DISTINCT credits FROM Courses

11-1-4 欄位別名-說明 SELECT指令預設使用關聯表綱要的欄位名稱來顯示查詢結果,基於顯示需要,我們可以使用AS關鍵字指定中文或英文的欄位別名。

11-1-4 欄位別名-範例1 SQL查詢範例:Ch11-1-4-1.sql 查詢Students資料表的sid和name和birthday欄位資料,為了方便閱讀,顯示欄位名稱是學號、姓名和生日的中文欄位別名,如下所示: SELECT sid AS 學號, name AS 姓名, birthday AS 生日 FROM Students

11-1-4 欄位別名-範例2 SQL查詢範例:Ch11-1-4-2.sql 查詢Students資料表的sid和name和tel欄位資料,為了方便閱讀,顯示的欄位名稱是S_No、StudentName和Telephone的英文欄位別名,如下所示: SELECT sid AS S_No, name AS StudentName, tel AS Telephone FROM Students

11-2 WHERE子句的比較運算子 11-2-1 條件值為字串 11-2-2 條件值為數值 11-2-3 條件值為日期/時間

11-2 WHERE子句的比較運算子 WHERE子句的條件是一個運算式,運算元是欄位值,可以是文字、數值或日期/時間,在運算式可以使用的比較運算子(Comparison Operators),如下表所示:

11-2-1 條件值為字串-說明 WHERE子句的條件運算式可以使用比較運算子執行字串比較,欄位條件的字串需要使用單引號括起。

11-2-1 條件值為字串-範例1 SQL查詢範例:Ch11-2-1-1.sql 在Students資料表查詢學號為’S002’學生的詳細資料,如下所示: SELECT * FROM Students WHERE sid='S002'

11-2-1 條件值為字串-範例2 SQL查詢範例:Ch11-2-1-2.sql 在Students資料表查詢學號不等於’S002’的所有學生記錄和欄位資料,如下所示: SELECT * FROM Students WHERE sid<>'S002'

11-2-2 條件值為數值-說明 WHERE子句的條件運算式如果使用數值進行比較,數值欄位不需使用單引號括起。

11-2-2 條件值為數值-範例1 SQL查詢範例:Ch11-2-2-1.sql 查詢Students資料表的成績GPA欄位等於3.0的學生記錄,如下所示: SELECT * FROM Students WHERE GPA=3.0

11-2-2 條件值為數值-範例2 SQL查詢範例:Ch11-2-2-2.sql 查詢Students資料表的成績GPA欄位小於等於3.0的學生記錄,如下所示: SELECT * FROM Students WHERE GPA<=3.0

11-2-3 條件值為日期/時間-說明 WHERE子句的條件運算式如果是日期/時間的比較,如同字串,也需要使用單引號括起。

11-2-3 條件值為日期/時間-範例1 SQL查詢範例:Ch11-2-3-1.sql 查詢Students資料表學生生日是1978-02-02的學生記錄,如下所示: SELECT * FROM Students WHERE birthday='1978-02-02'

11-2-3 條件值為日期/時間-範例2 SQL查詢範例:Ch11-2-3-2.sql 查詢Students資料表的學生生日小於等於1978-02-02的學生記錄,如下所示: SELECT * FROM Students WHERE birthday<='1978-02-02'

11-3 WHERE子句的邏輯運算子 11-3-1 LIKE包含子字串運算子 11-3-2 IS NULL運算子 11-3-3 EXISTS運算子 11-3-4 BETWEEN/AND範圍運算子 11-3-5 IN運算子 11-3-6 NOT運算子 11-3-7 AND運算子 11-3-8 OR運算子

11-3 WHERE子句的邏輯運算子 WHERE子句的條件運算式可以使用邏輯運算子(Logical Operators)執行多樣化比較,或連接多條件建立複雜的邏輯運算式,如下表所示:

11-3-1 LIKE包含子字串運算子-說明 WHERE子句的條件欄位可以使用LIKE運算子進行比較,LIKE運算子是子字串查詢,只需是子字串就符合條件,配合萬用字元可以進行範本字串的比對,如下表所示:

11-3-1 LIKE包含子字串運算子-範例1 SQL查詢範例:Ch11-3-1-1.sql 查詢Instructors講師資料表中屬於資訊相關科系CS和CIS的講師記錄,如下所示: SELECT * FROM Instructors WHERE department LIKE '%S%'

11-3-1 LIKE包含子字串運算子-範例2 SQL查詢範例:Ch11-3-1-2.sql 查詢Classes資料表上課教室是在二樓的學生上課資料,如下所示: SELECT eid, sid, c_no, c_time, room FROM Classes WHERE room LIKE '%2_-%'

11-3-2 IS NULL運算子-說明 如果查詢資料表中指定欄位值是否為空值NULL,可以使用IS NULL運算式和欄位值進行比較。

11-3-2 IS NULL運算子-範例 SQL查詢範例:Ch11-3-2.sql 查詢Students資料表沒有電話資料的學生記錄,也就是tel欄位為空值,如下所示: SELECT * FROM Students WHERE tel IS NULL

11-3-3 EXISTS運算子-說明 EXISTS運算子可以檢查括號中的SQL查詢指令所查詢的記錄是否存在,通常是使用在SQL的子查詢(Subquery),在第12章有進一步說明。

11-3-3 EXISTS運算子-範例 SQL查詢範例:Ch11-3-3.sql 在Classes資料表找出有學生選修的課程清單,如下所示: SELECT title FROM Courses WHERE EXISTS (SELECT c_no FROM Classes WHERE Courses.c_no = Classes.c_no )

11-3-4 BETWEEN/AND範圍運算子-說明

11-3-4 BETWEEN/AND範圍運算子-範例1 SQL查詢範例:Ch11-3-4-1.sql 查詢Students資料表生日birthday欄位的範圍是1978年1月1日到2000年12月31日出生的學生記錄,這是第十屆到第三十三屆的學生清單,如下所示: SELECT * FROM Students WHERE birthday BETWEEN ‘1978-1-1’ AND ‘2000-12-31’

11-3-4 BETWEEN/AND範圍運算子-範例2 SQL查詢範例:Ch11-3-4-2.sql 學生修課學分數還差2到3個學分,查詢Courses資料表看看還有哪些課可以選修,如下所示: SELECT * FROM Courses WHERE credits BETWEEN 2 AND 3

11-3-5 IN運算子-說明 IN運算子只需清單其中之一即可,需要列出一串文字或數值清單作為條件,如果欄位值是其中之一就符合條件。

11-3-5 IN運算子-範例1 SQL查詢範例:Ch11-3-5-1.sql 學生一共選了CS101、CS222、CS100和CS213四門課,查詢Courses資料表關於這些課程的詳細資料,如下所示: SELECT * FROM Courses WHERE c_no IN ('CS101', 'CS222', ‘CS100’, 'CS213')

11-3-5 IN運算子-範例2 SQL查詢範例:Ch11-3-5-2.sql 學生修課的學分數還差3到4個學分,請使用IN運算子查詢Courses資料表看看還有哪些課可以選修,如下所示: SELECT * FROM Courses WHERE credits IN (3, 4)

11-3-6 NOT運算子-說明 NOT運算子是用來搭配之前的邏輯運算子,可以取得與條件相反的查詢結果,如下表所示:

11-3-6 NOT運算子-範例 SQL查詢範例:Ch11-3-6.sql 學生已經選修CS101、CS222、CS100和CS213四門課,查詢Courses資料表看看還有什麼課程可以選修,如下所示: SELECT * FROM Courses WHERE c_no NOT IN ('CS101', 'CS222', ‘CS100’, 'CS213')

11-3-7 AND運算子-說明 AND運算子連接的前後運算式都必須同時為真,整個WHERE子句的條件才為真。

11-3-7 AND運算子-範例 SQL查詢範例:Ch11-3-7.sql 查詢Courses資料表的課程c_no欄位包含’1’子字串,而且課程名稱title欄位有’程式’子字串,如下所示: SELECT * FROM Courses WHERE c_no LIKE '%1%' AND title LIKE '%程式%'

11-3-8 OR運算子-說明 OR運算子在WHERE子句連接的前後條件只需任何一個條件為真,即為真。

11-3-8 OR運算子-範例 SQL查詢範例:Ch11-3-8.sql 查詢Courses資料表的課程c_no欄位包含’1’子字串,或課程名稱title欄位有’程式’子字串,如下所示: SELECT * FROM Courses WHERE c_no LIKE '%1%' OR title LIKE '%程式%'

11-4 WHERE子句的算術運算子-說明 WHERE子句的運算式條件可以使用算術運算子(Arithmetic Operators),算術運算子可以使用SELECT指令的欄位清單,用來計算2個欄位的和,使用各欄位組成一個算術運算式或是加上一個固定值。

11-4 WHERE子句的算術運算子-範例1 SQL查詢範例:Ch11-4-1.sql 因為課程學分小於4的課程學分都額外多了1個學分,在尚未更新Courses資料表前,可以使用算術運算式查詢Courses資料表的課程資料,替這些課程的學分自動加一來顯示,如下所示: SELECT c_no, title, credits + 1 AS NewCredits FROM Courses WHERE credits < 4

11-4 WHERE子句的算術運算子-範例2 SQL查詢範例:Ch11-4-2.sql 查詢Students資料表的學生成績GPA欄位小於另一班平均值10.0/3.0= 3.333的學生記錄,如下所示: SELECT sid, name, birthday, tel FROM Students WHERE GPA < (10.0 / 3.0)

11-5 ANSI-SQL的聚合函數 11-5-1 COUNT()函數 11-5-2 AVG()函數 11-5-3 MAX()函數 11-5-4 MIN()函數 11-5-5 SUM()函數

11-5 聚合函數 「聚合函數」(Aggregate Functions)可以進行資料表欄位的筆數、平均、範圍和統計函數,以便提供進一步欄位資料的分析結果,如下表所示:

11-5-1 COUNT()函數-範例1 SQL查詢範例:Ch11-5-1-1.sql 查詢Students資料表的學生總數,如下所示: SELECT COUNT(*) FROM Students

11-5-1 COUNT()函數-範例2 SQL查詢範例:Ch11-5-1-2.sql 查詢Students資料表的擁有姓名的學生總數,即學生欄位不是空值,如下所示: SELECT COUNT(name) FROM Students

11-5-1 COUNT()函數-範例3 SQL查詢範例:Ch11-5-1-3.sql 學生GPA成績是3.0,查詢Students資料表的學生GPA成績大於3.0的學生總數,以便查詢有幾位學生的成績比我高,如下所示: SELECT COUNT(*) FROM Students WHERE GPA > 3.0

11-5-2 AVG()函數-範例1 SQL查詢範例:Ch11-5-2-1.sql 查詢Students資料表各位學生的GPA平均值,如下所示: SELECT AVG(GPA) FROM Students

11-5-2 AVG()函數-範例2 SQL查詢範例:Ch11-5-2-2.sql 查詢Courses資料表中,課程編號c_no包含’1’子字串的課程總數和學分的平均值,如下所示: SELECT COUNT(*) AS Count, AVG(credits) AS Average FROM Courses WHERE c_no LIKE '%1%'

11-5-3 MAX()函數-範例1 SQL查詢範例:Ch11-5-3-1.sql 查詢Students資料表的第一名學生的GPA成績,如下所示: SELECT MAX(GPA) FROM Students

11-5-3 MAX()函數-範例2 SQL查詢範例:Ch11-5-3-2.sql 查詢Courses資料表中,課程編號c_no包含’1’子字串的最大學分數,如下表所示: SELECT MAX(credits) FROM Courses WHERE c_no LIKE '%1%'

11-5-4 MIN()函數-範例1 SQL查詢範例:Ch11-5-4-1.sql 查詢Students資料表的最後一名學生的GPA成績,如下所示: SELECT MIN(GPA) FROM Students

11-5-4 MIN()函數-範例2 SQL查詢範例:Ch11-5-4-2.sql 查詢Courses資料表中,課程編號c_no包含’1’子字串的最少學分數,如下所示: SELECT MIN(credits) FROM Courses WHERE c_no LIKE '%1%'

11-5-5 SUM()函數-範例1 SQL查詢範例:Ch11-5-5-1.sql 計算Students資料表這一班學生GPA成績的總和和平均,如下所示: SELECT SUM(GPA), SUM(GPA)/COUNT(*) FROM Students

11-5-5 SUM()函數-範例2 SQL查詢範例:Ch11-5-5-2.sql 計算Courses資料表中,課程編號c_no包含’1’子字串的學分數總和,如下所示: SELECT SUM(credits) FROM Courses WHERE c_no LIKE '%1%'

11-6 SQL語言的群組與排序 11-6-1 群組資料GROUP BY子句 11-6-2 GROUP BY與 WHERE和HAVING子句 11-6-3 排序資料ORDER BY 子句

11-6-1 群組資料GROUP BY子句-說明 群組是以指定欄位進行分類,將欄位值中重複的值結合起,例如:在Classes資料表統計每一門課有多少位學生選修,課程c_no欄位是群組欄位,可以將選修課程的學生結合起來,如下圖所示:

11-6-1 群組資料GROUP BY子句-範例1 SQL查詢範例:Ch11-6-1-1.sql 查詢Classes資料表顯示課程編號和計算每一門課程有多少位學生選修,如下所示: SELECT c_no, COUNT(*) FROM Classes GROUP BY c_no

11-6-1 群組資料GROUP BY子句-範例2 SQL查詢範例:Ch11-6-1-2.sql 查詢Classes資料表,統計每一間教室提供給幾門課作為教室,如下所示: SELECT room, COUNT(*) FROM Classes GROUP BY room

11-6-2 GROUP BY與WHERE和HAVING子句-說明

11-6-2 GROUP BY與WHERE和HAVING子句-範例1 SQL查詢範例:Ch11-6-2-1.sql 查詢Classes資料表找出有有幾位學生選修課程CS222,如下所示: SELECT c_no, COUNT(*) FROM Classes WHERE c_no = ‘CS222’ GROUP BY c_no

11-6-2 GROUP BY與WHERE和HAVING子句-範例2 SQL查詢範例:Ch11-6-2-2.sql 查詢Classes資料表找出學生S001選修的課程清單,如下所示: SELECT sid, c_no FROM Classes GROUP BY c_no, sid HAVING sid = 'S001'

11-6-2 GROUP BY與WHERE和HAVING子句-範例3 SQL查詢範例:Ch11-6-2-3.sql 查詢Classes資料表找出一門課有超過2位學生選修的課程清單,如下所示: SELECT c_no, COUNT(*) FROM Classes GROUP BY c_no HAVING COUNT(*) >= 2

11-6-3 排序資料ORDER BY 子句-說明 SQL指令的查詢結果如果需要以指定欄位進行排序,可以使用ORDER BY子句指定依照欄位由小到大或由大到小進行排序。 由小到大排序:在SQL指令的WHERE子句或GROUP BY之後加上ORDER BY子句,就可以指定顯示資料的排序欄位。 由大到小排序:如果查詢結果的排序順序是倒過來由大到小,只需在ORDER BY子句的最後加上DESC指令。

11-6-3 排序資料ORDER BY 子句-範例1 SQL查詢範例:Ch11-6-3-1.sql 查詢Students資料表學生成績GPA大於等於3.0的學生記錄,並且使用GPA欄位進行由小到大排序,如下所示: SELECT * FROM Students WHERE GPA >= 3.0 ORDER BY GPA ASC

11-6-3 排序資料ORDER BY 子句-範例2 SQL查詢範例:Ch11-6-3-2.sql 查詢Students資料表學生成績GPA大於等於3.0的學生記錄,並且使用GPA欄位進行由大到小排序,如下所示: SELECT * FROM Students WHERE GPA >= 3.0 ORDER BY GPA DESC