課程名稱:資料庫系統 授課老師:李春雄 博士

Slides:



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

第十章 Java 数据库编程. 内容提要 数据库有关概念; 介绍 JDBC 的结构; 重点介绍 JDBC 访问几种数据库的基本过程;
2010 年 6 月课件制作人:王亚楠 1 模块 2 项目开发概论 教学课件 年 6 月课件制作人:王亚楠 2 目录 目标 了解:数据库技术的基本概念与结构 理解:数据模型的分类与结构组成 掌握:关系数据库及 SQL 的基本理论 知识 掌握:数据库设计的方法与步骤 内容 2.1 数据库技术基础.
Data type P64 ‘’ 转义字符 P67 P68 EXE,选出某个教师的学生中最新的一 个,要姓名, ID (,LIMIT ) EXISTS,NOT EXISTS P409 Q,EXISTS 和 in 的区别( 1000 ,查询结果)
Java 技术与应用 数据库应用 ( 第 14 章 ) 西安交大 卫颜俊 2008 年 12 月 电子信箱: QQ: 网站 : /java.
第 7 章 数据库 1. Overview  数据库概述  数据库管理系统  数据库的体系结构和数据库模型  SQL 语言  数据库技术  构建数据库系统 2.
第八单元 数据库MySQL应用基础 MySQL数据库应用基础 MySQ数据库操作使用 Mysql管理工具 第25章 数据库的增加/删除操作
計算機程式及實習 期末報告 題目:商店結帳系統
第5章 关系数据库标准语言SQL 主讲:张丽芳.
十一 ASP对数据库的访问.
ooxx這個遊戲程式,非常的簡單只要你小時候會玩井字遊戲即可把電腦打敗,可以說是一種考智力取勝的遊戲。
第2讲 Transact-SQL语言.
第5章 索引及视图操作 数据库原理应用与实践 SQL SERver2014(第2版) 主编 贾铁军 科学出版社 编著 陈国秦 万程 邢一鸣
数据库技术 实践.
第2章 数据模型 2.1 实体联系模型 2.2 关系模型 2.3 面向对象的数据模型 习 题 2.
第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语句管理数据库
数据库概述 简而言之,数据库(DataBase)就是一个存储数据的仓库。为了方便数据的存储和管理,它将数据按照特定的规律存储在磁盘上。通过数据库管理系统,可以有效的组织和管理存储在数据库中的数据。如今,已经存在了Oracle、SQL Server、MySQL等诸多优秀的数据库。在这一章中将讲解的内容包括。
数据库原理及设计 --作业.
第 八 章 資料庫安全 本投影片(下稱教用資源)僅授權給採用教用資源相關之旗標書籍為教科書之授課老師(下稱老師)專用,老師為教學使用之目的,得摘錄、編輯、重製教用資源(但使用量不得超過各該教用資源內容之80%)以製作為輔助教學之教學投影片,並於授課時搭配旗標書籍公開播放,但不得為網際網路公開傳輸之遠距教學、網路教學等之使用;除此之外,老師不得再授權予任何第三人使用,並不得將依此授權所製作之教學投影片之相關著作物移作他用。
文科计算机小公共课规划教材 Access 程序设计.
第三章 管理信息系统的技术基础 主要内容: 数据处理 数据组织 数据库技术 4. 计算机网络.
计算机应用基础 上海大学计算中心.
第3章 数据查询与SQL命令.
第2章 数据定义功能 创建表 在关系型数据模型中,表(Table)是最基本的数据结构。
第7章 建立資料表與完整性限制條件 7-1 資料型別 7-2 資料表的建立 7-3 建立完整性限制條件 7-4 修改與刪除資料表
題目:台灣客運 南臺科技大學 機械工程系 班級:奈米一乙 學號:4A 姓名:蔡政堯 授課教師:謝慶存
CH10.
關聯式資料庫.
Access 2007 進銷存管理系統實作 文魁資訊股份有限公司.
第六章 學習SQL語言.
第4章 SQL语言基础及数据库定义 4.1 基本概念 4.2 SQL Server 提供的主要数据类型 4.3 数据定义.
二.資料庫系統建立與管理 Access 資料庫:windows下的單機資料庫 Access 操作 Mysql資料庫介紹.
2、掌握SQL中各种查询方法和数据更新方法 3、掌握SQL中视图的定义方法和用法 4、掌握SQL的授权机制
Chap 10 SQL定義、操作與控制指令.
題庫解析:MTA資料庫檢定 授課老師:李春雄 博士
第 7 章 建立資料表與 資料庫圖表.
資料庫安全 (Database Security)
彰化縣政府補助辦理網頁設計資料庫應用班 ASP與資料庫介紹 建國技術學院資管系 饒瑞佶.
Transact-SQL 語言設計教學.
課程名稱:資料庫系統 授課老師:李春雄 博士
課程名稱:資料庫系統 授課老師:李春雄 博士
課程名稱:資料庫系統 授課老師:李春雄 博士
課程名稱:資料庫系統 授課老師:李春雄 博士
第7章 ADO.NET操作SQL Server数据库
第3章 MySQL教學範本 主從式資料庫系統 - CH3.
第五章 認識 SQL語言與 資料型別.
SQL SERVER 一些经典语句 1.
教 师:曾晓东 电 话: 数据库技术 教 师:曾晓东 电 话:
第十七章 資料庫SQL 17-1 SELECT 17-2 INSERT 17-3 UPDATE 17-4 DELETE.
Ch4.SQL Server 2005資料庫組成員元件介紹
第20章 MySQL数据库.
数据库技术与应用.
ORACLE 第九讲 触发器.
CH03 行銷資訊系統資料庫模組--資料庫概論
資料庫概論 許明宗.
第18章 SQL結構化查詢語言 18-1 SQL語言的基礎 18-2 SQL的查詢指令 18-3 SQL子查詢與合併查詢.
4.2 视图 (1) 视图是一个虚拟表,其内容来自对表查询的基础上。
CS, ZJU 4/18/2019 Chapter 7 数据库.
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 数据操纵.
SQL查询语句 蔡海洋.
第三章 SQL Server数据管理.
第 7 章 建立資料表與資料庫圖表.
第十八章 資料庫與Access 課前指引 在日常生活中,無論各位到銀行開戶、醫院掛號或是到學校註冊,一定都會填寫所謂的個人資料,裡面通常包括姓名、性別、生日、電話、住址等項目,所以人們建立了各種不同的列表來儲存及組織這些資料。 人們當初試圖建造電腦的主要原因之一就是可用來儲存及管理一些數位化資料清單與資料,這也是資料庫觀念的由來。尤其在資訊科技發達的今日,日常的生活已經和資料庫產生密切的結合。例如目前最熱門的網路拍賣,如何讓千萬筆交易順利完成,或者透過手機記錄著他人電話號碼,並能分類與查詢電話。
8 SELECT敘述的基本查詢 8-1 SELECT查詢指令 8-2 SELECT子句 8-3 FROM子句 8-4 WHERE子句
11 檢視表的建立 11-1 檢視表的基礎 11-2 建立檢視表 11-3 修改與刪除檢視表 11-4 編輯檢視表的內容.
第4章 数据查询.
Presentation transcript:

