第四章 SQL與關係數據庫基本操作
**大家想一起學習交流的可以加羣,WX:MrCroods。**
第一節 SQL概述
一、SQL的發展
(1)、結構化查詢語言(SQL)是一種數據庫查詢和程序設計語言,主要用於存取數據以及查詢、更新和管理關係數據庫系統。
二、SQL的特點
(1)、SQL不是某個特定數據庫供應商專有的語言。
(2)、SQL簡單易學。
(3)、SQL可靈活使用其語言元素,可以進行非常複雜和高級的數據庫操作。
(4)、SQL語句不區分大小寫。
三、SQL的組成
(1)、數據定義語言(DDL)
1、數據定義語言包括:(
填空題
)CREATE:用於創建數據庫或數據庫對象。
ALTER:用於對數據庫或數據庫對象進行修改。
DROP:用於刪除數據庫或數據庫對象。2、數據定義語言主要用於對數據庫及數據庫中的各種對象進行創建、刪除、修改等操作。
(2)、數據操作語言(DML)
1、數據操作語言包括:(
填空題
)SELECT:從表或視圖檢索數據。
INSERT :將數據插入到表或視圖中。
UPDATE:修改表或視圖中的數據。
DELETE:從表中或視圖中刪除數據。
2、數據操作語言主要用於操作數據庫中各種對象,特別是檢索和修改數據。
(3)、數據控制語言(DCL)
1、數據控制語言包括:(
填空題
)GRANT:用於授予權限。
REVOKE:用於收回權限。
2、數據控制語言主要用於安全管理。
(4)、嵌入式和動態SQL規則,SQL調用和會話規則。
第二節 MySQL知識
MySQL是一個關係數據庫管理系統,具有C/S體系結構
MySQL的特點:
體積小,速度快、開發源代碼、遵循GPL
在MySQL中一個關係對應一個基本表,一個或多個基本表對應一個存儲文件,一個表可以有若干索引,存儲文件的邏輯結構組成了MySQL的內模式。
一、MySQL使用基礎
(1)、兩種架構方式:LAMP、WAMP
二、MySQL中的SQL
(1)、常量、變量、運算符、表達式、函數、流程控制語句和註解等。
(2)、常量分以下幾類:(選擇題、填空題
)
常量:在程序運行過程中值不變的量。
字符串常量:用單引號或雙引號括起來的字符序列。
一個十六進制值通常指定爲一個字符串常量,每對十六進制數字被轉換爲一個字符,其最前面有一個大寫字母“X”或小寫字母“x”。
字符串常量、數值常量、十六進制常量、時間日期常量、位字段值、布爾值、NULL值
(3)、變量:用於臨時存儲數據,分爲用戶變量和系統變量。(簡答題)
用戶變量前常添加一個符號@,用於將其與列名區分開。
大多數系統變量,必須在系統變量名稱前添加兩個@符號。
(4)、運算符:(簡答題)
算術運算符:+、-、*、/、%
位運算符:&、|、∧、~、>>、<<
比較運算符:=、>、<、>=、<=、<>、!=、<=>
邏輯運算符:NOT或!、AND或&&、OR或||、XOR
(5)、表達式:常量、變量、列名、複雜運算、運算符和函數的組合。
字符型表達式
數值型表達式
日期表達式
(6)、內置函數:(填空題)
數學函數(SORT()函數)、聚合函數、字符串函數(ASCII()函數,CHAR()函數)、日期和時間函數、加密函數(ENCODE()函數)、控制流程函數、格式化函數(FORMAT()函數)、類型轉換函數(CAST()函數)、系統信息函數(USER()、VERSION())
第三節 數據定義
SQL的數據定義功能包括數據庫模式定義、表定義、索引定義、視圖定義。
一、數據庫模式定義
數據庫模式定義:創建、選擇、修改、刪除、查看
(1)、創建數據庫
CREATE {DATABASE|SCHEMA}[IF NOT EXISTS] 數據庫名
[DEFAULT] CHARACTER SET [=] 數據庫字符集
[DEFAULT] COLLATE [=] 字符集的校對規則
(2)、選擇數據庫
USE 數據庫名
(3)、修改數據庫
ALTER {DATABASE|SCHEMA} 數據庫名
[DEFAULT] CHARACTER SET [=] 數據庫字符集
[DEFAULT] COLLATE [=] 字符集的校對規則
(4)、刪除數據庫
DROP {DATABASE|SCHEMA}[IF NOT EXISTS] 數據庫名
(5)、查看數據庫
SHOW { DATABASES | SCHEMAS }
[LIKE ‘數據庫名’ | WHERE 條件]
二、表定義
(1)、創建表
CREATE [TEMPORARY] TABLE 表名
TEMPORARY 臨時表
AUTO_INCREMENT 該列爲自增列 只能有一個
DEFAULT 默認值
NULL 空值
PRIMARY KEY 主鍵 必須唯一
(2)、更新表
ALTER TABLE 表名
語句 | 作用 |
---|---|
ADD COLUMN | 向表中增加新列,且可同時增加多個列 |
CHANGE COLUMN | 修改表中列的名稱或數據類型,且同時修改多個列 |
ALTER COLUMN | 修改或刪除表中指定列的默認值 |
MODIFY COLUMN | 修改指定列的數據類型,不能修改列名 |
DROP COLUMN | 刪除表中某列 |
RENAME TO | 爲表重新賦予一個表名 |
(3)、重命名錶、刪除表、查看錶
1、RENAME TABLE 原表名 TO 新表名
2、DROP [TEMPORARY] TABLE [IF NOT EXISTS] 表名
3、SHOW TABLES [LIKE ‘表名’ | WHERE 條件]
4、[DESCRIBE|DESC] 表名
三、索引定義
索引是指DBMS根據表中的一列若干列按照一定順序建立的列值與記錄行之間的對應關係表。
(1)、索引在邏輯通常分三類:
普通索引(INDEX)、唯一性索引(UNIQUE)、主鍵(PRIMARY KEY)
(2)、索引的創建
1、CREATE [UNIQUE] INDEX 索引名 ON 表名(索引列的描述)
例:
CREATE INDEX index_customers
ON mysql_test.customers(cust_name(3) ASC|DESC)該語句不能創建主鍵
2、CREATE TABLE
語句 作用 PRIMARY KEY 用於表示在創建新表的同時創建該表的主鍵 {INDEX或KEY} 用於表示在創建新表的同時創建該表索引 [CONSTRAINT] UNIQUE 用於表示在創建新表的同時創建該表的唯一性索引 [CONSTRAINT] FOREIGN KEY 用於表示在創建新表的同時創建該表的外鍵
3、ALTER TABLE
語句 作用 ADD [CONSTRAINT] PRIMARY KEY 用於表示在修改表的同時創建該表的主鍵 ADD {INDEX或KEY} 用於表示在修改表的同時爲該表添加索引 ADD [CONSTRAINT] UNIQUE 用於表示在修改表的同時爲該表添加唯一性索引 ADD [CONSTRAINT] FOREIGN KEY 用於表示在修改新表的同時爲該表添加外鍵
第四節 數據更新
一、插入數據
(1)、INSERT… VALUES…語句插入單行或多行元祖數據。
(2)、INSERT… SET…語句插入部分列值數據。
(2)、INSERT… SELECT…語句插入子查詢數據。
第五節 數據查詢
SQL提供SELECT語句進行查詢等操作,其數學理論基礎是關係數據模型中對錶對象的一組關係運算,即選擇、投影和連接
一、SELECT語句
語句 作用 SELECT 用於指定輸出的來源 FROM 用於指定輸出的來源 WHERE 用於指定數據的查詢目標來源 GROUP BY 用於對檢索到的記錄進行分組 HAVING 用於指定組的選擇條件 ORDER BY 用於對查詢結果進行排序 聚合函數通常是數據庫系統中一類系統內置函數,常用於對一組值連接組合而成的結果。
DISTINCT或DISTINC TROW放在SELECT後面,則會消除結果集中的重複行。
二、連接查詢
(1)、交叉連接,又稱笛卡兒積,使用CROSS JOIN 來連接兩張表。
(2)、內連接,使用INNER JOIN或JOIN…ON…,通常INNER省略。(簡答題)
1、等值連接(相等連接),等值連接條件中包含一個主鍵和一個外鍵。
2、非等值連接(不等連接),使用除運算符”=“之外的比較運算符。
3、自連接
(3)、外連接
1、左外連接(左連接,左邊表爲基表,右邊表爲參照表),LEFT OUTER JOIN或LEFT JOIN
2、右外連接(右連接,右邊表爲基表,左邊表爲參照表),RIGHT OUTER JOIN或RIGHT JOIN
三、條件查詢
(1)、BETWEEN…AND…
查詢兩個值之間所有的值。
(2)、IN()
查詢括號裏面所有滿足條件的值。
(3)、子查詢
表子查詢,結果集是一個表
行子查詢,結果集是帶有一個或多個值的一行數據。
列子查詢,結果集是一列數據,可以有多行,但是每行只有一個值。
標量子查詢,結果集僅僅是一個值。
(4)、結合關鍵字“IN”使用的子查詢
使用該子查詢主要用於判定一個給定值是否存在於在子查詢的結果集中,其語法是:
expression IN (subquery),這裏通常只能返回一列數據。
(5)、結合比較運算符使用的子查詢
關鍵字:“ALL”,“SOME”,“ANY”
(6)、結合關鍵字“EXIST”使用的子查詢
使用該子查詢主要用於判定子查詢的結果集是否爲空。其語法是:
EXIST (subquery)
四、GROUP BY 查詢
GROUP BY 列名 [ASC|DESC]…[WITH ROLLUP]
注:WITH ROLLUP各分組的彙總行
五、HAVING查詢
HAVING 過濾條件
HAVING與WHERE的差異
1)、WHERE子句主要用於過濾數據行,而HAVING子句主要用於過濾分組。
2)、HAVING子句中的條件可以包含聚合函數,而WHERE子句中則不可以。
3)、WHERE子句會在數據分組前進行過濾,HAVING子句則會在數據分組後進行過濾。
六、ORDER BY查詢
ORDER BY GROUP BY 排序產生的輸出 分組行,但輸出可能不是分組的排序 任意列都可以使用 只可能使用選擇列或表達式列 不一定需要 若與聚合函數一起使用列或表達式,則必須使用
七、LIMIT(MySQL中結果集中第一行的偏移量爲0)
(1)、offset,從第幾行取數據,row_count,指定返回數據的行數。
(2)、取從第5位客戶開始的3位客戶的ID號和姓名信息。
LIMIT offset,row_count
第一種:LIMIT 4,3
LIMIT row_count OFFSET offset
第二種:LIMIT 3 OFFSET 4
第六節 視圖
外模式對應到數據庫中的概念就是視圖
視圖是數據庫中的一個對象,它是數據庫管理系統提供給用戶的以多種角度觀察數據庫中數據的一種重要機制。
視圖是從一個或多個表或其他視圖通過查詢語句導出的表,包含一系列數據列和若干數據行。
(1)、視圖與基本表的區別:(簡答題)
1)、視圖不是數據庫中的真實表,而是一張虛擬表,其結構和數據是建立在對數據庫中真實表的查詢基礎上。
2)、視圖的內容是由存儲在數據庫中進行查詢操作的SQL語句來定義的,它的列數據與行函數
均來自於定義視圖的查詢所引用的真實表,數據是引用視圖生成的。
3)、視圖不是以數據集的形式存儲在數據庫中,它所對應的數據實際上是存儲在視圖所引用的真實表中。
4)、視圖是用來查看存儲在別處的數據的一種虛擬表,而其自身並不存儲數據。
(2)、使用視圖的優點有:
集中分散數據、簡化查詢語句、重用SQL語句、保護數據安全、共享所需數據、更改數據格式
(3)、創建視圖
CREATE VIEW 視圖名
AS
SELECT語句
CASCADED 它會對所有視圖進行檢查
LOCAL 使CHECK OPTION 只對定義的視圖進行檢查。
(4)、更新視圖表
視圖中的行和基本表中的行之間具有一對一的關係
1、視圖用於查詢檢索,主要體現在以下應用中:
利用視圖簡化複雜的表連接
使用視圖重新格式化檢索出的數據
使用視圖過濾不想要的數據。