日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

sql删除元组_Lecture #02: 中级SQL

發(fā)布時(shí)間:2023/12/10 数据库 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 sql删除元组_Lecture #02: 中级SQL 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

本專欄是對CMU15445的筆記的翻譯,原文地址:https://15445.courses.cs.cmu.edu/fall2020/notes/02-advancedsql.pdf

1 關(guān)系語言

在20世紀(jì)70年代,Edgar Codd發(fā)布了一篇關(guān)于關(guān)系模型的論文。最初,他只定義了數(shù)據(jù)庫在關(guān)系模型上運(yùn)行查詢的數(shù)學(xué)符號。

用戶只需要使用聲明性的語言指定他們想要的結(jié)果(例如SQL)。數(shù)據(jù)庫有責(zé)任去決定最有效率的計(jì)劃并返回結(jié)果。

關(guān)系代數(shù)基于set(無序,沒有重復(fù)),SQL基于bag(無序,有重復(fù))。

2 SQL歷史

用于關(guān)系型數(shù)據(jù)庫的聲明式查詢語言,最初是在20世紀(jì)70年代作為IBM System R項(xiàng)目的一部分開發(fā)的。IBM最初稱為“SEQUEL”(Structured English Query Language 結(jié)構(gòu)化英文查詢語言)。在20世紀(jì)80年代改名為“SQL”(Structured Query Language 結(jié)構(gòu)化查詢語言)。