課程名稱:資料庫系統 授課老師:李春雄 博士 第 六 章 結構化查詢語言SQL 課程名稱:資料庫系統 授課老師:李春雄 博士 各位同學大家好,我是李春雄老師,本學期所開設的課程名稱為「資料結構」, 今天所要為各位介紹的是第一章「資料結構導論」

本章學習目標 1.讓讀者瞭解結構化查詢語言SQL所提供的三種 語言(DDL, DML, DCL)。 2.讓讀者瞭解SQL語言的基本查詢。 開始: 本章學習目標 有二項:

本章內容 6-1 SQL語言的概念 6-2 Access查詢物件的SQL檢視 6-3 SQL的DDL指令介紹 6-4 SQL的DML指令介紹 6-5 SQL的DCL指令介紹 6-6 SQL的基本語法<完整例子在第七章> 1-1 認識資料與資訊的關係: 其中,「資料」轉換成「資訊」必須要經過一連串處理過程,而這一連串的處理過程就是透過「程式」來處理。 1-2 何謂資料結構? 「資料結構」(Data Structures)主要是探討如何將資料更有組織地存放到電腦記憶體中,以提昇程式之執行效率的一 門學問。 1-3 何謂演算法?演算法就是「解決問題的方法」 1-4 程式設計概念: 步驟1. 分析所要解決的問題 步驟2. 設計解題的步驟 步驟3. 編寫程式 步驟4. 上機測試、偵測錯誤 步驟5. 編寫程 式說明書 1-5 結構化程式設計 利用「由上而下」的技巧,將程式分解成許多個獨立功能的模組。並且每一個模組都是由三種結構所組成。分別為循序結構、選擇結構及重複結構。 1-6 演算法的效率評估 指用來計算某些演算法所撰寫的程式,在經過編譯之後,實際執行所需要的時間。

6-1 SQL語言的概念 【定義】 SQL(Structured Query Language;結構化查詢語言) 它是一種與「資料庫」溝通的共通語言,並且它是為「資料庫處理」 而設計的第四代「非程序性」查詢語言。 【唸法】一般而言,它有兩種不同的唸法 1.三個字母獨立唸出來 S-Q-L 2.唸成 sequel ( 西擴) 【制定標準機構】 目前SQL語言已經被美國標準局(ANSI)與國際標準組織(ISO)制定為 SQL標準,因此,目前各家資料庫廠商都必須要符合此標準。 【目前使用的標準】ANSI SQL92 (1992年制定的版本)。

