1 結構化查詢語言 SQL是什麼? 當用戶發出一項查詢Query,便可從數據庫檔(table)內獲得若干資料。

Slides:



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

MySQL 基础技能与原理 —— 基础技能 MySQL DBA Team 彭立勋( )
Data type P64 ‘’ 转义字符 P67 P68 EXE,选出某个教师的学生中最新的一 个,要姓名, ID (,LIMIT ) EXISTS,NOT EXISTS P409 Q,EXISTS 和 in 的区别( 1000 ,查询结果)
Java 技术与应用 数据库应用 ( 第 14 章 ) 西安交大 卫颜俊 2008 年 12 月 电子信箱: QQ: 网站 : /java.
Select 指令 基本結構 WHERE Like語法 Order by與group by Having 與 AS
第八单元 数据库MySQL应用基础 MySQL数据库应用基础 MySQ数据库操作使用 Mysql管理工具 第25章 数据库的增加/删除操作
目 录 第 1 章 数据库技术基础 第 2 章 SQL Server基础 第 3 章 数据库管理 第 4 章 查询和视图
關聯查詢.
SQL的简单查询.
第5章 关系数据库标准语言SQL 主讲:张丽芳.
第2章 SQL语言初步 2.1 SQL的基本概念 2.2 基本表、索引的创建、删除和修改操作 2.3 SQL的查询语句——SELECT
第2讲 Transact-SQL语言.
第5章 索引及视图操作 数据库原理应用与实践 SQL SERver2014(第2版) 主编 贾铁军 科学出版社 编著 陈国秦 万程 邢一鸣
数据库技术 实践.
高等院校计算机教材系列 数据库原理与应用(第2版) 任课教师:刘雅莉
Chap 11 SQL基本查詢指令.
复习重点; 1. 关系模型、ER模型 2. SQL 3. 事务管理 4. 函数依赖与规范化 5. 数据库设计  复习题 一、单项选择题
第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数据定义功能.
資料庫 (Database) SQL Server 2008實作
第3章 SQL的基础知识 数据库管理及应用 3.1 SQL简介 3.2 SQL的数据模型 3.3 标识符 3.4 使用SQL语句管理数据库
数据库概述 简而言之,数据库(DataBase)就是一个存储数据的仓库。为了方便数据的存储和管理,它将数据按照特定的规律存储在磁盘上。通过数据库管理系统,可以有效的组织和管理存储在数据库中的数据。如今,已经存在了Oracle、SQL Server、MySQL等诸多优秀的数据库。在这一章中将讲解的内容包括。
数据库原理及设计 --作业.
文科计算机小公共课规划教材 Access 程序设计.
第一讲 数据查询优化.
第三章 管理信息系统的技术基础 主要内容: 数据处理 数据组织 数据库技术 4. 计算机网络.
软件设计师培训.
计算机应用基础 上海大学计算中心.
第3章 数据查询与SQL命令.
第5讲 分组查询 IBM Confidential.
關聯式資料庫.
第六章 學習SQL語言.
9 SELECT敘述的進階查詢 9-1 SQL的多資料表查詢 9-2 合併查詢 9-3 集合運算查詢 9-4 子查詢
課程名稱:資料庫系統 授課老師:李春雄 博士
实验二 交互式SQL 邓云.
2、掌握SQL中各种查询方法和数据更新方法 3、掌握SQL中视图的定义方法和用法 4、掌握SQL的授权机制
Chap 10 SQL定義、操作與控制指令.
第八章 利用SELECT查詢資料.
資料庫安全 (Database Security)
彰化縣政府補助辦理網頁設計資料庫應用班 ASP與資料庫介紹 建國技術學院資管系 饒瑞佶.
第3章 MySQL教學範本 主從式資料庫系統 - CH3.
MySQL数据库基础与实例教程 之 MySQL表结构的管理 郭水泉.
第九章 進階的查詢技巧.
第三章作业讲评 文洁 2012/4/10.
SQL SERVER 一些经典语句 1.
MySQL 結構化查詢語言 MySQL.
第十七章 資料庫SQL 17-1 SELECT 17-2 INSERT 17-3 UPDATE 17-4 DELETE.
第十二章 SQL語言簡介 講授大綱: 新增資料庫 新增資料表 新增資料 修改資料 刪除資料 查詢資料 透視ASP.NET-第12章
iRepor报表设计基础 IReport安装 普通实体报表 数据结果集报表 工作流主从报表 饼状图报表 柱状图,曲线图报表 条形码报表
SQL Injection (資料隱碼) 學生:a 吳倩瑜 指導教授:梁明章.
实验二讲评 … 张榆….
SQL 結構化查詢語言.
数据库技术与应用.
第11章 ListView延迟加载效果 授课老师:高成珍 QQ号: QQ群: 、
数据库技术.
第18章 SQL結構化查詢語言 18-1 SQL語言的基礎 18-2 SQL的查詢指令 18-3 SQL子查詢與合併查詢.
資料庫系統 李翊豪 2017/12/21 Reference
3.2 Mysql 命令行 1 查看数据库 SHOW DATABASES; 2 创建一个数据库test1 CREATE DATABASE test1; 3 选择你所创建的数据库 USE test1; (按回车键出现Database changed 时说明操作成功!) 4 查看现在的数据库中存在什么表.
3. SQL语言的应用 3.1 SQL历史和优点 3.2 数据查询 3.3 数据操纵.
查询与视图 蔡海洋.
第14章 SQL数据查询与操纵 内容提要 本章知识点
SQL查询语句 蔡海洋.
第三章 SQL Server数据管理.
8 SELECT敘述的基本查詢 8-1 SELECT查詢指令 8-2 SELECT子句 8-3 FROM子句 8-4 WHERE子句
SQL語法教學 2015/10/15 John.
11 檢視表的建立 11-1 檢視表的基礎 11-2 建立檢視表 11-3 修改與刪除檢視表 11-4 編輯檢視表的內容.
資料庫系統_答案 Database System Week3
第4章 数据查询.
第 9 章 查詢資料- 善用 SELECT 敘述.
Presentation transcript:

