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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

写一个sql实现以下查询结果_SQL复杂查询—知识点梳理(四)

發(fā)布時間:2025/3/15 数据库 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 写一个sql实现以下查询结果_SQL复杂查询—知识点梳理(四) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

SQL復(fù)雜查詢學(xué)習(xí)大綱

一、視圖

1.1 什么是視圖

在數(shù)據(jù)庫里有很多表,表里存放的是實際數(shù)據(jù),而視圖中存放的是SQL查詢語句。當我們通過客戶端連接到數(shù)據(jù)庫,開始使用視圖時,視圖會先運行里面的SQL查詢語句,從表里查找出數(shù)據(jù)保存到一張臨時表中(當客戶端斷開與數(shù)據(jù)庫的連接,這張表會自動刪除,不是保存在數(shù)據(jù)庫里的表,因此是臨時表)。因此視圖本身不存放數(shù)據(jù),存放的是SQL查詢語句。

      • 創(chuàng)建視圖

創(chuàng)建視圖的SQL語句:create view ... as ...<select查詢語句> ;

create view表示創(chuàng)建視圖

查詢語句列的順序要和視圖名稱括號里列的順序要一一對應(yīng)。如下圖,新建視圖“按性別匯總”,SQL查詢語句寫在as之后,查詢語句的列和視圖名稱括號里的列名稱可以不同,但他們的關(guān)系是一一對應(yīng)的。

        • 創(chuàng)建視圖步驟

寫好創(chuàng)建視圖的SQL語句并運行—右擊左側(cè)“視圖”—刷新

1.2 如何使用視圖

用視圖名稱代替表名。表中的數(shù)據(jù)更新時,視圖也會隨之更新。

      • 刪除視圖步驟

選中要刪除的視圖名稱右擊—“刪除視圖”

1.3 視圖有什么用

作用1:需要頻繁使用的SQL語句可以保存成視圖,不需要每次都重新輸入一遍。特別是在龐大的復(fù)雜查詢語句中,使用視圖可以提高效率。

作用2:視圖中的數(shù)據(jù)會隨著原表的變化自動更新,可以保證數(shù)據(jù)的最新狀態(tài)

作用3:視圖不需要保存數(shù)據(jù),可以節(jié)省存放數(shù)據(jù)設(shè)備的空間

1.4 注意事項

1)避免在已創(chuàng)建視圖的基礎(chǔ)上再創(chuàng)建視圖,多重視圖會降低SQL的性能和效率

2)不能往視圖里插入數(shù)據(jù),否則會報錯

二、子查詢

之前學(xué)習(xí)的查詢條件都是具體的數(shù)值,如“學(xué)習(xí)成績大于60分”,但如果查詢條件需要從表中獲取,如“成績大于平均成績的學(xué)生有哪些?”,這就需要用到子查詢。

2.1 什么是子查詢

子查詢就是一次性視圖。在SQL查詢子句中,直接寫定義視圖的SQL查詢語句,即在一個select查詢語句中嵌入另一個select查詢語句。下圖中的“按性別匯總”就是子查詢的名稱,由于該名稱是一次性的,不會像視圖名稱一樣保存在數(shù)據(jù)庫的硬盤中,在SQL查詢語句運行結(jié)束后就會消失,所以可以看成臨時表。

SQL運行順序——先運行子查詢,將子查詢的結(jié)果作為外部查詢的一部分,再運行外部的查詢語句

2.2 如何使用子查詢

子查詢除了放在form子句里,還可以放在where子句里,與運算符in、any、all一起使用,從而構(gòu)建出復(fù)雜的查詢條件。使用方法是在運算符in、any、all的括號里放入子查詢。

錯誤示例——查詢每門課程里成績最低的學(xué)號

正確示例——查詢每門課程里成績最低的學(xué)號

any和all

any、all關(guān)鍵字必須與一個比較運算符一起使用

any等同于some,用法相同

案例1—any的用法

案例2—all的用法

2.3 子查詢有什么用

2.4 注意事項

1)雖然在數(shù)學(xué)上a>3*all(b)等價于a/3>all(b),但是在數(shù)據(jù)庫里all代表的不是一個數(shù)字而是一個集合即得到的是N行數(shù)據(jù),因此不能寫成3*all(b)的形式