SQL語言提供三種語言 1.第一種為資料定義語言(Data Definition Language; DDL) 用來「定義」資料庫的結構、欄位型態及長度。 2.第二種為資料操作語言(Data Manipulation Language; DML) 用來「操作」資料庫的新增資料、修改資料、刪除資料、查詢資料 等功能。 3.第三種為資料控制語言(Data Control Language; DCL) 用來「控制」使用者對「資料庫內容」的存取權利。 因此,SQL語言透過DDL,DML及DCL來建立各種複雜的表格關聯,成為一個查詢資料庫的標準語言。

Relational Model(關聯式模式) 6-1.1 SQL語言與關聯式模式的關係  在第五章節中,我們都已瞭解「關聯式模式」可以分為兩大類,分別為「關聯式代數」與「關聯式計算」,而本章所要介紹「SQL語言」則是關聯式代數(Relation algebra)與關聯式計算(Relation calculus)的綜合體。接下來,我們來探討「SQL語言」與「關聯式模式」的關係為何呢?如下表所示。 表6-1 SQL與Relational Model之比較表 SQL語言 Relational Model(關聯式模式) 資料表(Table) 關聯(Relation) 記錄(Record)或列(Row) 值組(Tuple) 欄位(Filed)或行(Column) 屬性(Attribute) 不一定要有主鍵 一定要有主鍵 屬性(欄位)有順序性 屬性(欄位)沒有順序性 有重覆的值組 沒有重覆的值組

6-1.2. SQL提供三種語言 一般而言,用來處理資料庫的語言稱為資料庫語言(SQL)。 資料庫語言大致上具備了三項功能: 1.資料「定義」語言(Data Definition Language; DDL) 2.資料「操作」語言(Data Manipulation Language; DML) 3.資料「控制」語言(Data Control Language; DCL) 以上三種語言在整個「資料庫設計」中所扮演的角色如下圖 所示: 建立資料表結構 維護資料表結構 異動與查詢 管理使用者權限 設定使用者權限

6-2 Access查詢物件的SQL檢視 一般而言,在利用Access來進行查詢功能時,會有兩種不同的模式: 第一種模式:使用「查詢物件」或「查詢精靈」 優點:不須撰寫難困的SQL指令 缺點:無法有效的培養撰寫SQL語言的能力 適用對象:高職生或一般的使用者 第二種模式:使用「 SQL檢視」《本書中,以此種為主》 優點:1.可能培養撰寫SQL語言的能力 2.可以直接套用到程式語言中 3.較為有系統的學習方式 4.彈性較大,並且語法有理論基楚 缺點:須要花較長時間學習 適用對象:大專生或資訊相關科系

【作法】   步驟一: 首先,啟動已經「附錄一 Access的基本操作」所建立完成的「ch6\素材檔\ch6-2.accdb」資料庫之後,再按「建立/查詢設計」,此時,畫面上會出現「顯示資料表」的對話方塊,您不需要選取任何的資料表,直接按「關閉」鈕,即可進入「設計檢視」視窗。  

步驟二:在功能區中按【檢視/SQL檢視】,即可切換到【SQL檢視】 編輯視窗。如下圖所示:  

步驟三:此時,你可以在【SQL檢視】編輯視窗中,撰寫SQL指令, 並且按「執行」鈕,如下圖所示: 按「執行」鈕 撰寫SQL指令

步驟四:顯示執行結果

步驟五:按「儲存」鈕,來儲存撰寫SQL指令, 此時請輸入「學生基本資料查詢」,如下圖所示:。 輸入查詢名稱 儲存 按確定

步驟六:查詢目前已經建立的「查詢」  展示檔案:ch6\完成檔\ch6-2.accdb

6-3 SQL的DDL語言  【定義】 資料定義語言(Data Definition Language; DDL),利用DDL,使用者可以定義資料表(關聯綱目;基底資料表)和設定完整性限制。並且DDL允許資料庫使用者建立、更改或刪除(資料表(Table)、索引(Index)與檢視(View))資料庫物件。主要指令有三:CREATE、ALTER 與 DROP。 如表6-3所示。 表6-3 DDL語言提供的三種指令表 Table Index View (1)Create Table (2)Alter Table (3)Drop Table (1)Create Index (2)Alter Index (3)Drop Index (1)Create View (2)Alter View (3)Drop View

6-3.1 CREATE TABLE(建立資料表) 【定義】 Create Table命令是用來讓使用者定義一個新的關聯(資料表), 並設定關聯(表格)的名稱、屬性及限制條件。 【建立新資料表的步驟】 (1)決定資料表名稱與相關欄位 (2)決定欄位的資料型態 (3)決定欄位的限制(指定值域) (4)決定那些欄位可以NULL(空值)與不可NULL的欄位 (5)找出必須具有唯一值的欄位(主鍵) (6)找出主鍵-外來鍵配對(兩個表格) (7)決定預設值(欄位值的初值設定)