1 結構化查詢語言 SQL是什麼? 當用戶發出一項查詢Query,便可從數據庫檔(table)內獲得若干資料。 這項查詢是根據用戶所提供的條件 (condition) 所作出的一項檢索。 用戶只須列明查詢的條件, 而不須要實際知道有關的檢索方法。

1 引言 SQL的概念 用戶先列出數據庫檔及查詢的條件。 可查問統計數項。 查詢所得的結果會以表格的形式顯示。

2 基本結構 一般語法 SELECT, DISTINCT, *, AS, FROM, WHERE 比較 IN, BETWEEN, LIKE "% _" 群組 GROUP BY, HAVING 函數 COUNT( ), SUM( ), AVG( ), MAX( ), MIN( ) 顯示次序 ORDER BY, ASC / DESC 邏輯運算符 AND, OR, NOT 輸出 CREATE TABLE AS SELECT ... 聯合 UNION 建立表格 CREATE TABLE … (…) 插入紀錄 INSERT INTO … VALUES (…) 刪除紀錄 DELETE … FROM … WHERE … 刪除表格 DROP TABLE …

2 實例:學生個人資料 STUDENT 欄名 類型 欄寬 內容 id 字符 4 學生編號 name 10 學生名字 dob 日期 8 出生日期 gender 1 性別: M / F class 2 班別 house 社名: R, Y, B, G district 3 地區碼 remission binary 學費減免 mtest 數字 數學測驗分數

5 CREATE TABLE student ( id CHAR(4) NOT NULL, name VARCHAR(20), dob DATE, gender CHAR(1), class CHAR(2), house CHAR(1), district CHAR(3), remission BINARY(1), PRIMARY KEY (id) ); CREATE TABLE MathTest( id int(4), mtest int(3), PRIMARY KEY (id) ); 5

2 實例:學生個人資料 STUDENT 橫列 row 欄 field 資料表格table id name dob gender class house district remission mtest 9801 Peter 1996-06-04 M 1A R SSP 68 9802 Mary 1996-01-10 F Y HHM 76 9803 Johnny 1996-03-16 G 1 38 9804 Wendy 1996-07-09 1B B YMT 92 9805 Tobe 1996-10-17 60 9806 Kitty 1997-01-25 58 9807 Eric 1997-05-05 1C MKK 28 9808 Patty 1997-08-13 橫列 row 欄 field 資料表格table

