第三章--關係數據庫標準語言SQL(一)

一、SQL概述

SQL的特點

  1. 綜合統一
  2. 高度非過程化
  3. 面向集合的操作方式
  4. 以一同一種語法結構提供兩種使用方法
  5. 語言簡潔,易學易用
SQL功能 動詞
數據定義 CREATE,DROP,ALTER
數據查詢 SELECT
數據操縱 INSERT,UPDATE,DELETE
數據控制 CRANT,REVOKE

SQL的操作涉及到模式和外模式,涉及不到內模式

二、學生-課程數據庫

本章節用學生課程數據庫爲例講解sql各種操作

  • 學生表:Student(Sno,Sname,Ssex,Sage,Sdept)(學號,姓名,性別,年齡,所在系)
  • 課程表:Course(Con,Cname,Cpno,Ccredit),(課程號,課程名,先行課,學分)
  • 學生選課表:SC(Sno,Cno,Grade),(學號,課程號,成績)

三、數據定義

操作對象 創建 刪除 修改
模式 CREATE SCHEMA DROP SCHEMA
CREATE TABLE DROP TABLE ALTER TABLE
視圖 CREATE VIEW DROP VIEW
索引 CREATE INDEX DROP INDEX ALTER INDEX

(一)模式的定義與刪除

  • 定義模式
    CREATE SCHEMA<模式名> AUTHORIZATION<用戶名>;
    【注意】:能創建模式的用戶擁有DBA權限,或者獲得DBA授予的CREATE SCHEMA權限
    定義模式實際上是定義一個命名空間,在這個空間上可以進一步定義該模式包含的數據庫對象,如基本表,視圖和索引等
    示例:示例
  • 模式的刪除
    DROP SCHEMA<模式名><CASCADE|RESTRICT>
    CASCADE(級聯):表示在刪除模式的同時把該模式中所有的數據庫對象全部刪除
    RESTRICT(限制):表示若模式中已定義下屬的數據庫對象(表,視圖)時,拒絕該刪除語句的執行
    在這裏插入圖片描述

(二)基本表的定義語句格式

CREATE TABLEV表名〉(<列名><數據類型>[列級完整性約束條件]
[,<列名><數據類型>[列級完整性約束條件]]
[,<表級完整性約束條件>]);
列級完整性約束條件:涉及相應屬性列的約束條件
表級完整性約束條件:涉及一個或多個屬性列的約束條件

  1. 定義基本表
    常用完整性約束
    主碼約束:PRIMARY KEY
    唯一性約束:UNIQUE
    非空值約束:NOT NULL
    參照完整性約束
    【注】主碼不可爲空,唯一性約束可以爲空
    示例:
    在這裏插入圖片描述
  2. 修改基本表
    ALTER TABLE<表名>
    [ADD <新列名><數據類型>[完整性約束]]
    [ADD<表級完整性約束>]
    [DROP <列名>[CASCADE|RESTRICT]]
    [DROP <完整性約束名>[RESTRICT | CASCADE ]]
    [MODIFY<列名><數據類型>];
    示例:
    在這裏插入圖片描述
  3. 刪除基本表
    DROP TABLE<表名>
    基本表刪除–>數據,表上的索引都刪除,視圖會保留但無法引用
    刪除基本表時,系統會從數據字典中刪去有關該基本表及其索引的描述

(三)建立與刪除索引

建立索引是加快查詢速度的有效手段

DBA 或表的屬主根據需要建立,有些DBMS自動建立以下列上的索引
PRIMARY KEY
UNIQUE
維護索引:DBMS自動完成
使用索引:DBMS自動選擇是否使用索引以及使用哪些索引

  1. 建立索引
    CREATE [UNIQUE] [CLUSTER] INDEX <索引名>
    ON<表名>(<列名>[<次序>][,<列名><次序>]]…);
    索引可以建立在一列或多列上,各列之間用逗號分隔
    用<次序>指定索引值的排列次序,升序:ASC,降序:DESC,缺省值:ASC
    UNIQUE:表名此索引的每一索引值只對應唯一的數據記錄
    CLUSTER:聚簇索引
    示例:

在這裏插入圖片描述
聚簇索引:建立這個索引後,基表中的數據也需要按照指定值得升序或降序存放
2. 刪除索引
DROP INDEX<索引名>
刪除索引時,系統會從數據字典中刪去有關該索引的描述

四、數據查詢

  • 查詢語句概述
    語句格式
    在這裏插入圖片描述
    SELECT子句:指定要顯示的屬性列
    FROM:指定查詢對象(基本表或視圖)
    WHERE:指定查詢條件
    GROUP BY:對查詢結果按指定列的值分組,該屬性列值相等的元組爲一個組,通常會在每組中用集函數
    HAVING短語:篩選出只有滿足指定條件的組
    ORDER BY:對查詢結果按照指定列值得升序或降序排序
    【注】首先按WHERE篩選,然後按照GROUP BY分組,然後是HAVING。然後是ORDER BY

(一)單表查詢

  1. 選擇表中的若干列
  • 查詢經過計算的值
    在這裏插入圖片描述
  1. 選擇表中的若干元組
  • 消除重複取值的行
    用DISTINCT
    如:SELECT DISTINCT Sno
    FROM SC;
  • 查詢滿足條件的元組
    通過WHERE來實現
    在這裏插入圖片描述
    1)比較大小
    在這裏插入圖片描述
    2)確定範圍
    用BETWEEN…AND…和NOT BETWEEN…AND…,其中BETWEEN後跟範圍的下限,AND後跟範圍的上限
    例:
    在這裏插入圖片描述
    3)確定集合
    用IN 和NOT IN
    例:
    在這裏插入圖片描述
    4)字符匹配
    用LIKE 實現 [NOT] LIKE’<匹配串>’[ESCQPE’<換碼字符>’]
    其中<匹配串>:指定匹配模板
    當匹配模板不含通配符時,可以用=取代LIKE ,用!=或<>取代NOT LIKE
  • 通配符
    %:代表任意長度字符串
    _ 代表任意單個字符
    ESCAPE 短語:後面跟換碼字符,爲了使字符本身含有的%與_跟通配符不衝突
    例:
    在這裏插入圖片描述
    在這裏插入圖片描述
    5)涉及空值的查詢
    在這裏插入圖片描述
    6)多重條件查詢
    邏輯運算法ADN和OR可用來連接多個查詢。AND的優先級高於OR,但用戶可以用括號改變優先級
    例:
    在這裏插入圖片描述
  1. 對查詢結果排序
    用戶可以用ORDER BY子句對查詢結果按照一個或多個屬性列的升序(ASC)或降序 (DESC)排列,默認值爲升序。
    在這裏插入圖片描述
  2. 使用集函數
COUNT(*) 統計元組個數
CONUT(列名) 統計一列中值得個數
SUM 計算一列值的總和
AVG 平均值
MAX 最大值
MIN 最小值

例:
在這裏插入圖片描述
5. 對查詢結果分組
使用GROUP BY 子句分組
分組方法:按指定的一列或多列值分組,值相等的爲一組
使用GROUP BY後,SELECT子句的列名列表後只能出現分組函數和集哈數
可以試用HAVING短語篩選出最終輸出結果在這裏插入圖片描述
HAVING與WHERE的區別:作用對象不同,WHERE作用於基表或者視圖,從中選擇滿足條件的元組;HAVING 作用於組,從中選擇滿足條件的組
例:
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章