數(shù)據(jù)庫 所有SQL語句收集

模式

定義模式實際上定義了一個命名空間互躬,在這個空間中 可以進一步 定義該模式包含的數(shù)據(jù)對象,例如基本表烫饼,視圖起趾,索引等

  • 創(chuàng)建模式
    CREATE SCHEMA <模式名> AUTHORIZATION 用戶名

  • 定義模式的同時,創(chuàng)建表隅肥,視圖竿奏,定義授權(quán)
    CREATE SCHEMA <模式名> AUTHORIZATION <用戶名> [<表定義子句> | <視圖定義子句>|<授權(quán)定義子句>]

  • 刪除模式
    DROP SCHEMA <模式名> <CASCADE | RESTRICT>
    CASCADE 級聯(lián)
    RESTRICT 限制


表創(chuàng)建修改刪除

  • 創(chuàng)建表
    CREATE TABLE <表名>(<列名> <數(shù)據(jù)類型> [列級完整性約束條件] [,<列名> <數(shù)據(jù)類型> [列級完整性約束]] [,<表級完整性約束條件>]);

  • 修改表:
    ALTER TABLE <表名> [ADD <新列名> <數(shù)據(jù)類型> [完整性約束]] [DROP <完整性約束名>] [ALTER COLUMN <列名> <數(shù)據(jù)類型>]

    • ADD: 添加新列和新的完整性約束條件
      ALTER TABLE CategoriesNew ADD Commission money null
    • DROP: 用戶刪除指定的完整性約束條件, 也可以用來刪除列
      ALTER TABLE CategoriesNew DROP COLUMN Sales_date
    • ALTER COLUMN 用戶修改原有的列定義腥放,包括修改列名和數(shù)據(jù)類型
      ALTER TABLE CategoriesNew ALTER COLUMN name varchar(20) NOT NULL
  • 刪除表:
    DROP TABLE <表名> [RESTRICT|CASCADE]

  • 清空表數(shù)據(jù):
    truncate table 表名稱

其他操作

  • 重命名表:
    exec sp_rename newPerson ,somePerson
  • 修改列名:
    exec sp_rename 'somePerson.name',newName ,'column'

復(fù)制表:

  • A. 復(fù)制整張表:(同時復(fù)制 表結(jié)構(gòu)和 數(shù)據(jù))
    select * into new_table from old_table

  • B. 復(fù)制表結(jié)構(gòu):
    select * into new_table from old_table where 1=2

  • C. 復(fù)制表內(nèi)容:
    insert into new_tab select * from old_table

  • . 修改identity列
    自增列不能直接修改泛啸,必須將原有ID列刪除,然后重新添加一列具有identity屬性的ID字段秃症。比如你要修改的字段名為ID:

alter table 表名 drop column ID
alter table 表名 add ID int identity(1,1)


視圖

  • 建立視圖:
    CREATE VIEW 視圖名 AS SELECT 列名1候址,列名2.列名3 FROM Student WHERE 條件

索引

  • 建立索引
    CREATE [UNIQUE][CLUSTER] INDEX <索引名> ON <表名> (<列名> [<次序>] [,<列名> [<次序>]]...);

例:
CREATE UNIQUE INDEX Stusno ON Student(Sno);
CREATE UNIQUE INDEX Coucno ON Course(Cno);
CREATE UNIQUE INDEX SCno ON SC(Sno ASC, Cno DESC)

  • 刪除索引:
    DROP INDEX <索引名>

索引實現(xiàn)的方式
B+ 樹 動態(tài)平衡
HASH 索引 查找速度快

關(guān)于 GROUP BY 和聚合函數(shù)

如果語句中有g(shù)roup by關(guān)鍵字,那么select后只能跟group by后出現(xiàn)的列种柑,或者是聚合函數(shù)
max() min() count(),sum(),avg()


表操作

單表數(shù)據(jù)查詢

  • 一般格式:
    SELECT [ALL|DISTINCT] <目標(biāo)列表達式> [,<目標(biāo)列表達式>]... FROM <表名或視圖名>[,<表名或視圖名>]... [WHERE <條件表達式>] [GROUP BY <列名1> [HAVING <條件表達式>]] [ORDER BY <列名2> [ASC|DESC]];

  • 單表查詢

    • 查詢指定列
      SELECT Sno,Sname FROM Student

    • 查詢?nèi)苛?br> SELECT * FROM Student

    • 查詢經(jīng)過計算的值
      SELECT Sname, 2004-Sage FROM Student

    • 指定別名
      SELECT Sname 姓名, 'Year of Birth:' 生日, 2004-Sage 年齡岗仑, LOWER(Sdept) 部門

    • 消除重復(fù)行
      SELECT DISTINCT Sno FROM SC