I 一般語法 SELECT [DISTINCT] expr1 [AS col1], expr2 [AS col2] ; FROM tablename WHERE condition SQL 程序會從數據庫檔 table選取符合條件的橫列 (row) 並以表格的格式顯示。 表達式 expr1, expr2 可以是 (1) 字段field (2) 以函數和字段組成的表達式 而 col1, col2 是表達式 expr1, expr2 在輸出結果的表格內的欄名。

I 一般語法 SELECT [DISTINCT] expr1 [AS col1], expr2 [AS col2] ; FROM tablename WHERE condition 選項 DISTINCT 會把重覆出現的橫列刪去(即只顯示一次) 。 條件 condition 可以是 (1) 等式或不等式 (2) 字符串的比較 使用邏輯運算符 AND, OR, NOT

I 一般語法 例 1 列出所有學生的資料。 SELECT * FROM student id name dob gender class 例 1 列出所有學生的資料。 SELECT * FROM student id name dob gender class house district remission mtest 9801 Peter 1996-06-04 M 1A R SSP 68 9802 Mary 1996-01-10 F Y HHM 76 9803 Johnny 1996-03-16 G 1 38 9804 Wendy 1996-07-09 1B B YMT 92 9805 Tobe 1996-10-17 60 9806 Kitty 1997-01-25 58 9807 Eric 1997-05-05 1C MKK 28 9808 Patty 1997-08-13

I 一般語法 例 2 列出 1A 班學生的名字和社名。 SELECT name, house, class FROM student WHERE class="1A" name house class Peter R 1A Mary Y 1A Johnny G 1A Luke G 1A Bobby B 1A Aaron R 1A : : :

I 一般語法 例 3 列出紅社社員的居住地區。 例 4 列出1B班女生的名字和年齡。 district HHM KWC MKK 例 3 列出紅社社員的居住地區。 district HHM KWC MKK SSP TST YMT : SELECT DISTINCT district FROM student WHERE house="R" 例 4 列出1B班女生的名字和年齡。 SELECT name, dob, year(curdate()) -year(dob) as age FROM student WHERE class="1B"

I II 一般語法 比較 例 5 列出1A班沒有學費減免的學生的名字和編號。 SELECT name, id, class FROM student WHERE class="1A" AND NOT remission II 比較 expr IN ( value1, value2, value3) expr BETWEEN value1 AND value2 expr LIKE "%_"

II 比較 例 6 列出所有出生於星期三或星期六的學生。 例 7 列出所有非在四月、六月、九月或十一月出生的學生。 星期日 dayofweek(dob)=1 : 星期六 dayofweek(dob)=7 例 6 列出所有出生於星期三或星期六的學生。 SELECT name, class, dayofweek(dob) FROM student WHERE dayofweek(dob)=4 OR dayofweek(dob)=7 例 7 列出所有非在四月、六月、九月或十一月出生的學生。 SELECT name, class, month(dob) FROM student WHERE month(dob) NOT IN (4,6,9,11)

II 比較 例 8 列出1A班的學生名字,其數學測驗分數 界乎於80至90分之間。 SELECT name, mtest FROM student WHERE class="1A" AND mtest>=80 AND mtest<=90 AND mtest BETWEEN 80 AND 90

II 比較 例 9 列出所有學生其名字是以"T"為起首。 例10 列出所有紅社社員其名字的第二個字母是"a" SELECT name, class FROM student WHERE name LIKE "T%" 例10 列出所有紅社社員其名字的第二個字母是"a" SELECT name, class, house FROM student WHERE name LIKE "_a%" AND house="R"

III 群組 SELECT ...... FROM ...... WHERE condition ; GROUP BY groupexpr [HAVING requirement] 群組函數: COUNT( ), SUM( ), AVG( ), MAX( ), MIN( ) – GROUP BY groupexpr 列出群組組成所依照的表達式。一般都是數據庫檔的一欄。 – WHERE condition 列出個別橫列所須符合的條件,而 HAVING requirement 則列出個別群組須符合的條件。

III 群組GROUP BY 例11 列出每一班的人數。 例12 列出每一班的數學測驗平均分。 SELECT class, count(*) 例11 列出每一班的人數。 SELECT class, count(*) FROM student GROUP BY class 例12 列出每一班的數學測驗平均分。 class avg(mtest) 1A 85.9 1B 70.3 1C 37.9 2A 89.4 2B 53.1 2C 32.7 SELECT class, avg(mtest) FROM student GROUP BY class