【格式】 說明: (1)PRIMARY KEY 用來定義某一欄位為主鍵,不可為空值 (2)UNIQUE 用來定義某一欄位具有唯一的索引值,可以有空值 (3)NULL/NOT NULL 可以為空值/不可為空值 (4)FOREIGN KEY 用來定義某一欄位為外部鍵 (5)CHECK 用來額外的檢查條件

【舉例】 請利用Create Table來建立「學生選課系統」的關聯式資料庫,其相關的資料表有三個,如下所示: 【舉例】  請利用Create Table來建立「學生選課系統」的關聯式資料庫,其相關的資料表有三個,如下所示: 【分析1】辨別「父關聯表」與「子關聯表」 在利用Create Table來建立資料表時,必須要先了解那些資料表是屬於父關聯表(一對多,一的那方;亦即箭頭被指的方向)與子關聯表(一對多,多的那方),例如:上表中的「學生表」與「課程表」 【分析2】先建立「父關聯表」之後,再建立「子關聯表」 例如:上表中的「選課表」

1.先建立「父關聯表」 主鍵 主鍵 建立「學生表」 CREATE TABLE 學生表 (學號 CHAR(8) NOT NULL, 1.先建立「父關聯表」   建立「學生表」 CREATE TABLE 學生表 (學號 CHAR(8) NOT NULL, 姓名 CHAR(4), 電話 CHAR(12), 地址 CHAR(20), PRIMARY KEY(學號), UNIQUE(電話)); 主鍵 建立「課程表」 CREATE TABLE 課程表 (課號 CHAR(5) NOT NULL, 課名 CHAR(20) NULL, 學分數 INT NULL, 必選修 CHAR(2) NULL, PRIMARY KEY(課號) ); 主鍵

2.再建立「子關聯表」 複合主鍵 建立「選課表」 CREATE TABLE 選課表 (學號 CHAR(8) NOT NULL, 2.再建立「子關聯表」   建立「選課表」 CREATE TABLE 選課表 (學號 CHAR(8) NOT NULL, 課號 CHAR(5) NOT NULL, 成績 INT, PRIMARY KEY(學號,課號) ); 複合主鍵

【上機練習】 請利用Create Table來建立以下四個資料表。 學生表(學號,姓名,電話,地址) 建立順序:1 學生表(學號,姓名,電話,地址) 建立順序:1 選課表(學號,課號,成績,選課日期) 建立順序:3 課程表(課號,課名,學分數,必選修,老師編號) 建立順序:2 老師表(老師編號,老師姓名,研究領域) 建立順序:1

【Access上機實作1】  請利用VB介面來撰寫SQL指令以建立一個新的資料表「學生表」,並且建立四個欄位,分別為「學號」、「姓名」、「電話」及「地址」。 【解答】 步驟一:請您先自行撰寫以下的SQL指令 利用Create指令建立「學生表」 CREATE TABLE 學生表 ( 學號 CHAR(8), 姓名 CHAR(4), 電話 CHAR(12), 地址 CHAR(50) )

步驟二:撰寫一段VB程式碼 程式碼:ch6-3.sln Imports System.Data 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 Imports System.Data Imports System.Data.OleDb Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim dbpath As String = “ch6-3.accdb” ‘宣告資料庫所在的路徑變數 Dim Source As String '宣告連線的字串 Source = “Provider=Microsoft.ACE.OLEDB.12.0;Data Source=” & dbpath Dim conn As OleDbConnection '宣告連線的物件 conn = New OleDbConnection(Source) '連線 conn.Open() '開啟資料庫 Dim CreateCmd As String CreateCmd = TextBox1.Text Dim Cmd As OleDbCommand = New OleDbCommand(CreateCmd, conn) Cmd.ExecuteNonQuery() conn.Close() MsgBox("執行「SQL指令」成功!") End Sub End Class 註:開啟附書光碟中「 01_附書光碟\01_Access 2010(範例資料庫)\ch6\ch6-3\ch6-3.sln」

步驟三:開啟VB程式,檔案路徑在 ch6\ch6-3\ ch6-3.sln 1.撰寫SQL指令 2

步驟四:執行結果 開啟Access資料庫中的「學生表」 步驟四:執行結果  開啟Access資料庫中的「學生表」 檔案路徑:在 ch6\ch6-3\ch6-3\bin\Debug\ch6-3.accdb

6-3.2 ALTER TABLE(修改資料表) 【定義】 ALTER TABLE命令是用來對已存在的資料表增加欄位、修改欄位、 刪除欄位,並且增加定義、修改定義或刪除定義等。 【格式】 【符號說明】 { | }代表在大括號內的項目是必要項,但可以擇一。 [ ] 代表在中括號內的項目是非必要項,依實際情況來選擇。

【分析1】「新增」欄位定義 

【分析2】「修改」欄位定義 【分析3】「刪除」欄位定義 原來的學生資料表中的「地址」之資料型態(大小2050)。 ALTER TABLE 學生資料表 ALTER 地址 CHAR(50); 【分析3】「刪除」欄位定義 將學生資料表中的「地址」欄位刪除。 ALTER TABLE 學生資料表 DROP 地址;

【Access上機實作2】 承上機實作1,再將「學號」欄位設定為主鍵(Primary Key)。 【解答】 步驟三: 執行結果 【解答】 步驟三: 執行結果 步驟一:撰寫SQL指令 利用Alter指令設定「學號」為主鍵 Alter Table 學生表 Add primary key(學號) 開啟Access資料庫中的「學生表」 檔案路徑:在 ch6\ch6-3\ch6-3\bin\Debug\ch6-3.accdb 步驟二:執行SQL指令

【Access上機實作3】 承上機實作2,再增加一個「系碼」欄位。 【解答】 步驟三: 執行結果 步驟一:撰寫SQL指令 【解答】 步驟三: 執行結果 步驟一:撰寫SQL指令 利用Alter指令增加「系碼」欄位 Alter Table 學生表 Add 系碼 char(4) 開啟Access資料庫中的「學生表」 檔案路徑:在 ch6\ch6-3\ch6-3\bin\Debug\ch6-3.accdb 步驟二:執行SQL指令

【Access上機實作4】 承上機實作3,將「地址」之資料型態(大小50100)。 【解答】 步驟三: 執行結果 步驟一:撰寫SQL指令 【解答】 步驟三: 執行結果 步驟一:撰寫SQL指令 利用Alter指令修改資料型態 Alter Table 學生表 Alter 地址 char(100) 步驟二:執行SQL指令 開啟Access資料庫中的「學生表」 檔案路徑:在 ch6\ch6-3\ch6-3\bin\Debug\ch6-3.accdb

【Access上機實作5】 承上機練習4,將「電話」與「地址」欄位刪除。 【解答】 步驟三: 執行結果 步驟一:撰寫SQL指令 【解答】 步驟三: 執行結果 步驟一:撰寫SQL指令 利用Alter指令刪除欄位名稱 Alter Table 學生表 Drop 電話 步驟二:執行SQL指令 註:再重複步驟一與步驟二 來刪除「地址」欄位 開啟Access資料庫中的「學生表」 檔案路徑:在 ch6\ch6-3\ch6-3\bin\Debug\ch6-3.accdb

【上機作業】 請利用Create Table來建立「學生選課系統」的關聯式資料庫,其相關的資料表有三個,如下所示: 【解答】 【上機作業】   請利用Create Table來建立「學生選課系統」的關聯式資料庫,其相關的資料表有三個,如下所示: 【解答】 建立「學生表」 CREATE TABLE 學生表 (學號 CHAR(5), 姓名 CHAR(4), 系碼 CHAR(4), PRIMARY KEY(學號) ); 上機練習1~5已經完成

請再撰寫這兩段SQL指令,並上機執行。 建立「課程表」 CREATE TABLE 課程表 (課號 CHAR(5) NOT NULL, 課名 CHAR(20) NULL, 學分數 INT NULL, 必選修 CHAR(2) NULL, PRIMARY KEY(課號) ); 請再撰寫這兩段SQL指令,並上機執行。 建立「選課表」 CREATE TABLE 選課表 (學號 CHAR(8) NOT NULL, 課號 CHAR(5) NOT NULL, 成績 INT, PRIMARY KEY(學號,課號) ); 開啟Access資料庫中的「學生選課系統」 檔案路徑:在 ch6\ch6-3\ch6-3\bin\Debug\ch6-3.accdb

6-3.3 DROP TABLE  【定義】 是指用來刪除資料表定義,當然,如果一個資料表內還有剩餘的紀錄,則這些紀錄會一併被刪除,因為如果資料表定義被刪除,則資料表的紀錄就沒有存在的意義了。 當資料表與資料表之間可能存在參考關係,比如「選課表」 <子關聯表>參考到「學生表」<父關聯表>時,則在刪除時,必須要先從<子關聯表>刪除,否則如果先從<父關聯表>刪除時,將會導致<子關聯表>參考不到上一層的<父關聯表>,亦即將「學生表」被刪除之後,則另一個「選課表」的記錄就變成沒有意義了。因此,產生所謂的「孤鳥」。

表示在「學生表」沒被其他《子關聯表》參考時, 才可被刪除。 【格式】 【分析1】DROP TABLE 學生表; 表示在「學生表」沒被其他《子關聯表》參考時, 才可被刪除。 DROP TABLE 資料表名稱

【舉例】  在ch6-3.1中,建立資料表的順序是先建立<父關聯表>,才能建立<子關聯表>,其主要的原因為<子關聯表>參考(相依於)<父關聯表>的關係。相反地,欲刪除資料表時,則必須要先刪除<子關聯表>,才能刪除<父關聯表>。 請利用DROP Table來刪除「學生選課系統」的關聯式資料庫,其相關的資料表有三個,如下所示:

【舉例】<續…> 【分析1】辨別「父關聯表」與「子關聯表」 【舉例】<續…>  【分析1】辨別「父關聯表」與「子關聯表」 在利用DROP Table來刪除資料表時,必須要先了解那些資料表是屬於父關聯表(一對多,一的那方;亦即箭頭被指的方向)與子關聯表(一對多,多的那方),例如:上表中的「學生表」與「課程表」 【分析2】先刪除「子關聯表」之後,再建立「父關聯表」 例如:上表中的「選課表」

【上機練習】 請利用DROP Table來刪除以下三個資料表。 學生表(學號,姓名,電話,地址) 刪除順序:2 學生表(學號,姓名,電話,地址) 刪除順序:2 選課表(學號,課號,成績,選課日期) 刪除順序:1 課程表(課號,課名,學分數,必選修) 刪除順序:2 規則: 1.建立資料表的順序是先建立<父關聯表>,才能建立<子關聯表> 2.刪除資料表時,則必須要先刪除<子關聯表>,才能刪除<父關聯表>

6-4 SQL的DML指令介紹  資料操作語言(Data Manipulation Language; DML),利用DML,使用者可以從事對資料表記錄的新增、修改、刪除及查詢等功能。 DML有四種基本指令: 1. INSERT(新增) 2. UPDATE(修改) 3. DELETE(刪除) 4. SELECT(查詢)

6-4.1 INSERT指令 【定義】指新增一筆記錄到新的資料表內。 【格式】 【實例1】未指定欄位串列的新增(但是欲新增資料值必須能夠配合欄位型態及個數) 假設現在新增「產品代號」為A005,「品名」為桌球衣及「單價」為 1200的記錄到產品資料表中。 [註]在VALUES子句內的屬性值串列的排列順序要跟當初定義時一致。 INSERT INTO 資料表名稱 <欄位串列> VALUES(<欄位值串列> | <SELECT指令>)

【實例2】指定欄位串列的新增 假設現在新增產品代號為D002,品名為桌球皮的記錄到產品資料表中。 【實例2】指定欄位串列的新增  欲新增資料值個數可以自行指定,不一定要與定義的欄位個數相同 假設現在新增產品代號為D002,品名為桌球皮的記錄到產品資料表中。 註:未指定對映的屬性,會被設定為DEFAULT值或NULL值, 如「產生資料表」的單價屬性值為NULL。

【實例3】 將羽球相關的品名從「產品資料表」中整批新增到另一個資料表中。 註:將查詢的結果「整批新增」到其他資料表中。 【實例3】  將羽球相關的品名從「產品資料表」中整批新增到另一個資料表中。 註:將查詢的結果「整批新增」到其他資料表中。 注意:此功能只能在Access 2003版本或SQL Server上執行。

【Access上機實作6A】 承上機實作5,新增一筆記錄到「學生表」中。 【解答】 步驟三: 執行結果 步驟一:撰寫SQL指令 【解答】 步驟三: 執行結果 步驟一:撰寫SQL指令 「新增記錄」Insert INSERT INTO 學生表 VALUES (‘S0001’, ‘小明', 'D001'); 開啟Access資料庫中的「學生表」 檔案路徑:在 ch6\ch6-4\ch6-4\bin\Debug\ch6-4.accdb 步驟二:執行SQL指令 開啟VB程式,檔案路徑在 ch6\ch6-4\ ch6-4.sln 注意:如果相同的資料,再新增一次時,則會 產生錯誤,因為主鍵不可以重複。

【Access上機實作6B】 假設有一個「學生資料表」及一個「科系代碼表」,其目前的欄位名稱及內容如下所示: 資料庫路徑: ch6\ch6-4_1_Show\ch6-4_1_Show\bin\Debug\ ch6-4_1.accdb

現在欲新增學號為S0005, 姓名為「李崴」及就讀的系名為「電子系」的記錄到「學生資料表」中。 [註]在VALUES子句內的屬性值串列的排列順序要跟當初定義時一致。

【程式碼】 程式碼:ch6-4_1_Show.sln 01 02 03 04 05 06 07 08 09 10 11 12 13 14 【程式碼】  程式碼:ch6-4_1_Show.sln 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 Private Sub Button1_Click(……) Handles Button1.Click Dim dbpath As String = "ch6-4_1.accdb" '宣告資料庫所在的路徑變數 Dim Source As String '宣告連線的字串 Source = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & dbpath Dim conn As OleDbConnection '宣告連線的物件 conn = New OleDbConnection(Source) '連線 conn.Open() '開啟資料庫 Dim InsertCmd As String InsertCmd = "Insert Into 學生資料表(學號,姓名,系碼) Values('" & TextBox1.Text.Trim() & "','" & TextBox2.Text.Trim() & "','" & Mid(ComboBox1.Text.Trim(), 1, 4) & "')" Dim cmd As OleDbCommand = New OleDbCommand(InsertCmd, conn) cmd.ExecuteNonQuery() conn.Close() ' 關閉資料庫 MsgBox("新增成功!") Call Show_Record() End Sub

【執行結果】 ch6\ch6-4_1_Show\ch6-4_1_Show\ch6-4_1_Show.sln 資料庫路徑: 【執行結果】   ch6\ch6-4_1_Show\ch6-4_1_Show\ch6-4_1_Show.sln 按「新增」鈕 輸入資料 顯示結果 資料庫路徑: ch6\ch6-4_1_Show\ch6-4_1_Show\bin\Debug\ ch6-4_1.accdb

6-4.2 UPDATE指令 【定義】指修改一個資料表中某些值組(記錄)之屬性值。 【格式】 UPDATE 資料表名稱 SET {<欄位名稱1>=<欄位值1>,…, <欄位名稱n>=<欄位值n>} [WHERE <條件子句>]

[實例] 在「產品資料表」中,有關桌球相關產品單價調升30%。 【解答】 產品資料表 SQL指令 UPDATE 產品資料表 [實例]  在「產品資料表」中,有關桌球相關產品單價調升30%。 【解答】 產品資料表 SQL指令 UPDATE 產品資料表 SET 單價 = 單價*1.3 WHERE 品名 LIKE '桌球%'

【Access上機實作7A】 承上機實作6,修改學號為’S0001’的學生之「姓名」為”李安”。 【解答】 步驟三: 執行結果 【解答】 步驟三: 執行結果 步驟一:撰寫SQL指令 「修改記錄」Update UPDATE 學生表 SET 姓名= '李安' WHERE 學號=‘S0001'; 開啟Access資料庫中的「學生表」 檔案路徑:在 ch6\ch6-4\ch6-4\bin\Debug\ch6-4.accdb 步驟二:執行SQL指令 開啟VB程式,檔案路徑在 ch6\ch6-4\ ch6-4.sln

【Access上機實作7B】 假設有一個「學生資料表」及一個「科系代碼表」,其目前的欄位名稱及內容如下所示: 資料庫路徑: ch6\ch6-4_2_Show\ch6-4_2_Show\bin\Debug\ ch6-4_2.accdb

現在欲在「學生資料表」中,將李崴同學姓名改為「李碩崴」。

【程式碼】  程式碼:ch6-4.2.sln 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 Private Sub Button3_Click(……) Handles Button3.Click Dim dbpath As String = “ch6-4_2.accdb" '宣告資料庫所在的路徑變數 Dim Source As String '宣告連線的字串 Source = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & dbpath Dim conn As OleDbConnection '宣告連線的物件 conn = New OleDbConnection(Source) '連線 conn.Open() '開啟資料庫 Dim UpdateCmd As String UpdateCmd = "UPDATE 學生資料表 SET 學號='" & TextBox1.Text.Trim() & "',姓名='" & TextBox2.Text.Trim() & "' ,系碼='" & Mid(ComboBox1.Text.Trim(), 1, 4) & "' WHERE 學號='" & TextBox1.Text.Trim() & "'" Dim cmd As OleDbCommand = New OleDbCommand(UpdateCmd, conn) cmd.ExecuteNonQuery() conn.Close() MsgBox("修改成功!") Call Show_Record() End Sub

【執行結果】   按「查詢」鈕 按「修改」鈕 顯示查詢結果 修改姓名資料 按「確定」鈕 輸入學號

6-4.3 DELETE指令 【定義】把合乎條件的值組(記錄),從資料表中刪除。 【格式】 DELETE FROM 資料表名稱 [WHERE <條件式>]

[實例1]  將尚未決定單價的產品記錄刪除。

[實例2] 將在「產品資料表」中刪除單價未達2500的產品記錄。 SQL指令 DELETE FROM 產品資料表 WHERE產品代號 IN [實例2]  將在「產品資料表」中刪除單價未達2500的產品記錄。 SQL指令 DELETE FROM 產品資料表 WHERE產品代號 IN (SELECT產品代號 FROM 產品資料表 WHERE 單價<=2500)

【Access上機實作8A】 承上機實作7,刪除學號為’S0001’的學生記錄。 【解答】 步驟三: 執行結果 步驟一:撰寫SQL指令 【解答】 步驟三: 執行結果 步驟一:撰寫SQL指令 「刪除記錄」Delete DELETE * FROM 學生表 WHERE 學號=‘ S0001' 開啟Access資料庫中的「學生表」 檔案路徑:在 ch6\ch6-4\ch6-4\bin\Debug\ch6-4.accdb 步驟二:執行SQL指令 開啟VB程式,檔案路徑在 ch6\ch6-4\ ch6-4.sln

【Access上機實作8B】 假設有一個「學生資料表」及一個「科系代碼表」,其目前的欄位名稱及內容如下所示: 資料庫路徑: ch6\ch6-4_3_Show\ch6-4_3_Show\bin\Debug\ ch6-4_3.accdb

現在欲在「學生資料表」中,將學號「S0005」學生資料記錄刪除。

【程式碼】  程式碼:ch6-4.3.sln 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 Private Sub Button4_Click(……) Handles Button4.Click Dim dbpath As String = "ch6-4_3.accdb" '宣告資料庫所在的路徑變數 Dim Source As String '宣告連線的字串 Source = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & dbpath Dim conn As OleDbConnection '宣告連線的物件 conn = New OleDbConnection(Source) '連線 conn.Open() '開啟資料庫 Dim UpdateCmd As String UpdateCmd = "Delete From 學生資料表WHERE 學號='" & TextBox1.Text.Trim() & "'" Dim cmd As OleDbCommand = New OleDbCommand(UpdateCmd, conn) cmd.ExecuteNonQuery() conn.Close() MsgBox("刪除成功!") TextBox1.Clear() TextBox2.Clear() TextBox3.Clear() TextBox4.Clear() Call Show_Record() End Sub End Class

【執行結果】  

6-4.4 SELECT指令簡介 【定義】是指用來過濾資料表中符合條件的記錄。 【格式】 SELECT [DISTINCT] <欄位串列> FROM (資料表名稱 {<別名>} | JOIN資料表名稱) [WHERE <條件式>] [GROUP BY <群組欄位> ] [HAVING <群組條件>] [ORDER BY <欄位> [ASC | DESC]]

【實例1】  請顯示下列「產品資料表」中所有產品記錄 產品資料表 【解答】 【執行結果】 SELECT * FROM 產品資料表

6-5 DCL的指令介紹 【定義】 資料控制語言(Data Control Language; DCL),DCL控制使用者對 資料庫內容的存取權利。 【指令】 1.GRANT(授權) 2.REVOKE(移除權限) 【DCL提供交易控制指令】 (1)COMMIT指令:確認(儲存)資料庫的交易。 (2)ROLLBACK指令:回復(復原Recovery)資料庫的交易。 (3)SAVEPOINT指令:設定群組內交易的記號,以方便ROLLBACK。

6-5.1 GRANT指令 【定義】 GRANT指令用來取得現有資料庫使用者帳號的權限。 【格式】 其中,「權限」可分為四種:Insert, Update, Delete, Select GRANT 權限 ON 資料表名稱 TO 使用者

[實例1] 對USER1與USER2提供SELECT與INSERT對客戶資料表的使用者權限功能。 【解答】 SQL語法 [實例1]  對USER1與USER2提供SELECT與INSERT對客戶資料表的使用者權限功能。 【解答】 SQL語法 GRANT SELECT, INSERT ON 客戶資料表 TO USER1, USER2

[實例2]  對所有的使用者提供Select的功能權限。 【解答】 SQL語法 GRANT SELECT ON 客戶資料表 TO PUBLIC

6-5.2 REVOKE指令 【定義】REVOKE指令用來取消資料庫使用者已取得的權限。 【格式】 【實例】表示從USER2帳號移除對的INSERT權限。 REVOKE 權限 資料表名稱 FROM 使用者 SQL語法 REVOKE INSERT ON 客戶資料表 FROM USER2

6-5.3 COMMIT指令 【定義】 是指用來確認最後一次COMMIT指令對資料庫所做的交易。 【格式】 【實例】確認對資料庫所做的交易 COMMIT [WORK]; SQL語法 DELETE FROM 產品資料表 WHERE 產品代號='D002' COMMIT ; 保証永久DELETE

6-5.4 ROLLBACK指令 【定義】 ROLLBACK指令用來回復(Recovery)尚未被COMMIT的資料庫交易。 【格式】 ROLLBACK [TO SAVEPOINT]

[實例] SELECT * FROM 產品資料表 UPDATE 產品資料表 SET 單價=單價*1.5 SELECT * FROM產品資料表 [實例]  SELECT * FROM 產品資料表 UPDATE 產品資料表 SET 單價=單價*1.5 SELECT * FROM產品資料表 ROLLBACK;

6-5.5 SAVEPOINT指令 【定義】 是指交易內的點,回復動作可以SAVEPOINT為指標點,而不必回復整個交易。 【格式】

【實例】 SAVEPOINT P1; DELETE FROM 產品資料表 WHERE 產品代號 LIKE 'A%'; 【實例】  SAVEPOINT P1; DELETE FROM 產品資料表 WHERE 產品代號 LIKE 'A%'; SAVEPOINT P2; DELETE FROM 產品資料表 WHERE 產品代號 LIKE 'B%'; SAVEPOINT P3; 若希望回復到SAVEPOINT P2之處,則 ROLLBACK P2; COMMINT; 結果只刪除產品代號A開頭的所有產品。

【注意】  COMMIT, ROLLBACK, SAVEPOINT等三個交易控制指令只能與DML的INSERT, UPDATE, DELETE一起使用。 而SELECT指令是唯讀(Read-only),故不必Commit或Rollback。