国产亚洲精品福利在线无卡一,国产精久久一区二区三区,亚洲精品无码国模,精品久久久久久无码专区不卡

當前位置: 首頁 > news >正文

企業(yè)營銷網(wǎng)站建設規(guī)劃百度網(wǎng)站優(yōu)化公司

企業(yè)營銷網(wǎng)站建設規(guī)劃,百度網(wǎng)站優(yōu)化公司,網(wǎng)站開發(fā)實戰(zhàn) 王,濰坊專業(yè)網(wǎng)站建設哪家便宜文章目錄 三、SQL語言1 概述2 數(shù)據(jù)定義(DDL)2.1 定義數(shù)據(jù)庫2.2 定義基本表2.3 修改基本表2.4 刪除基本表 3 數(shù)據(jù)操作(DML)3.1 數(shù)據(jù)查詢3.1.1 單表查詢3.1.2 連接查詢3.1.3 嵌套查詢3.1.4 集合查詢 3.2 數(shù)據(jù)更新3.2.1 插入數(shù)據(jù)3.2.2 修改數(shù)據(jù)3.2.3 刪除數(shù)據(jù) 4 數(shù)據(jù)控制(DCL)5 視…

文章目錄

  • 三、SQL語言
    • 1 概述
    • 2 數(shù)據(jù)定義(DDL)
      • 2.1 定義數(shù)據(jù)庫
      • 2.2 定義基本表
      • 2.3 修改基本表
      • 2.4 刪除基本表
    • 3 數(shù)據(jù)操作(DML)
      • 3.1 數(shù)據(jù)查詢
        • 3.1.1 單表查詢
        • 3.1.2 連接查詢
        • 3.1.3 嵌套查詢
        • 3.1.4 集合查詢
      • 3.2 數(shù)據(jù)更新
        • 3.2.1 插入數(shù)據(jù)
        • 3.2.2 修改數(shù)據(jù)
        • 3.2.3 刪除數(shù)據(jù)
    • 4 數(shù)據(jù)控制(DCL)
    • 5 視圖
      • 5.1 定義視圖
      • 5.2 刪除視圖
      • 5.3 查詢視圖
      • 5.4 更新視圖
    • 6 索引
      • 6.1 建立索引
      • 6.2 刪除索引
      • 6.3 一般準則
    • 7 嵌入式SQL

三、SQL語言

1 概述

  • 什么是SQL語言?

    Structured Query Language 結(jié)構(gòu)化查詢語言。所有關(guān)系數(shù)據(jù)庫產(chǎn)品的標準。

  • SQL語言分類:

    • DDL:數(shù)據(jù)定義語言
    • DML:數(shù)據(jù)操作語言(有些教材分為數(shù)據(jù)查詢和數(shù)據(jù)操縱)
    • DCL:數(shù)據(jù)控制語言
    • INDEX(索引)、VIEW(視圖)、嵌入式SQL
  • SQL語言的特點:

    1. 綜合統(tǒng)一
    2. 高度非過程化:用戶只需提出"做什么",而不是"怎么做"
    3. 面向集合的操作方式
    4. SQL語言可以嵌入到高級語言程序中
  • SQL支持數(shù)據(jù)庫三級模式結(jié)構(gòu):

    • 基本表(模式):一個表對應一個存儲文件
    • 視圖(外模式):是一個虛表,由基本表導出
    • 存儲文件(內(nèi)模式)

2 數(shù)據(jù)定義(DDL)

定義表、定義視圖、定義索引。包括創(chuàng)建、刪除、修改操作。

