數據庫系統概論——第三章 關係數據庫標準語言SQL(二)

數據庫系統概論——第三章 關係數據庫標準語言SQL(二)

一、 索引的建立與刪除

  1. 建立索引的目的:加快查詢速度

  2. 關係數據庫管理系統中常見索引:
    (1)順序文件上的索引
    (2)b+樹索引
    (3)散列索引
    (4)位圖索引

  3. 特點:
    (1) b+樹索引具有動態平衡的優點
    (2)hash索引具有查找速度快的優點

  4. 誰可以建立索引
    (1)數據庫管理員DBA
    (2)表的屬主(建表的人)

  5. 誰來維護索引
    關係數據庫管理系統自動完成

  6. 使用索引
    DBMS自動選擇合適的索引作爲存取路徑,用戶不必也不能顯示的選擇索引。

  7. 建立索引

unique:此索引的一個索引值只對應唯一的數據記錄。
cluster:表示要建立的索引是聚簇索引

(1)創建三個表在這裏插入圖片描述
(2)爲學生課程數據庫中的student,course,sc表建立索引。student表按學號升序建唯一索引,course表按課程號升序建唯一索引,sc表按學號升序和課程降序建唯一索引。
在這裏插入圖片描述
(3)修改索引名

alter table 表名 rename index 舊名字 to 新名字

在這裏插入圖片描述
(4)刪除索引名

二、數據字典
數據字典是關係DBMS內部的一組系統表,它記錄了數據庫中所有定義信息:
(1)關係模式定義
(2)視圖定義
(3)完整性約束定義
(4)各類用戶對數據庫的操作權限
(5)統計信息等
關係DBMS在執行sql的數據定義語句信息時,實際上就是在更新數據字典表中的相應信息。

三、數據查詢
(1)select子句:指定要顯示的屬性列
(2)from子句:指定查詢對象(基本表或視圖)
(3)where子句:指定查詢條件
(4)group by子句:對查詢結果按指定列的值分組,
該屬性列值相等的元祖爲一個組。通常會在每組中作用聚集函數。
(5)having短語:只有滿足指定條件的組才予以輸出
(6)order by子句:對查詢結果表按指定列值的升序或降序排序。
在這裏插入圖片描述

選擇表中的若干列

  1. 查詢指定列
    在這裏插入圖片描述

  2. 查詢全部列

  3. 查詢經過計算的值
    select子句的<目標列表達式>不僅可以爲表中的屬性列,也可以是表達式

    在這裏插入圖片描述

  4. 使用列別名改變查詢結果的列標題
    在這裏插入圖片描述在這裏插入圖片描述

選擇表中的若干元組

  1. 消除取消重複的列
    all 和 distinct ,默認爲all
    在這裏插入圖片描述
  2. 查詢滿足條件的元組
    在這裏插入圖片描述
    (1)比較大小
    eg:查找計算機科學學院全體學生名單

    eg:查詢所有年齡在20歲以下的學生姓名及其年齡

    eg:查詢考試成績有不及格的學生的學號

    (2)確定範圍

between and
not between and

eg:查詢年齡在20~23歲(包括20歲和23歲)之間的學生的姓名、系別和年齡

eg:查詢年齡不在20-30歲之間的學生姓名、系別和年齡

(3)確定集合

in<值表>
not in <值表>

eg:查詢計算機科學系(CS)、數學系(MA)和信息系(IS)學生的姓名和性別。

(4)字符匹配

謂詞:【not 】like ‘<匹配串>’【escape‘<換碼字符>’】
匹配串:可以是一個 完整的字符串,也可以含有通配符%和_
%:代表任意長度(長度可以爲0)的字符串
_:代表任意單個字符

eg:查詢學號爲201215121的學生的詳細情況。

eg:查詢所有姓劉學生的姓名、學號和性別。

eg:查詢以"DB_"開頭,且倒數第3個字符爲 i的課程的詳細情況。

ESCAPE ‘\’ 表示“ \” 爲換碼字符

(5)涉及空值的查詢

is null
is not null

eg: 某些學生選修課程後沒有參加考試,所以有選課記錄,但沒 有考試成績。查詢缺少成績的學生的學號和相應的課程號。

(6)多重條件查詢

AND的優先級高於OR
可以用括號改變優先級

eg:查詢計算機系年齡在20歲以下的學生姓名。

  1. order by 子句

ORDER BY子句
可以按一個或多個屬性列排序
升序:ASC;降序:DESC;缺省值爲升序
默認爲升序
對於空值,排序時顯示的次序由具體系統實現來決定

eg:查詢選修了3號課程的學生的學號及其成績,查詢結果按分數降序排列。

eg:查詢全體學生情況,查詢結果按所在系的系號升序排列,同一系中的學生按年齡降序排列。

  1. 聚集函數

統計元組的個數:count(*)
統計一列中值的個數:count(【distinct|all】<列名>)
計算一列值的總和(此列必須爲數值型):SUM([DISTINCT|ALL] <列名>)
計算一列值的平均值(此列必須爲數值型):
AVG([DISTINCT|ALL] <列名>)
求一列中的最大值和最小值:
MAX([DISTINCT|ALL] <列名>)
MIN([DISTINCT|ALL] <列名>)

eg:查詢學生201215012選修課程的總學分數。

  1. group by 子句

細化聚合函數作用的對象
如果爲對查詢結果分組,聚合函數將作用於真個查詢結果
對查詢結果分組後,聚合函數將分別作用在每個組
按指定的一列或多列值分組,值相等的爲一組

eg:求各個課程號及相應的選課人數。

eg:查詢選修了3門以上課程的學生學號。

eg:查詢平均成績大於等於90分的學生學號和平均成績

having 短語與where子句的區別
作用對象不同
where子句作用於基表或視圖,從中選擇滿足條件的元組
having短語作用於組,從中選擇滿足條件的組

發佈了57 篇原創文章 · 獲贊 5 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章