查詢滿足條件的元祖 where

  • 比較大小

= 等于 , > 大于, <小于, >= 大于等于, <= 小于等于, != 或 <> 不等于, !> 不大于, !< 不小于

  • 確定范圍

    BETWEEN...(下限)AND...(上限) 在什么范圍內(nèi)
    NOT BETWEEN...AND... 不在范圍之內(nèi)

  • 確定集合 in 屬性屬于指定集合

  • 字符匹配 [NOT] LIKE <匹配串> [ESCAPE <轉(zhuǎn)義字符>]

    • % 任意長度的字符串(包括0)
    • _ 任意單個字符
    • ESCAPE 轉(zhuǎn)義字符: 如 WHERE Cname LIKE 'DB\_%I__'ESCAPE'\'
  • 涉及空值的查詢 WHERE Grade IS NULL

  • 多重條件查詢 AND OR

  • 排序 ORDER BY

默認是升序 ASC
DESC 降序

  • 聚集函數(shù) (主要用于服務(wù) GROUP BY)
    COUNT([DISTINCT | ALL]) * 統(tǒng)計元祖?zhèn)€數(shù)
    COUNT([DISTINCT | ALL] <列名>) 統(tǒng)計列個數(shù)
    SUM([DISTINCT | ALL] <列名>) 列綜合(數(shù)值型)
    AVG([DISTINCT | ALL]<列名>) 列平均值 (數(shù)值型)
    MAX([DISTINCT | ALL] <列名>) 列 最大值
    MIN([DISTINCT | ALL] <列名>) 列 最小值
  • 分組 GROUP BY

多表數(shù)據(jù)查詢

鏈接查詢

  • 等值查詢 和 非等值查詢

    • 等值查詢: SELECT 表1的列,表2的列 FROME 表1, 表2 WHERE 表1.列=表2.列

    查詢 表一 和 表二 某個列相等條件下 的表信息(從表1 和 表2 摘出一些列 組成新的表)

  • 非等值查詢: SELECT 表1的列聚请,表2的列 FROME 表1, 表2 WHERE 表1.列>表2.列

    查詢 表一 的某個列 大于表2的某個列條件下 的表信息(從表1 和 表2 摘出一些列 組成新的表)
    非等值查詢的比較運算符有: >,<,!=,<>,!>,!<

  • 自身鏈接 (自己鏈接自己)
    如:
    SELECT FIRST.Cno, SECOND.Cpno FROM Course FIRST, Course SECOND WHERE FIRST.Cpno=Second.Cno


外鏈接

  • LEFT JOIN 左鏈接
  • RIGHT JOIN 右鏈接
  • INNER JOIN 內(nèi)鏈接

復(fù)合條件連接

AND OR

嵌套查詢

  • 帶有IN 謂詞的子查詢
    如:SELECT Sname FROM Student WHERE Sno IN (SELECT Sno From SC WHERE Cno=2)

子查詢條件 不依賴于父查詢驶赏, 這類子查詢稱為不相關(guān)子查詢
如果子查詢的查詢條件依賴于父查詢炸卑,這種查詢 稱為 相關(guān)子查詢

  • 帶有比較運算符的子查詢
    如: SELECT Sno,Sname,Sdept FROM Student WHERE Sdept = (SELECT Sdept From Student WHERE Sname='劉晨')

子查詢一定要放到 比較運算符后面

相關(guān)子查詢的例子:
SELECT Sno,Cno FROM SC x WHERE Grade >= (SELECT AVG(Grade) FROM SC y WHERE y.Sno = x.Sno)