2.1 定義數(shù)據(jù)庫

  • 注意:所有的表都必須依賴數(shù)據(jù)庫而存在,所以在定義表之前要先創(chuàng)建一個數(shù)據(jù)庫。

    CREATE DATABASE containerName; -- 創(chuàng)建一個容器
    USE containerName; -- 使用指定的數(shù)據(jù)庫
    
  • 數(shù)據(jù)庫中的文件分為數(shù)據(jù)文件(又分為主數(shù)據(jù)文件mdf,次數(shù)據(jù)文件ndf)與事務文件(ldf)

  • 數(shù)據(jù)庫維護:

    -- 修改數(shù)據(jù)庫名
    ALTER DATABASE test modify name= test_1
    -- 刪除數(shù)據(jù)庫
    DROP DATABASE dbtest
    -- 修改數(shù)據(jù)庫 sjkDB 中數(shù)據(jù)文件的初始大小,將其初始大小改為 9MB,最大為120MB
    ALTER DATABASE sjkDB
    MODIFY FILE ( NAME=sjkDB_data, SIZE=9, MAXSIZE=120)
    -- 為數(shù)據(jù)庫添加日志文件
    ALTER DATABASE sjkDB
    ADD LOG FILE
    ( NAME=sjkDBlog1, FILENAME='E:\teaching\sjkDBlog1.ldf', SIZE=3, MAXSIZE=20, FILEGROWTH=1 )
    

2.2 定義基本表

一個表必須包括:表名、屬性名、屬性數(shù)據(jù)類型、完整性約束

  • 創(chuàng)建基本表的語法

    []里的內(nèi)容表示可以省略,但是最基本的必須有主鍵PRIMARY KEY

    CREATE TABLE 表名 (列名1 數(shù)據(jù)類型 [約束], -- []里的內(nèi)容表示可以不寫列名2 數(shù)據(jù)類型 [約束],...列名N 數(shù)據(jù)類型 [約束],...其他表級完整性約束
    );
    
  • 常用的數(shù)據(jù)類型

    數(shù)據(jù)類型描述
    CHAR(n)定長為n的字符串,不足長度會用空格填充
    VARCHAR(n)最大長度為n的變長字符串,不足的不會自動補空格
    INT, SMALLINT, BIGINT長整數(shù) (4字節(jié))、短整數(shù) (2字節(jié))、大整數(shù) (8字節(jié))
    BIT只能是0或1
    DECIMAL(p,d)精確的小數(shù)類型,p表示總數(shù)字位數(shù),d表示小數(shù)位數(shù)
    FLOAT(n)可選精度浮點數(shù),n表示總位數(shù),通常指的是存儲精度
    DATE日期,格式為YYYY-MM-DD(年-月-日)
    TIME時間,格式為HH:MM:SS(時:分:秒)
    DATETIME日期和時間的組合,通常格式為YYYY-MM-DD HH:MM:SS
  • 常用的完整性約束

    • 主鍵約束:PRIMATY KEY
    • 參照完整性約束(外鍵-另一個表的主鍵):FOREIGN KEY … REFERENCES …
    • 唯一性約束:UNIQUE
    • 非空值約束:NOT NULL
    • 自定義約束:CHECK

    主鍵和唯一性的異同:相同點是每列中不能有重復的值;不同點是主鍵不能為空,而唯一性約束可以為空,且一個表中只能有一個主鍵約束,但可以有很多個唯一性約束。

  • 表級完整性約束寫法:如果完整性涉及道多個屬性列必須定義在表級上

    寫在所定義表的所有列之后

    • 多列組成的主鍵

      PRIMARY KEY(列名1,列名2,...)
      
    • 定義外鍵:當前表的某列是其他表的主鍵

      FOREIGN KEY(當前表的列名) REFERENCES 參照的表名(參照表的主鍵)
      
    • 設置外鍵并添加約束

      foreign key (course_id) references course(course_id)on delete set null -- 當另一個表中刪除時設為空
      
    • ON DELETE CASECATE 級聯(lián)刪除(刪的更深)

    • ON UPDATE CASECATE 級聯(lián)修改