這個(gè)語言由不同種類的命令組成:

  • Data Manipulation Language (DML 數(shù)據(jù)操縱語言):SELETE(查詢),INSERT(插入),UPDATE(更新)和DELETE(刪除)。
  • Data Definition Language (DDL 數(shù)據(jù)定義語言):定義表,索引,視圖和另外對象的模式。
  • Data Control Language (DCL 數(shù)據(jù)控制語言):安全,訪問控制。
  • SQL不是一個(gè)死(一成不變)的語言,每隔幾年就會添加新功能。SQL-92標(biāo)準(zhǔn)是一個(gè)數(shù)據(jù)庫支持SQL的最低要求。每個(gè)供應(yīng)商都在一定程度上遵循標(biāo)準(zhǔn),但同時(shí)他們也有很多自己的擴(kuò)展語法。

    3 聚合

    聚合函數(shù)接受一批元組作為輸入并產(chǎn)生單個(gè)標(biāo)量作為輸出。聚合函數(shù)只能用于SELECT的輸出列。

    例子:獲取學(xué)生用“@cs”登錄的數(shù)量。下列3個(gè)查詢是等價(jià)的:

    SELECT

    可以使用多個(gè)聚合函數(shù)在一個(gè)SELECT語句塊中:

    SELECT

    一些聚合函數(shù)支持DISTINCT關(guān)鍵字:

    SELECT

    同時(shí)輸出聚合函數(shù)列和非聚合函數(shù)列是未定義行為(e.cid在這里是未定義行為)

    注:未定義行為指該行為標(biāo)準(zhǔn)中未定義,不同數(shù)據(jù)庫可能會返回不同的結(jié)果(甚至可能會報(bào)錯(cuò))

    SELECT

    因此,其他非聚合函數(shù)的列必須使用GROUP BY命令進(jìn)行聚合:

    SELECT

    HAVING:聚合后進(jìn)行過濾,像WHERE子句中使用GROUP BY過濾這樣

    SELECT

    4 字符串操作

    SQL標(biāo)準(zhǔn)規(guī)定字符串區(qū)分大小寫并只能使用單引號。有些函數(shù)可以在查詢的任何地方使用并操縱字符串。

    Pattern Matching(模式匹配):LIKE關(guān)鍵字被用于在謂詞中的字符串匹配。

    • “%” 匹配任何子串(包括空串)。
    • “_” 匹配單個(gè)字符。

    Concatenation(連接):兩個(gè)豎線(“||”)會連接2個(gè)或多個(gè)字符串變成1個(gè)字符串。

    5 輸出重定向

    除了可以直接給用戶返回結(jié)果,你還可以告訴數(shù)據(jù)庫存儲結(jié)果到另外一張表,然后你可以在后續(xù)查詢中訪問這些數(shù)據(jù)。

    • New Table(新表):存儲查詢的輸出到新表中。
    SELECT
    • Existing Table(已存在的表):存儲查詢的輸入到已經(jīng)存在表中。目標(biāo)表必須有相同的列數(shù)和相同的類型,列名可以和輸出列不匹配。
    INSERT

    6 輸出控制

    由于SQL是無序的,你必須使用ORDER BY子句去對結(jié)果進(jìn)行排序:

    SELECT

    你可以使用多個(gè)ORDER BY子句做更復(fù)雜的排序:

    SELECT

    你可以使用任意的表達(dá)式在ORDER BY子句中:

    SELECT

    通常,數(shù)據(jù)庫會返回所有符合條件的元組。你可以使用LIMIT子句去限制返回元組的數(shù)量:

    SELECT

    同時(shí)也可以提供offset去獲得一個(gè)結(jié)果的區(qū)間:

    SELECT

    除非你使用一個(gè)ORDER BY子句搭配LIMIT,否則數(shù)據(jù)庫可能在每次查詢會返回不同的元組,因?yàn)殛P(guān)系模型不在意順序。

    7 嵌套查詢

    嵌套查詢可以使單個(gè)查詢中運(yùn)行更復(fù)雜的查詢。外部查詢的作用域在內(nèi)部查詢中(內(nèi)部查詢可以訪問外部查詢的屬性),反之不行。

    內(nèi)部查詢可以出現(xiàn)在查詢的幾乎所有地方:

  • SELECT輸出目標(biāo):
  • SELECT

    2. FROM子句:

    SELECT

    3. WHERE子句:

    SELECT

    例子:獲取所有報(bào)名“15-445”的學(xué)生名字

    SELECT

    注意,根據(jù)sid出現(xiàn)的不同位置,它擁有不同的作用域。

    Nest Query Results Expressions(嵌套查詢表達(dá)式):

    • ALL:必須滿足子查詢中所有的行
    • ANY:必須滿足子查詢中至少1行
    • IN:等價(jià)于ANY()
    • EXISTS:至少1行被返回

    8 窗口函數(shù)

    跨元組執(zhí)行“移動”計(jì)算。和聚合一樣,但它依然返回原始元組。

    Functions(函數(shù)):窗口函數(shù)可以是上面討論的任意的聚合函數(shù)。同時(shí)還有一些特殊的窗口函數(shù):

  • ROW_NUMBER:當(dāng)前行的number
  • RANK:當(dāng)前行的排序
  • Grouping(分組):OVER子句指定當(dāng)計(jì)算窗口函數(shù)的時(shí)候如何分組。使用PARTITION BY去指定分組。

    SELECT

    你也可以在OVER中使用ORDER BY去確定結(jié)果的順序,即使數(shù)據(jù)庫內(nèi)部存儲結(jié)構(gòu)發(fā)生改變也不會影響結(jié)果。

    SELECT

    重點(diǎn):RANK函數(shù)在窗口函數(shù)排序后計(jì)算,ROW_NUBMER函數(shù)在排序前計(jì)算。

    9 公用表表達(dá)式(CTE)

    公用表表達(dá)式(CTE)是窗口函數(shù)和嵌套查詢的替代方法去編寫更加復(fù)雜的查詢。可以認(rèn)為CTE是在單次查詢的一個(gè)臨時(shí)表。

    WITH子句將內(nèi)部查詢的輸出綁定到臨時(shí)的結(jié)果。

    例子:生成一個(gè)CTE叫cteName包含1個(gè)tuple的1個(gè)屬性,屬性值為1。這個(gè)查詢返回了cteName的所有屬性及值。

    WITH

    你可以綁定輸出列的名字在AS之前:

    WITH

    單個(gè)查詢可以包括多個(gè)CTE的定義:

    WITH

    在WITH后添加RECURSIVE關(guān)鍵字允許CTE引用自己。

    例子:打印1到10的序列

    WITH

    總結(jié)

    以上是生活随笔為你收集整理的sql删除元组_Lecture #02: 中级SQL的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。