2)避免使用多層嵌套子查詢。因為子查詢的層數(shù)沒有限制,隨著子查詢層數(shù)越來越多,SQL語句越來越復(fù)雜,性能變差并且不好維護。

3)as關(guān)鍵字及子查詢名稱可以省略。盡量不要省略更有利于讀懂。

SQL運行順序

三、標量子查

什么是標量子查詢

由于在where子句中不能使用匯總函數(shù),因此報錯,此時可以使用標量子查詢

子查詢可以返回一行或多行數(shù)據(jù),標量子查詢就是在子查詢的基礎(chǔ)上做了特殊限制,必須且只能返回一行一列的查詢結(jié)果,即返回的是單一的值。如下圖返回的只有一行一列即平均成績這個單一值,它是一個標量子查詢。或者查詢的是表中某一行某一列的值,返回的也是單一的值,因此標量子查詢可以和比較運算符一起使用

案例

如何使用標量子查詢

標量子查詢的書寫位置并不僅僅局限于where子句,通常任何使用單一值的地方都可以使用標量子查詢

標量子查詢有什么用

可以和比較運算符及between、in、or等關(guān)鍵字一起使用實現(xiàn)復(fù)雜的查詢條件

注意事項

該子查詢不能返回多行結(jié)果,如果返回多行結(jié)果那就不再是標量子查詢而是普通子查詢,因此也不能用在比較運算符中

四、關(guān)聯(lián)子查詢

什么是關(guān)聯(lián)子查詢及如何使用關(guān)聯(lián)子查詢

可以依據(jù)子查詢是否執(zhí)行多次,從而將子查詢劃分為關(guān)聯(lián)子查詢和非關(guān)聯(lián)子查詢

按課程號分組后得到每門課程的平均成績,要查找出每門課程大于對應(yīng)課程平均成績的學(xué)生,需要在每個組里而不是整個表中進行比較,此時就需要用到關(guān)聯(lián)子查詢

這里起到關(guān)鍵作用的就是關(guān)聯(lián)條件。在子查詢里有個where子句的條件,意思是按課程號對成績表進行分組,同一組里的數(shù)據(jù)和這一組的平均成績進行比較,由于作為比較對象的都是同一張表score,為了更好區(qū)分,此處使用s1、s2兩個別名。在使用關(guān)聯(lián)子查詢時,需要使用如下圖紅框中表的別名來表示表的列名。

關(guān)聯(lián)條件一定要寫在子查詢里。在下圖例子中,表別名s2只在子查詢中有效,因此表別名s2能看到表別名s1,表別名s1看不到表別名s2

關(guān)聯(lián)子查詢有什么用

當每個組里進行比較時使用關(guān)聯(lián)子查詢,關(guān)聯(lián)子查詢是在子查詢里有了一個關(guān)聯(lián)條件

五、用SQL解決業(yè)務(wù)問題

案例

看懂SQL報錯信息

使用排除法逐一查找錯誤之處。如下圖出現(xiàn)報錯,可以先選中子查詢檢查是否出現(xiàn)報錯,若子查詢出現(xiàn)報錯則說明問題出在子查詢中;若子查詢運行正常則說明問題出在子查詢外部。

六、各種函數(shù)

七、補充知識

concat函數(shù)及round函數(shù)

concat函數(shù)為字符串連接函數(shù)

round函數(shù)用于把數(shù)值字段四舍五入為指定的小數(shù)位數(shù),用法:round(數(shù)值,返回的小數(shù)位數(shù))

非null值的表現(xiàn)形式

關(guān)聯(lián)子查詢(關(guān)聯(lián)子查詢里的group by可以省略)

案例一

案例二

案例三

案例四

topN問題

      • 分組取每組最大值

      • 分組取每組最小值

      • 每組最大的N條記錄

八、練習(xí)

Chestnut-J:SQL復(fù)雜查詢—練習(xí)(四)?zhuanlan.zhihu.com

總結(jié)

以上是生活随笔為你收集整理的写一个sql实现以下查询结果_SQL复杂查询—知识点梳理(四)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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