2.3 修改基本表

  • 基本語法

    1. 添加 ADD

      -- 添加整列
      ALTER TABLE 表名 ADD COLUMN 列名 數(shù)據(jù)類型 [約束];
      -- 添加約束
      ALTER TABLE 表名 ADD 約束類型(列名);
      
    2. 刪除 DROP

      -- 刪除某列
      ALTER TABLE 表名 DROP COLUMN 列名;
      -- 刪除主鍵約束
      ALTER TABLE 表名 DROP PRIMARY KEY;
      -- 刪除某列約束
      ALTER TABLE 表名 DROP CONSTRAINT 約束名;
      -- 刪除某列約束(SQL Server)
      ALTER TABLE 表名 DROP CONSTRAINT 約束名(列名);
      
    3. 更新 MODIFY

      -- 修改某列數(shù)據(jù)類型
      ALTER TABLE 表名 MODIFY COLUMN 列名 數(shù)據(jù)類型;
      -- 修改列名
      ALTER TABLE 表名 RENAME COLUMN 舊列名 TO 新列名;
      -- 修改表名
      ALTER TABLE 舊表名 RENAME TO 新表名;
      -- 設置默認值
      ALTER TABLE 表名 ALTER COLUMN 列名 SET DEFAULT 默認值;
      -- 取消默認值
      ALTER TABLE 表名 ALTER COLUMN 列名 DROP DEFAULT;
      

2.4 刪除基本表

  • 刪除基本表后,磁盤中對該表的描述,索引,數(shù)據(jù)都會被刪去,視圖還保留,但無法引用。

  • 語法

    DROP TABLE 表名
    
  • ON DELETE CASECATE 級聯(lián)刪除(刪的更深)

  • ON UPDATE CASECATE 級聯(lián)修改

3 數(shù)據(jù)操作(DML)

3.1 數(shù)據(jù)查詢

  • 基本語法

    SELECT1,2,... -- 指定顯示的列
    FROM1,2,... -- 指定查詢對象
    WHERE 條件 -- 查定查詢條件
    GROUP BY 分組列名 HAVING 條件 -- 對查詢結(jié)果按指定列進行分組
    ORDER BY 排序列名 -- 對查詢結(jié)果指定升序/降序
    

    Tips:先執(zhí)行FROM 再執(zhí)行后面的子句 最后才執(zhí)行SELECT

3.1.1 單表查詢

單表查詢僅涉及一張表,是最簡單的查詢操作

基本操作

  • 查詢某些列

    SELECT1,2,... FROM 表名
    
  • 查詢所有列

    SELECT * FROM 表名 -- 按照原始順序查詢。也可以把所有列名列出來,可以指定順序查詢
    
  • 查詢表達式值

    -- 例:查詢學生的出生年份
    SELECT year(getdate())-sage FROM student -- year(getdate())是系統(tǒng)內(nèi)置函數(shù)      
    
  • 給查詢到的列起別名

    給列起別名并不會影響數(shù)據(jù)庫中原來的名字

    SELECT 列名 as 列別名 FROM 表名 -- as可以省略,別名有空格,必須寫單引號
    
  • 嵌入字符串:SELECT后面還可以跟字符串,這樣查詢出來的結(jié)果每一行都多出來一列指定的字符串

    SELECT 列名 'hello' FROM 表名 -- 結(jié)果:第二列所有值都為hello
    

聚集函數(shù)

聚集函數(shù)用于選取出數(shù)據(jù)后對數(shù)據(jù)進行統(tǒng)計操作

  • 主要的集函數(shù)有:

    COUNT統(tǒng)計個數(shù);SUM計算總和;AVG求平均值;MAX求最大值;MIN求最小值。統(tǒng)計時忽略NULL。

  • 基本語法:

    -- 統(tǒng)計某列的所含值得個數(shù)
    SELECT COUNT(列名) FROM 表名
    