執(zhí)行順序

  1. 外查詢中取一個 Sno 傳遞給 內(nèi)查詢
  2. 經(jīng)過內(nèi)查詢 得到 平均值 88
  3. 最后回到外查詢, 得到最終結(jié)果
  • 帶有 ANY(SOME) 或 ALL 謂詞的子查詢
    > ANY 大于子查詢結(jié)果中的某個值
    > ALL 大于子查詢結(jié)果中的所有值
    < ANY 小于子查詢結(jié)果中的某個值
    < ALL 小于子查詢結(jié)果中的所有值
    >= ANY 大于等于子查詢結(jié)果中的某個值
    >= ALL 大于等于子查詢中的所有值
    <= ANY 小于等于子查詢中的某個值
    <= ALL 小于等于子查詢結(jié)果中的所有值
    = ANY 等于子查詢結(jié)果中的某個值
    = ALL 等于子查詢結(jié)果中的所有值(通常沒有實際意義)
    != 或 <> ANY 不等于子查詢結(jié)果中的某個值
    != 或 <> ALL 不等于子查詢結(jié)果中的任何一個值

如:SELECT Sname,Sage FROM Student WHERE Sage<ANY (SELECT Sage FROM Student WHERE Sdept='CS')

= <>或者 != < <= > >=
ANY IN -- <MAX <=MAX >MIN >=MIN
ALL -- NOT IN <MIN <=MIN >MAX >=MAX

表:ANY(或SOME)煤傍,ALL 謂詞與聚集函數(shù)盖文,IN 謂詞的等價轉(zhuǎn)換關(guān)系

  • 帶有 EXISTS (NOT EXISTS)謂詞的子查詢

EXISTS 代表存在量詞 ,帶有 EXISTS 謂詞的子查詢不返回任何數(shù)據(jù)蚯姆, 只產(chǎn)生邏輯真值“ture” 或 邏輯假值"false"
如: SELECT Sname FROM Student WHERE EXISTS (SELECT * FROM SC WHERE Sno=Student.Sno AND Cno='1')

  • 集合查詢: 并集 UNION,交集INTERSECT,差EXCEPT

    SELECT 語句1 UNION SELECT 語句2
    如: SELECT * FROME Student Where Sdept='CS' UNION SELECT * FROM Student WHERE Sage<=19



表更新

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

    • 插入元祖
      INSERT INTO <表名> (<屬性列1>五续,[<屬性列2 >...)] VALUES (<常量1>[,<常量2>]...)
      如: INSERT INTO Student(Sno,Sname,Ssex,Sdept,Sage) VALUES ('201710093','王斌斌','男','IS',18)

    • 插入子查詢結(jié)果
      INSERT INTO <表名> (<屬性列1>[,<屬性列2>...])
      如: INSERT INTO Dept_age(Sdep,Avg_age) SELECT Sdept,AVG(Sage) FROM Student GROUP BY Sdept

  • 修改表 UPDATE <表名> SET <列名>=<表達式>[,<列名=<表達式>]...[WHERE <條件>]

    • 修改某一個元祖的值
      如: UPDATE Student SET Sage=22 WHERE Sno='201710092'
    • 修改多個元祖的值
      如:UPDATE Student SET Sage=Sage+1
    • 帶子查詢的修改語句
      如:UPDATE SC SET Grade = 0 WHERE 'CS'=(SELECT Sdept FROM Student WHERE Student.Sno = SC.Sno)
  • 刪除數(shù)據(jù)
    DELETE FROM <表> [WHERE <條件>]

    • 刪除某一個元祖的值
      DELECT FROM Student WHERE Sno='201710092'
    • 刪除多個元祖的值
      DELETE FROM SC
    • 帶子查詢的刪除語句
      DELETE FROM SC WHERE 'CS'=(SELECT Sdept FROM Student WHERE Student.Sno=SC.Sno)


視圖

  • 建立視圖 CREATE VIEW <視圖名> [(<列名>[,<列名>]...)] AS <子查詢> [WITH CHECK OPTION]
    如: CREATE VIEW IS_Student AS SELECT Sno,Sname,Sage FROM Student WHERE Sdept='IS'
    • 不許有 ORDER BY
    • 不許有 DISTINCT

WITH CHECK OPTION 表示對視圖進行UPDATE,INSERT 和 DELETE操作時蒋失,要保證更新返帕,插入或者刪除的行滿足視圖定義中的謂詞條件(即子查詢中的條件表達式)

組成視圖的屬性列名,要么全部省略 要么全部指定篙挽。