III 群組 例13 列出每一居住地區的女生數目。 例14 列出每一區中一學生數學測驗 的最高分及最低分。 district count HHM 6 KWC 1 MKK 1 SSP 5 TST 4 YMT 6 群組 例13 列出每一居住地區的女生數目。 SELECT district, count(*) FROM student WHERE gender="F" GROUP BY district District min max HHM 36 92 MKK 19 91 SSP 31 91 TST 36 92 TSW 75 75 YMT 38 88 例14 列出每一區中一學生數學測驗 的最高分及最低分。 SELECT district, min(mtest), max(mtest) FROM student WHERE class LIKE "1_" GROUP BY district

III 群組 例15 列出每一班男生數學測驗的平均分, 但若該班男生人數少於3人,則不計算在內。 例15 列出每一班男生數學測驗的平均分, 但若該班男生人數少於3人,則不計算在內。 SELECT class, avg(mtest) FROM student WHERE gender="M" GROUP BY class HAVING count(*)>=3 class avg(mtest) 1A 86.0 1B 77.7 1C 35.6 2A 86.5 2B 56.5 SELECT gender, if( gender = "F", 1, 0 ) FROM school; 1A 24 12 … 4A 10 20 SELECT class, sum( if( gender = "M", 1, 0 ) ) AS boys, sum( if( gender = "F", 1, 0 ) ) AS girls FROM school GROUP by class; M 1 … F 0

IV 顯示次序 例16 列出1A班男生的名字,並按名字序顯示。 SELECT ...... FROM ...... WHERE ...... GROUP BY ..... ; ORDER BY colname ASC / DESC 例16 列出1A班男生的名字,並按名字序顯示。 name id Aaron 9812 Bobby 9811 John 9803 Luke 9810 Peter 9801 Ron 9813 SELECT name, id FROM student WHERE gender="M" AND class="1A" ORDER BY name

IV 顯示次序 例17 列出2A班的學生資料, 並按居住地區序顯示。 例18 列出每區居住學生的人數, 並按降冪顯示。 SELECT * FROM student WHERE class="2A" ORDER BY district 例18 列出每區居住學生的人數, 並按降冪顯示。 SELECT district, count(*) as cnt FROM student GROUP BY district ORDER BY cnt DESC

IV 顯示次序 例19 列出每社的男社員名字,並按班別序顯示。 (即先排社,再排班次序) SELECT name, class, house 例19 列出每社的男社員名字,並按班別序顯示。 (即先排社,再排班次序) SELECT name, class, house FROM student WHERE gender="M" ORDER BY house, class

3 數據庫聯合、相交及差分 A 和 B 的聯合 (AB) A B union 檢取屬於 A 或 B 的所有橫列。

3 數據庫聯合、相交及差分 A 和 B 的相交 (AB) A B intersection 檢取 A 和 B 所共通的橫列。

3 數據庫聯合、相交及差分 A 和 B 的相交 (A–B) A B 檢取只屬於 A 而不屬於 B 的橫列。 (即從 A 把 B 的部分排出) difference 檢取只屬於 A 而不屬於 B 的橫列。 (即從 A 把 B 的部分排出)

3 實例:橋牌會和棋藝會 考慮學校的橋牌會和棋藝會的會員, 他們的資料分別貯存於同一結構的 數據庫檔內: BRIDGE / CHESS 欄名 類型 欄寬 內容 id 數字 4 學生編號 name 字符 10 學生名字 gender 字符 1 性別: M/F class 字符 2 班別

3 數據庫聯合、相交及差分

3 數據庫聯合、相交及差分 例22 本校計劃舉行一次棋橋活動。 列出兩會所有會員名單。 SELECT ...... FROM ...... WHERE ...... ; UNION ; SELECT ...... FROM ...... WHERE ...... 例22 本校計劃舉行一次棋橋活動。 列出兩會所有會員名單。 CREATE TABLE party AS SELECT * FROM bridge UNION SELECT * FROM chess ORDER BY class, name

3 數據庫聯合、相交及差分 例23 列出兩會的共同會員。(即兩會的相交) SELECT ...... FROM table1 ; WHERE col IN ( SELECT col FROM table2 ) 例23 列出兩會的共同會員。(即兩會的相交) SELECT * FROM bridge WHERE id IN ( ) SELECT id FROM chess SELECT * FROM chess, bridge WHERE chess.id = bridge.id