條件查詢-WHERE

  • 去掉重復的元組(行)

    關(guān)鍵字DISTINCT:去重 ALL:顯示所有(默認)

    SELECT DISTINCT 列1,列2,... FROM 表名
    
  • 選擇運算:通過WHERE Condition子句實現(xiàn)

    • 比較大小:= > < >= <= != or <> !> !<

      SELECT 列名 FROM 表名 where 列名='name' -- name是指定字符串
      
    • 確定范圍:BETWEEN 下限 AND 上限 NOT BETWEEN 下限 AND 上限

      -- 例子1:查詢年齡在10-20之間的學生姓名,年齡
      SELECT sname,sage FROM student WHERE sage BETWEEN 10 AND 20
      -- 例子2:查詢年齡不在在10-20之間的學生姓名,年齡
      SELECT sname,sage FROM student WHERE sage NOT BETWEEN 10 AND 20
      
    • 確定謂詞:IN <值表> NOT IN <值表>

      表示所查詢的表在元組中某列的值在<值表>當中

      -- 查詢計算機系、數(shù)學系的學生姓名
      SELECT snam FROM student WHERE Sdept IN ('CS','MA')
      
    • 字符串匹配:LIKE '匹配串' NOT LIKE '匹配串'

      模糊匹配,配合通配符使用才有意義 %-任意長度的字符串 _-任意單個長度字符

      -- 查詢姓劉學生的姓名,年齡
      SELECT sname,sage FROM student WHERE Sname LIKE '劉%'
      

      ESCAPE短語:用戶查詢字符串中有_或%,要使用換碼字符對通配符進行轉(zhuǎn)義

      -- 查詢以DB_開頭的課程號和學分
      SELECT Cno,Ccredit FROM Course WHERE Cname LIKE 'DB\_%' ESCAPE '\' -- 這里_不再是通配符,而是普通的字符串
      
    • 涉及空值的查詢:IS NULL IS NOT NULL

      注意:不能用=NULL來代替

      -- 查詢學生成績?yōu)榭盏膶W號和課程號
      SELECT Sno,Cno FROM SC WHERE Grade IS NULL
      
  • 多重條件查詢:使用關(guān)鍵字ANDOR將條件子句連接起來。AND優(yōu)先級高于OR

    -- 例子1:查詢年齡在10-20之間的學生姓名,年齡
    SELECT sname,sage FROM student WHERE sage>=10 AND sage<=20
    -- 例子2:查詢年齡不在在10-20之間的學生姓名,年齡
    SELECT sname,sage FROM student WHERE sage<10 OR sage>20
    

分組查詢-GROUP BY

  • 注意:SELECT后面可以是分組依據(jù)的列,也可以是聚集函數(shù),但不能是其他的列名!

    為什么呢?比如我按課程號分組,選這個課程的人數(shù)超過2人,那么我查詢學生學號時,這兩個人的學號應該顯示哪個呢,這樣就會沖突。

  • 基本語法

    SELECT [分組列名],[聚集函數(shù)] FROM 表名 GROUP BY 分組列名
    
  • GROUP BY和WHERE配合使用

    -- 求各個課程號及相應課程成績>90分的學生人數(shù)
    SELECT Cno,COUNT(Sno) FROM SC WHERE Grade>90 GROUP BY Cno
    
  • HAVING對分組以后的結(jié)果篩選

    • 語法

      SELECT [分組列名],[聚集函數(shù)] FROM 表名 GROUP BY 分組列名 HAVING 條件
      -- HAVING后面的意思是,只有滿足某些條件的組才會被留下來
      
    • 例子1:查詢選修了3門以上課程的學生學號

      SELECT Cno FROM SC GROUP BY Cno HAVINF COUNT(*)>3
      
    • 例子2:查詢3門課程90分以上的學生學號和其90分以上的課程數(shù)

      SELECT Cno,COUNT(*) 
      FROM SC WHERE Grade>90 -- 先把表中90分的留下來
      GROUP BY Cno HAVINF COUNT(*)>3 -- 按學號分組,分完組后組中個數(shù)大于3的組才留下來
      
  • WHERE和HAVING的區(qū)別

    • WHERE是對整個表進行篩選,后不可跟聚合函數(shù)
    • HAVING是對分組之后的結(jié)果進行篩選,后可跟聚合函數(shù)

排序子句-ORDER BY

將查詢得到的結(jié)果排序后再顯示。默認是升序ASC,降序DESC

  • 基本語法

    SELECT 列名... FROM 表名 WHERE 條件 ORDER BY 主排序列 排序方式,次排序列 排序方式
    -- 如果是升序 ASC可以不寫
    
  • 注意:只能對最終的查詢結(jié)果排序,不能對中間結(jié)果排序。

3.1.2 連接查詢

同時涉及多個表的查詢。用來連接兩個表的條件稱為連接謂詞。多個表中有相同的列要加前綴以示區(qū)別,如果是等值連接的列則不用。