下面三種情況 必須指明所有列名

  1. 某個目標(biāo)列不是單純的屬性名荆萤,而是聚集函數(shù)或數(shù)列表達式
    如:CREATE VIEW BT_S(Sno,Sname,Sbirth) AS SELECT Sno,Sname,2017-Sage FROM Student
  2. 多表鏈接時選出了幾個同名列作為視圖的字段
    如: CREATE VIEW IS_SI(Sno,Sname,Grade) AS SELECT Student, Sno,Sname,Grade FROM Student,SC WHERE Sdept='IS' AND Student.Sno=SC.Sno AND SC.Cno='1'
  3. 需要在視圖中衛(wèi)某個列啟用新的更合適的名字
  • 刪除視圖 DROP VIEW <視圖名> [CASCADE]

    如:DROP VIEW IS_SI CASCADE

  • 查詢視圖 (同查表)

  • 更新視圖 (同更新表)

    1. 若視圖是由兩個以上基本表導(dǎo)出的,則此視圖不允許更新
    2. 若視圖的字段來自字段表達式或常數(shù),則不允許對此視圖執(zhí)行INSETUPDATE 操作链韭, 但允許DELETE 操作
    3. 若視圖的字段來自聚集函數(shù)偏竟,則此視圖不允許更新
    4. 若視圖定義中 含有 GROUP BY 子句, 則此視圖不允許更新
    5. 若視圖定義中含有 DISTINCT 短語敞峭, 則此視圖不允許更新
    6. 若視圖定義中有嵌套查詢踊谋,并且內(nèi)層查詢的 FROM 子句中涉及的表也是導(dǎo)出該視圖的基本表,則此視圖不允許更新旋讹。
    7. 一個不允許更新的視圖上定義的視圖也不允許更新
  • 視圖的作用

    • 視圖能簡化用戶的操作
    • 視圖使用戶能以多種角度看待同一數(shù)據(jù)
    • 視圖對重構(gòu)數(shù)據(jù)庫提供了一定程度的邏輯獨立性
    • 視圖能夠?qū)C密數(shù)據(jù)提供安全保護
    • 適當(dāng)?shù)睦靡晥D可以更清晰的表達查詢



數(shù)據(jù)庫性能調(diào)優(yōu)

《數(shù)據(jù)庫性能調(diào)優(yōu):原理與技術(shù)》
英文名
《Database Tuning:Principles,Experiments,and Troubleshooting Techniques》

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市沉迹,隨后出現(xiàn)的幾起案子睦疫,更是在濱河造成了極大的恐慌,老刑警劉巖鞭呕,帶你破解...
    沈念sama閱讀 211,348評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蛤育,死亡現(xiàn)場離奇詭異,居然都是意外死亡葫松,警方通過查閱死者的電腦和手機瓦糕,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,122評論 2 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來腋么,“玉大人咕娄,你說我怎么就攤上這事〉辰” “怎么了谭胚?”我有些...
    開封第一講書人閱讀 156,936評論 0 347
  • 文/不壞的土叔 我叫張陵徐块,是天一觀的道長未玻。 經(jīng)常有香客問我,道長胡控,這世上最難降的妖魔是什么扳剿? 我笑而不...
    開封第一講書人閱讀 56,427評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮昼激,結(jié)果婚禮上庇绽,老公的妹妹穿的比我還像新娘。我一直安慰自己橙困,他們只是感情好瞧掺,可當(dāng)我...
    茶點故事閱讀 65,467評論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著凡傅,像睡著了一般辟狈。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,785評論 1 290
  • 那天哼转,我揣著相機與錄音明未,去河邊找鬼。 笑死壹蔓,一個胖子當(dāng)著我的面吹牛趟妥,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播佣蓉,決...
    沈念sama閱讀 38,931評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼披摄,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了勇凭?” 一聲冷哼從身側(cè)響起行疏,我...
    開封第一講書人閱讀 37,696評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎套像,沒想到半個月后酿联,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,141評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡夺巩,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,483評論 2 327
  • 正文 我和宋清朗相戀三年贞让,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片柳譬。...
    茶點故事閱讀 38,625評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡喳张,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出美澳,到底是詐尸還是另有隱情销部,我是刑警寧澤,帶...
    沈念sama閱讀 34,291評論 4 329
  • 正文 年R本政府宣布制跟,位于F島的核電站舅桩,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏雨膨。R本人自食惡果不足惜擂涛,卻給世界環(huán)境...
    茶點故事閱讀 39,892評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望聊记。 院中可真熱鬧撒妈,春花似錦、人聲如沸排监。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽舆床。三九已至棋蚌,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背附鸽。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工脱拼, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 46,324評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像寻行,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子赌蔑,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,492評論 2 348

推薦閱讀更多精彩內(nèi)容