3 數據庫聯合、相交及差分 例24 列出只參加了橋牌會的名單。(即兩會之差分) SELECT ...... FROM table1 ; WHERE col NOT IN ( SELECT col FROM table2 ) 例24 列出只參加了橋牌會的名單。(即兩會之差分) CREATE TABLE diff AS SELECT * FROM bridge WHERE id NOT IN ( ) SELECT id FROM chess

4 多個數據庫 當所查詢的資料貯放於兩個數據 庫檔時,就須使用接合 (join)。 接合的作用是把一個數據庫檔內 的一個橫列與另一個數據庫檔內 的橫列連合起來,從而把所有不 同的組合列出來。

4 自然接合Natural join 在接合中加上一項接合條件,要求兩檔的共通欄(common column)的值是相同,這稱為自然接合。 這目的是要把這兩檔的相關資料連合起來,變成一個合一的大表格,再從這表格中執行查詢工作。e.g. chess.id=bridge.id

4 多個數據庫 接合Cross T1 T2 T3 Peter Mary 9801 9802 9803 John id name T1.id T1.name T2.id T2.addr 9801 Peter 9801 MongKok 9801 Peter 9802 Yaumetei 9802 Mary 9801 MongKok 9802 Mary Yaumetei T2 9801 9802 MongKok Yaumetei id addr 9803 John 9801 9802 MongKok Yaumetei 接合Cross

4 多個數據庫 自然接合Natural 相同的 id T4 T3 9801 Peter MongKok 9802 Yaumetei Mary 9803 John T3 T1.id T1.name T2.id T2.addr id T1.name T2.addr T4 9801 Peter MongKok 9802 Mary Yaumetei 自然接合Natural

4 實例:樂器班 學校規定每個學生都須要學習一件樂器。 兩檔: STUDENT & MUSIC 共同欄: 學生編號 id MUSIC 欄名 類型 欄寬 內容 id 數字 4 學生編號 type 字符 10 樂器名稱

4 自然接合Natural join 例25 列出所有學生的名字及所學習的樂器名稱。 9801 9801 自然 接合 9801 例25 列出所有學生的名字及所學習的樂器名稱。 Student 9801 id name class Music id 9801 type 相同的 id 自然 接合 9801 接合的結果 id name class type

4 自然接合 例25 列出所有學生的名字及所學習的樂器名稱。 SELECT s.class, s.name, s.id, m.type ; 例25 列出所有學生的名字及所學習的樂器名稱。 SELECT s.class, s.name, s.id, m.type ; FROM student s, music m ; WHERE s.id=m.id ORDER BY class, name 結果

4 自然接合 三部分: (1) 自然接合:以 id 來接合 (2) 條件: m.type="Piano" 例26 列出每班學習鋼琴的學生數目。 三部分: (1) 自然接合:以 id 來接合 (2) 條件: m.type="Piano" (3) 群組:GROUP BY class

4 自然接合 例26 列出每班學習鋼琴的學生數目。 SELECT s.class, COUNT(*) ; 例26 列出每班學習鋼琴的學生數目。 SELECT s.class, COUNT(*) ; FROM student s, music m ; WHERE s.id=m.id AND m.type="Piano" ; GROUP BY class ORDER BY class 結果

4 外接合 Outer join 外接合是自然接合再加上 沒有配合的部分。 (1) 先列出自然接合 方法: (2) 再列出沒有配合 (1) 先列出自然接合 方法: (2) 再列出沒有配合 (3) 把兩部分聯合起來

4 外接合 例27 列出尚未選擇樂器的學生名字。(即沒有相配) SELECT class, name, id FROM student ; 例27 列出尚未選擇樂器的學生名字。(即沒有相配) SELECT class, name, id FROM student ; WHERE id NOT IN ( SELECT id FROM music ) ; ORDER BY class, name 結果

4 外接合 例28 列出一份名單,去查核所有 學生學習的樂器。 名單須包括尚未參加樂器班 的學生名字。 (即外接合)

4 外接合 例28 自然接合 沒有配合 SELECT s.class, s.name, s.id, m.type FROM student s, music m WHERE s.id=m.id 自然接合 UNION SELECT class, name, id, "" FROM student WHERE id NOT IN ( SELECT id FROM music ) ORDER BY 1, 2 ; 沒有配合

4 外接合 外接合 自然接合 空白 沒有相配