交叉連接

  • 定義:廣義笛卡爾積。把表1的每一行和表2的每一行都連接一遍;很少使用,無任何連接條件,所以無意義。

  • 語法:兩種方式

    • 直接用逗號把兩表隔開

      SELECT Student.* SC.* FROM Student,SC
      
    • 使用CROSS JOIN關(guān)鍵字把兩表連接起來

      SELECT Student.* SC.* FROM Student CROSS JOIN SC
      

等值連接

  • 定義:交叉連接結(jié)果的篩選。大部分情況是同名列相等,一般是主鍵與外鍵相等。

  • 語法:使用=號連接相等的結(jié)果。并且注意多個表的相同列名要加上前綴。

    -- 查詢每個學生及其選修課程的情況
    SELECT Student.* SC.* FROM Student,SC WHERE Student.Sno=SC.Sno
    
  • 注:兩個表WHERE后就跟一個條件即可進行等值連接,3個表則要跟2個條件,以此類推。

  • 復合連接就是WHERE后面有好多個AND加上條件罷了

自身連接

  • 定義:一個表與自身連接

  • 語法:需要給表起別名以示區(qū)別;必須加前綴。

  • 例子:查詢每一門課程的先修課程名

    SELECT a1.Cname,a2.Cname -- 從新的表中選特定的列
    FROM Course a1,Course a2 -- 先把兩個表拼成一排
    WHERE a1.Cpno=a2.Cno -- 篩選出符合條件的連接起來放在一個新的表里 Cpno是先修課程學號
    

內(nèi)連接

其實是等值連接,只不過兩個表之間用JION隔開而不是,

外連接

把被舍棄的值,也保留在結(jié)果中,但是要加NULL

  • 左外連接

    -- 語法
    SELECT 列名... FROM1 LEFT OUTER JOIN2 ON 查詢條件
    
  • 右外連接

    -- 語法
    SELECT 列名... FROM 表1 RIGHT OUTER JON 表2 ON 查詢條件 -- 如果右表沒有匹配的則列返回空值
    
  • 全外連接

    -- 語法
    SELECT 列名... FROM 表1 FULL OUTER JION 表2 ON 查詢條件
    

    image-20250107022240008

3.1.3 嵌套查詢
  • 查詢塊:一個SELECT語句稱為一個查詢塊

  • 嵌套查詢:將一個查詢塊嵌套在另一個查詢塊的WHERE或HAVING子句中

  • 兩種方式:

    1. 不相關(guān)子查詢:子查詢的查詢條件不依賴于父查詢。

      由里往外,先執(zhí)行完子查詢再執(zhí)行父查詢。子查詢的結(jié)果用于建立父查詢的查找條件。

    2. 相關(guān)子查詢:子查詢的查詢條件依賴于父查詢

      執(zhí)行一行外層查詢就會執(zhí)行完整一次子查詢,然后把內(nèi)層查詢的結(jié)果代替子查詢作用于外層查詢的條件。

  • 嵌套查詢的謂詞:

    1. IN:子查詢的結(jié)果是一個集合

      -- 例子:查詢了選修課程號為2的學生姓名
      SELECT Sname FROM Student WHERE Sno IN  -- ②再通過學號查學生姓名
      (SELECT Sno FROM SC WHERE Cno=2) -- ①子查詢的結(jié)果,先把課程號為2的學生學生求出來
      
    2. 比較運算符:子查詢的結(jié)果是單個值。子查詢一定跟在比較運算符之后。

    3. ANY或ALL:子查詢的結(jié)果是多個,配合比較運算符使用。

      ANY:小于子查詢?nèi)我庖粋€ >ALL:大于子查詢的所有

      -- 語法
      SELECT 列名... FROM 表名 WHERE 列名>ALL (子查詢)
      
    4. EXISTS:子查詢的結(jié)果是空或者非空

      EXISTS的值:如果子查詢?yōu)榉强談t為True,空則為False。True表示當前行被選中,False則不被選中。

      NOT EXISTS則相反。

      例子:查詢選了1號課程的學生姓名
      SELECT Sname FROM Student S WHERE EXISTS -- 有返回值則為True被選中
      (SELECT * FROM SC C WHERE S.Sno=C.Sno AND Cno=1) -- 如果學選了一號課程則有返回值
      
  • 子查詢的限制

    • 不能使用ORDER BY子句
3.1.4 集合查詢
  • 并集 UNION

    會自動去掉重復的元組。

    <查詢塊> UNION <查詢塊>
    
  • 交集 INTERSECT

    大部分系統(tǒng)不提供,所以用戶要自己用別的方式來實現(xiàn)。用AND來實現(xiàn)。

  • 差集 EXCEPT

    大部分系統(tǒng)也不提供。

3.2 數(shù)據(jù)更新

3.2.1 插入數(shù)據(jù)

插入單個元組

  • 語法

    INSERT INTO 表名(列名1,列名2,...) VALUES(常量1,常量2,...)
    
  • 兩種情況

    • 沒有列名,則所有的數(shù)據(jù)項常量都必須有
    • 有列名,后面的數(shù)據(jù)項常量要與列名的順序匹配上
    • 考到了,背錯了,氣死!!

插入多個元組

  • 語法

    INSERT INTO 表名 VALUES(常量,常量,...),(常量,常量,...)
    

插入子查詢結(jié)果

  • 前提:子查詢的結(jié)果要與表的列關(guān)系對應上,否則要寫清楚列名

  • 語法

    INSERT INTO 表名 SELECT查詢塊
    

注意:執(zhí)行插入語句時不能破壞原表的完整性規(guī)則。

  • 實體完整性
  • 參照完整性
  • 用戶自定義完整性
    • 非空、非重復、值域范圍
3.2.2 修改數(shù)據(jù)
  • 功能:修改表中滿足WHERE子句條件的元組

  • 語法

    UPDATE 表名 SET 列名=表達式 WHERE 條件
    
  • 修改單個元組、修改多個元組

  • 帶子查詢的修改

    -- 例子:將計算機系全體學生成績置0
    UPDATE SC SET Grade=0 WHERE 'CS' = 
    (SELECT Sdept FROM Student WHERE Student.Sno=SC.Sno) -- 相關(guān)子查詢
    
3.2.3 刪除數(shù)據(jù)
  • 功能:刪除指定表中符合WHERE子句的元組

  • 語法

    DELETE FROM 表名 WHERE 條件
    
  • 注意:要滿足完整性規(guī)則。如果沒有WHERE將刪除整個表

  • 也有三種方式,刪除單個/多個元組。

  • 帶子查詢的刪除

    -- 例子:刪除計算機系學生的選課記錄
    DELETE FROM SC WHERE Sno IN 
    (SELECT Sno FROM Student WHERE Sdept=SC) -- 不相關(guān)子查詢
    
  • TRUNCATE也可以刪除表

    • DELETE是一行一行刪,當有很多行數(shù)據(jù)時效率低。執(zhí)行的是DML命令。
    • TRUNCATE是先DROP刪除整個表,再CREATE創(chuàng)建一個表,效率高。實際上是執(zhí)行了兩條DDL命令。

4 數(shù)據(jù)控制(DCL)

數(shù)據(jù)控制也稱為數(shù)據(jù)保護。包括四個方面:

  1. 安全性控制
    • DBA授權(quán),包括授權(quán)GRANT,回收權(quán)力REVOKE
  2. 完整性控制
    • 數(shù)據(jù)庫中數(shù)據(jù)的有效性、正確性、相容性
  3. 并發(fā)性控制
    • 多個用戶并發(fā)的對數(shù)據(jù)庫進行操作時,對他們加以控制、協(xié)調(diào),保證并發(fā)操作的正確執(zhí)行和數(shù)據(jù)庫的一致性。
  4. 恢復
    • 數(shù)據(jù)庫發(fā)生故障時,對數(shù)據(jù)庫進行恢復

5 視圖

視圖是虛擬表,可以從多個表中取出數(shù)據(jù)構(gòu)成虛擬表,目的是方便用戶操作、多角度理解數(shù)據(jù)保證邏輯獨立性、保證表的某些數(shù)據(jù)機密性;對應數(shù)據(jù)庫三級模式結(jié)構(gòu)的外模式。

5.1 定義視圖

  • 建立視圖

    就是把子查詢的結(jié)構(gòu)當作視圖的結(jié)構(gòu)

    CREATE VIEW 視圖名(列名1,列名2...) AS SELECT子查詢 WITH CHECK OPTION
    
  • 列名:如果不起則默認為子查詢的列名;基于多個表的視圖最好寫列名;查詢得到的數(shù)據(jù)中有表達式的列要起列名

  • SELECT語句:創(chuàng)建視圖時并不執(zhí)行,查詢視圖的時候才執(zhí)行,并且子查詢中必須有表的主鍵

  • WITH CHECK OPTION:可選項;要求透過視圖進習更新的時候要滿足子查詢的條件,防止這種通過視圖更新不屬于視圖范圍的數(shù)據(jù)

  • 基于視圖的視圖:AS后面查詢的對象是視圖

5.2 刪除視圖

  • 語法

    由該視圖導出的其他視圖要被顯示刪除,已經(jīng)無法使用。注意:刪除表時由該表導出的視圖也要顯示刪除。

    DROP VIEW 視圖名
    

5.3 查詢視圖

  • 查詢視圖的語法:與查詢基本表完全一樣。

  • 關(guān)鍵:視圖不存任何數(shù)據(jù),所以查詢視圖相當于查詢了基本表,只不過它更方便用戶操作。

  • 視圖實體化法:把中間的結(jié)果轉(zhuǎn)化為表

  • 視圖消解法(常用):把視圖定義的子查詢和用戶的查詢結(jié)合,轉(zhuǎn)化為等價的對表的查詢

  • 例子

    • V_SG視圖的定義

      CREATE VIEW V_SG(Sno,Gavg) AS SELECT Sno,AVG(Grade) FROM SC GROUP BY Sno;
      
    • 在V_SG視圖中查詢平均成績在90分以上的學生學號和平均成績

    • 對視圖的查詢

      SELECT Sno,Gavg FROM V_SG WHERE Gavg>90
      
    • 轉(zhuǎn)化為真實的表查詢

      SELECT Sno,AVG(Grade) FROM SC GROUP BY Sno HABING AVG(Grade)>90;
      
    • 視圖消解法局限:有些情況不能正確使用,比如上述例子,AVG聚集函數(shù)不能再WHERE子句中使用

5.4 更新視圖

包括刪除,修改,插入。

  • 同樣是轉(zhuǎn)化為更新表。視圖消解法(常用),試圖實體化表。
  • 視圖可更新的條件
    • 行列子集視圖:只取自一個表,且包含主鍵
    • 視圖不能包含聚合函數(shù)、GROUP BY 子句、DISTINCT 關(guān)鍵字(列不包含計算出來的結(jié)果)
    • 其他大多數(shù)視圖都不可更新

6 索引

對應三級模式的內(nèi)模式。涉及到磁盤上數(shù)據(jù)的存儲。簡單理解為書的目錄。

6.1 建立索引

  • 目的:加快查詢速度的有效手段。結(jié)合維護的代價和查詢的性能提升確定是否要創(chuàng)建索引。

  • 如何建立?

    當我創(chuàng)建表確定主鍵、唯一鍵時,數(shù)據(jù)庫會幫我們自動建立索引。維護索引也由數(shù)據(jù)庫自動完成。

  • 人為建立(唯一)索引:

    當不存在主鍵、唯一鍵時,建立索引才有意義

    CREATE UNIQUE INDEX 索引名 ON 表名(列名) 
    -- 表示按表的某列升序建立索引
    CREATE UNIQUE INDEX 索引名 ON 表名(列名 DESC) 
    -- 表示按表的某列降序建立索引
    CREATE UNIQUE NONCLUSTERED INDEX 索引名 ON 表名(列名) -- 非聚集索引
    
  • 人為建立(普通)索引:

    CREATE INDEX 索引名 ON 表名(列名)
    
  • 創(chuàng)建復合索引:

    CREATE UNIQUE INDEX 索引名 ON 表名(列名1 DESC,列名2 ASC) 
    
  • 什么是聚集索引?

    磁盤上按該索引的順序進行物理存儲的。一個表只有一個聚集索引,且不需要人為創(chuàng)建。

  • 什么是非聚集索引?

    不要求數(shù)據(jù)表的數(shù)據(jù)按照索引關(guān)鍵字順序排序。也就是說表的物理順序與索引關(guān)鍵字順序不同。

  • 什么是唯一索引?

    人為創(chuàng)建的索引。但是注意,為列創(chuàng)建索引時列索引關(guān)鍵字必須符合唯一性。

6.2 刪除索引

  • 語法

    DROP INDEX 索引名 ON

6.3 一般準則

  • 在經(jīng)常過濾,查詢的列上建立索引
  • 在不同值較少的列上不必要建立索引,如性別字段
  • 對于經(jīng)常存取的列避免建立索引

7 嵌入式SQL

  • SQL的兩種使用方式:

    • 在終端直接交互

    • 嵌入在高級語言

  • 嵌入式SQL的實現(xiàn)方式:

    源程序(高級語言+SQL) -> DBMS預處理 -> SQL轉(zhuǎn)化為函數(shù)調(diào)用的形式 -> 高級語言編譯程序(調(diào)用SQL數(shù)據(jù)庫) -> 執(zhí)行程序

http://aloenet.com.cn/news/46119.html

相關(guān)文章:

  • 怎么在網(wǎng)站上做視頻百度電腦版網(wǎng)頁
  • 設計一個網(wǎng)頁的策劃書怎么優(yōu)化網(wǎng)站排名才能起來
  • 做30個精品網(wǎng)站北京做網(wǎng)站的公司有哪些
  • 網(wǎng)站開發(fā)教育培訓百度排名點擊器
  • 假的建設銀行網(wǎng)站國際時事新聞2022最新
  • 制作書簽簡單又漂亮seo網(wǎng)站優(yōu)化怎么做
  • 設計公司調(diào)研報告怎么學seo基礎
  • 做網(wǎng)站開源互聯(lián)網(wǎng)推廣運營
  • meetsh網(wǎng)站建設營銷策劃公司介紹
  • 扒下來的網(wǎng)站怎么做修改seo教學視頻教程
  • 網(wǎng)站后臺出現(xiàn)亂碼網(wǎng)絡營銷推廣的方式
  • 網(wǎng)絡公司的名字優(yōu)化手機流暢度的軟件
  • 網(wǎng)店代運營怎么做廣東seo網(wǎng)站設計
  • 網(wǎng)站開發(fā)女生可以做嗎淘寶指數(shù)網(wǎng)站
  • 京東商城網(wǎng)站地址是多少今日最新的新聞
  • 旅游信息網(wǎng)站開發(fā)背景站內(nèi)關(guān)鍵詞排名優(yōu)化軟件
  • 建設部網(wǎng)站1667號北京seo外包平臺
  • 網(wǎng)站點擊率多少正常怎樣在百度做廣告宣傳
  • 湖北移動網(wǎng)站建設互聯(lián)網(wǎng)營銷的五個手段
  • 網(wǎng)站怎么做推廣和優(yōu)化seo推廣知識
  • 泰州網(wǎng)站建設多少錢北京環(huán)球影城每日客流怎么看
  • 做網(wǎng)站建設價格網(wǎng)絡軟文營銷案例3篇
  • 網(wǎng)站建設需要多少錢小江網(wǎng)頁設計seo網(wǎng)絡推廣外包公司
  • 網(wǎng)站開發(fā)需求書接推廣一般多少錢
  • 昆明房產(chǎn)網(wǎng)站建設seo全網(wǎng)營銷
  • 建設網(wǎng)站公司 優(yōu)幫云網(wǎng)站排名優(yōu)化專業(yè)定制
  • 哪些網(wǎng)站可以做調(diào)查賺錢廣告關(guān)鍵詞有哪些類型
  • 政府網(wǎng)站用的什么cms系統(tǒng)常州seo排名收費
  • 泉州seo-泉州網(wǎng)站建設公司正規(guī)推廣平臺有哪些
  • 外貿(mào)網(wǎng)站銷售方式好用搜索引擎排名