国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

數(shù)據(jù)庫 SQL高級查詢語句:聚合查詢,多表查詢,連接查詢

這篇具有很好參考價值的文章主要介紹了數(shù)據(jù)庫 SQL高級查詢語句:聚合查詢,多表查詢,連接查詢。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

創(chuàng)建學生表

創(chuàng)建Students和Courses表

CREATE TABLE Students (
    StudentID int PRIMARY KEY,
    Name varchar(255),
    Gender varchar(1),
    Age int,
    City varchar(255)
);
INSERT INTO Students VALUES(1, 'David', 'M', 21, 'Shanghai');
INSERT INTO Students VALUES(2, 'Kevin', 'M', 19, 'Beijing');
INSERT INTO Students VALUES(3, 'Emily', 'F', 22, 'Shanghai');
INSERT INTO Students VALUES(4, 'William', 'M', 20, 'New York City');
INSERT INTO Students VALUES(5, 'Alice', 'F', 19, 'Los Angeles');
INSERT INTO Students VALUES(6, 'Frank', 'F', 22, 'Los Angeles');
CREATE TABLE Courses (
    CourseID int PRIMARY KEY,
    CourseName varchar(255)
);
INSERT INTO Courses VALUES(1, 'CS101');
INSERT INTO Courses VALUES(2, 'CS202');
INSERT INTO Courses VALUES(3, 'EE101');

聚合查詢

數(shù)據(jù)庫 SQL高級查詢語句:聚合查詢,多表查詢,連接查詢,數(shù)據(jù)庫,sql,java

聚合函數(shù)

直接查詢

SELECT COUNT(*) FROM Students;

數(shù)據(jù)庫 SQL高級查詢語句:聚合查詢,多表查詢,連接查詢,數(shù)據(jù)庫,sql,java

設置別名查詢

SELECT COUNT(*) AS StudentsNum FROM Students;

設置條件查詢

使用COUNT(*) 和 COUNT(StudentID)是一樣的效果,因為StudentID是主鍵,每行記錄的主鍵都不同。另外我們在聚合查詢中還是能使用WHERE子句的,比如我們要查找年齡大于20歲的學生數(shù)量,可使用以下SQL語句:

SELECT COUNT(*) FROM Students AS s WHERE s.age > 20; 

常用的聚合函數(shù)

函數(shù) 說明
SUM 計算某一列的總和,該列必須為數(shù)值類型
AVG 計算某一列的平均數(shù),該列必須為數(shù)值類型
MAX 計算某一列的最大值
MIN 計算某一列的最小值

查詢學生的平均年齡

SELECT AVG(Age) FROM Students;

使用AVG聚合函數(shù)
數(shù)據(jù)庫 SQL高級查詢語句:聚合查詢,多表查詢,連接查詢,數(shù)據(jù)庫,sql,java

分組查詢

單個字段Group by

根據(jù)城市City對學生進行分組,并需要查詢每個城市有多少學生

SELECT City, COUNT(*) FROM Students GROUP BY City;

數(shù)據(jù)庫 SQL高級查詢語句:聚合查詢,多表查詢,連接查詢,數(shù)據(jù)庫,sql,java

報錯分組查詢

如果將Name也放入查詢結果,會報錯,因為來自相同城市的學生可能有很多位,名字各不相同,所以以下語句是不合法的:

SELECT City, COUNT(*), Name FROM Students GROUP BY City;

報錯信息如下
數(shù)據(jù)庫 SQL高級查詢語句:聚合查詢,多表查詢,連接查詢,數(shù)據(jù)庫,sql,java
SELECT 列表的表達式 #3 不在 GROUP BY 子句中,并且包含非聚合列“tuling.Students.Name”,該列在功能上不依賴于 GROUP BY 子句中的列;這與 sql_mode=only_full_group_by 不兼容。

#3就指的是Name那一列

多字段分組查詢

GROUP BY 也能放入多個字段,比如我們想先將學生根據(jù)City分組,然后再根據(jù)性別分組,可以使用以下語句:

SELECT City, Gender, COUNT(*) FROM Students GROUP BY City, Gender;

數(shù)據(jù)庫 SQL高級查詢語句:聚合查詢,多表查詢,連接查詢,數(shù)據(jù)庫,sql,java
學生表中Los Angeles的兩個人性別一樣,分組顯示的為F,計數(shù)為2
數(shù)據(jù)庫 SQL高級查詢語句:聚合查詢,多表查詢,連接查詢,數(shù)據(jù)庫,sql,java
現(xiàn)在我將其中一人人的性別改為M,思考一下查詢結果會發(fā)生變化嗎?

地點相同,性別不同的被區(qū)分出來了。
數(shù)據(jù)庫 SQL高級查詢語句:聚合查詢,多表查詢,連接查詢,數(shù)據(jù)庫,sql,java
可以看到原來Los Angeles為2,現(xiàn)在變成了兩個1,性別M和F被區(qū)分了。
數(shù)據(jù)庫 SQL高級查詢語句:聚合查詢,多表查詢,連接查詢,數(shù)據(jù)庫,sql,java

多表查詢

SELECT 查詢除了能從單表中查數(shù)據(jù)外,也能從多表中查詢數(shù)據(jù)。語法如下:

直接查詢

SELECT * FROM Students, Courses;

查詢結果是兩個表的笛卡爾積

假設Students有5列字段和7行記錄,Courses有2列字段和3行記錄,其結果就是一個擁有21 (3 * 7) 行記錄和 7 (5 + 2) 列字段的二維表,既Students表的每一行和Courses表的每一行兩兩拼在一起。結果集的列數(shù)會是兩表列數(shù)之和,而行數(shù)是兩表行數(shù)之積。
數(shù)據(jù)庫 SQL高級查詢語句:聚合查詢,多表查詢,連接查詢,數(shù)據(jù)庫,sql,java

重命名查詢

有時候兩張表可能擁有相同名字的字段,那么結果則會讓人疑惑,我們可以通過使用 AS 取別名來區(qū)別字段。比如使用以下語句給StudentID和CourseID改名為StudentId和CourseId:

SELECT Students.StudentID AS StudentId, Courses.CourseID AS CourseId FROM Students, Courses;

給字段取別名的語法類似 column_name AS new_column_name,上面的語句分別給StudentID和CoursesID取了別名StudentId和CourseId,雖然在這個例子中,我們只是將最后的字母D變?yōu)樾?。但考慮一下另一種情況:假設Students和Courses的主鍵字段都叫ID,那么這個別名就很有幫助了,我們可以使用以下語句使查詢結果更明了:

SELECT Students.ID AS StudentId, Courses.ID AS CourseId FROM Students, Courses;

除了給輸出字段取別名外,給表格取別名也很有用的,語法類似table_name AS alias,我們可以將上面的語句寫成下面這樣:

SELECT S.ID AS StudentId, C.ID AS CourseId FROM Students AS S, Courses AS C;

Students表新建一列CourseID

在多表查詢中,還是能使用WHERE子句。為了幫助大家理解之后的內容,我們需要給Students添加一列新的字段CourseID,代表此學生選擇的課程:

新建一列CourseID在City之后

alter table Students add column CourseID int(4) not null after City;

數(shù)據(jù)庫 SQL高級查詢語句:聚合查詢,多表查詢,連接查詢,數(shù)據(jù)庫,sql,java
CouseID的值設置為StudentID的值一半

update Students set CourseID = StudentID/2

數(shù)據(jù)庫 SQL高級查詢語句:聚合查詢,多表查詢,連接查詢,數(shù)據(jù)庫,sql,java

查詢StudentID和其對應的課程名字

SELECT S.StudentID,C.CourseName 
FROM Students AS S,Courses AS C
WHERE S.CourseID = C.CourseID;

數(shù)據(jù)庫 SQL高級查詢語句:聚合查詢,多表查詢,連接查詢,數(shù)據(jù)庫,sql,java
報錯!??! 知道為什么嗎一般 erro syntax就是中文字符的問題,

Students as S,Courses as C 這個逗號是中文字符,改成英文字符后運行成功啦

數(shù)據(jù)庫 SQL高級查詢語句:聚合查詢,多表查詢,連接查詢,數(shù)據(jù)庫,sql,java
除了WHERE子句,其他子句類似ORDER BY,GROUP BY也都適用于多表查詢。

除了WHERE子句,其他子句類似ORDER BY,GROUP BY也都適用于多表查詢。

連接(JOIN)查詢

INNER JOIN

連接查詢是另一種類型的多表查詢,連接查詢會對多個表格進行JOIN運算。也就是說,先確定一個主表作為結果集,然后將其他表的記錄有選擇性地“嵌入”到主表結果集上。

假設我們想要知道每個學生選擇的課程名字,除了上面提到的多表查詢加WHERE子句,我們還能使用INNER JOIN子句:

SELECT S.StudentID, C.CourseName 
FROM Students AS S 
INNER JOIN Courses AS C ON S.CourseID = C.CourseID;

數(shù)據(jù)庫 SQL高級查詢語句:聚合查詢,多表查詢,連接查詢,數(shù)據(jù)庫,sql,java
此語句就能將每個StudentID和其對應的課程名查詢出來,要注意INNSER JOIN語句的內在執(zhí)行過程如下:

  • 1 確定主表,使用 FROM table_name
  • 2 緊接著確認連接的表,使用 INNER JOIN table_name
  • 3 再確定連接條件,使用 ON condition,上面語句的條件就是 S.CourseID = C.CourseID
  • 4 最后還能加上 : WHERE、ORDER BY等子句
    除了INNER JOIN外,我們還有LEFT JOIN, RIGHT JOIN, 和FULL JOIN。

補充:別名不是必須的,只是為了增加可讀性。

RIGHT JOIN, LEFT JOIN

如果我們將語句改為 RIGHT JOIN:

SELECT S.StudentID, C.CourseName
FROM Students AS S 
RIGHT JOIN Courses AS C ON S.CourseID = C.CourseID;

數(shù)據(jù)庫 SQL高級查詢語句:聚合查詢,多表查詢,連接查詢,數(shù)據(jù)庫,sql,java

修改Students表格,讓5,6選課程1,重新右連接查詢。
數(shù)據(jù)庫 SQL高級查詢語句:聚合查詢,多表查詢,連接查詢,數(shù)據(jù)庫,sql,java
執(zhí)行上面的語句之后,如果有一節(jié)課沒有任何學生加入,我們會有一行多余的記錄,記錄中僅有CourseName,但是StudentID為NULL。
數(shù)據(jù)庫 SQL高級查詢語句:聚合查詢,多表查詢,連接查詢,數(shù)據(jù)庫,sql,java
為什么會這樣呢?INNER JOIN 會返回同時存在兩張表的數(shù)據(jù),如果Students有1, 2, 3, 5課號,Courses也有1, 2, 3, 4課號,那么結果就是其相交集1, 2, 3。而 RIGHT JOIN 返回的則是右表存在的記錄,如果左表不存在右表中的某幾行,那結果中的那幾行就會是NULL。

而 LEFT JOIN 則會返回左表中都存在的數(shù),如果給Students加上CourseID=10,即使Courses表中沒有ID為10的課程記錄,那么LEFT JOIN的結果還是會多一行記錄,其對應的CourseName是NULL。(補充:LEFT JOIN 在有些數(shù)據(jù)庫中叫做 LEFT OUT JOIN,同理 RIGHT JOIN 也可能叫做 RIGHT OUT JOIN。)

FULL JOIN

最后一種 JOIN 是 FULL JOIN,結果集會把兩張表的所有記錄全部選出來,并自動把兩張表中不存在的列補充為NULL。

為了幫助大家理解連接查詢的邏輯,大家可以參看以下的圖示,左邊的圓可以理解為左表,右邊的圓可以理解為右表。
數(shù)據(jù)庫 SQL高級查詢語句:聚合查詢,多表查詢,連接查詢,數(shù)據(jù)庫,sql,java
以上就是SQL語法的基本教程啦,現(xiàn)在大家已經(jīng)學會了如何使用 SQL 創(chuàng)建表格和記錄,并使用高級的 SQL 語句進行復雜的查詢,下一章我們就開始學習使用真正的數(shù)據(jù)庫軟件 MySQL。

課后練習

請寫出SQL語句,找出加入CourseID為1的學生數(shù)量和課程名字,要注意的是,我們只尋找那些年紀大于20歲的男學生數(shù)量。

方法1 使用Where

SELECT COUNT(*) AS StudentsNum,CourseName 
FROM Students AS S,Courses AS C
WHERE S.CourseID = C.CourseID AND S.CourseID = 1 AND S.Age > 20 AND S.Gender = 'M';

方法2 Group by + where

SELECT COUNT(*) AS StudentsNum, CourseName 
FROM Students LEFT JOIN Courses ON Students.CourseID = Courses.CourseID 
WHERE Students.Age > 20 AND Students.Gender = 'M'
GROUP BY Students.CourseID;

復習

  • 1 確定主表,使用 FROM table_name
  • 2 緊接著確認連接的表,使用 INNER JOIN table_name
  • 3 再確定連接條件,使用 ON condition,上面語句的條件就是 S.CourseID = C.CourseID
  • 4 最后還能加上 : WHERE、ORDER BY等子句
    除了INNER JOIN外,我們還有LEFT JOIN, RIGHT JOIN, 和FULL JOIN。

參考

【SQL高級查詢語句:聚合查詢,多表查詢,連接查詢【關系數(shù)據(jù)庫SQL教程5】】 https://www.bilibili.com/video/BV1Zp4y1Q7mj/?share_source=copy_web&vd_source=fe6c23f6f1353ed1eff5d5e866171572文章來源地址http://www.zghlxwxcb.cn/news/detail-697764.html

到了這里,關于數(shù)據(jù)庫 SQL高級查詢語句:聚合查詢,多表查詢,連接查詢的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 數(shù)據(jù)庫系統(tǒng)頭歌實驗二 SQL的多表查詢

    數(shù)據(jù)庫系統(tǒng)頭歌實驗二 SQL的多表查詢

    第一關:等值連接:求S表和J表城市相同的等值連接(列順序還是按照S、J表) 工程項目表J由工程項目代碼(JNO)、工程項目名(JNAME)、工程項目所在城市(CITY)組成。 供應商表S由供應商代碼(SNO)、供應商姓名(SNAME)、供應商狀態(tài)(STATUS)、供應商所在城市(CITY)組成. S表如下圖

    2024年02月07日
    瀏覽(21)
  • 數(shù)據(jù)庫應用:MySQL數(shù)據(jù)庫SQL高級語句與操作

    數(shù)據(jù)庫應用:MySQL數(shù)據(jù)庫SQL高級語句與操作

    目錄 一、理論 1.克隆表與清空表 2.SQL高級語句 3.SQL函數(shù) 4.SQL高級操作 5.MySQL中6種常見的約束 二、實驗 ?1.克隆表與清空表 2.SQL高級語句 3.SQL函數(shù) 4.SQL高級操作 5.主鍵表和外鍵表 ?三、總結 克隆表:將數(shù)據(jù)表的數(shù)據(jù)記錄生成到新的表中。 (1)克隆表 ①?先創(chuàng)建再導入 ②?創(chuàng)建

    2024年02月13日
    瀏覽(101)
  • 【數(shù)據(jù)庫】MySQL 高級(進階) SQL 語句

    【數(shù)據(jù)庫】MySQL 高級(進階) SQL 語句

    location表格創(chuàng)建 store_info表格創(chuàng)建 顯示表格中一個或數(shù)個字段的所有數(shù)據(jù)記錄 不顯示重復的數(shù)據(jù)記錄 按照條件進行查詢 在已知的字段數(shù)據(jù)取值范圍內取值 另外還有not in命令,用法一致,表示顯示不在指定范圍內的字段的值。 在兩個字段數(shù)據(jù)值之間取值,包含兩邊字段的數(shù)據(jù)

    2024年02月09日
    瀏覽(28)
  • 數(shù)據(jù)庫作業(yè)-sql語句查詢

    建表的插入數(shù)據(jù)的表 數(shù)據(jù)庫作業(yè)-sql建表和插入數(shù)據(jù)_快樂的xiao何的博客-CSDN博客 create table supplier( supplierno char(6) primary key, suppliername nvarchar(10), address nvarchar(20), number char(11) )create table category( categoryno char(5) primary key, categoryname varchar(20), descriptions text... https://blog.csdn.net/m0_539670

    2023年04月23日
    瀏覽(33)
  • 【MySQL數(shù)據(jù)庫】MySQL 高級SQL 語句一

    【MySQL數(shù)據(jù)庫】MySQL 高級SQL 語句一

    ) % :百分號表示零個、一個或多個字符 _ :下劃線表示單個字符 ‘A_Z’:所有以 ‘A’ 起頭,另一個任何值的字符,且以 ‘Z’ 為結尾的字符串。例如,‘ABZ’ 和 ‘A2Z’ 都符合這一個模式,而 ‘AKKZ’ 并不符合 (因為在 A 和 Z 之間有兩個字符,而不是一個字符)。 ‘ABC%’

    2024年02月09日
    瀏覽(1352)
  • Mysql 數(shù)據(jù)庫DQL 數(shù)據(jù)查詢語言 SELECT 基本查詢、條件查詢、聚合查詢、分組查詢、排序查詢、分頁查詢——包含DQL所有查詢語句。吐血分享。

    Mysql 數(shù)據(jù)庫DQL 數(shù)據(jù)查詢語言 SELECT 基本查詢、條件查詢、聚合查詢、分組查詢、排序查詢、分頁查詢——包含DQL所有查詢語句。吐血分享。

    DQL:數(shù)據(jù)查詢語言; 用來對表內的數(shù)據(jù)進行查找 。Database Query Language SQL語句分為:基本查詢、條件查詢、聚合查詢、分組查詢、排序查詢、分頁查詢。 ?可以發(fā)現(xiàn)name字段就只剩下一個張三了; ? 條件: 條件查詢—比較運算符 比較運算符 功能 大于 = 大于等于 小于 = 小于等

    2024年01月19日
    瀏覽(45)
  • WordPress必備數(shù)據(jù)庫SQL查詢語句整理

    最近明月給博客和主站都部署了SSL證書,徹徹底底的加入了HTTPS站點行列。這個期間也用到了SQL查詢語句來批量的對內鏈的HTTP前綴做替換,就感覺掌握一些SQL方面的語句還是非常有必要的,這不在【俄語譯客】博客上就發(fā)現(xiàn)了幾條比較實用的,適合 WordPress 實用的SQL語句。于

    2024年02月01日
    瀏覽(40)
  • 數(shù)據(jù)庫學習筆記-----SQL查詢語句和代碼演示

    數(shù)據(jù)庫學習筆記-----SQL查詢語句和代碼演示

    SQL不區(qū)分大小寫,本文是鄒兆年老師的課件和課堂的部分內容總結,部分比較細的內容請看課件 Db筆記(1).pdf 數(shù)值型: 整型:INT/SMALLINT/BIGINT? ? ? ? 4個字節(jié)/兩個字節(jié)/八個字節(jié) 浮點型:NUMERIC/DECIMAL(p,s):定點數(shù),p位有效數(shù)字,小數(shù)點后s位? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

    2023年04月12日
    瀏覽(44)
  • SQL Server數(shù)據(jù)庫 -- 表的高級查詢

    SQL Server數(shù)據(jù)庫 -- 表的高級查詢

    ? 一、子查詢 嵌套子查詢 相關子查詢 二、查詢運算 并運算union 交運算intersect 差運算except 三、函數(shù)的使用 if語句 while語句 case語句 四、總結 高級子查詢是對查詢更靈活的運用,學會了高級查詢將對數(shù)據(jù)庫使用有很大的幫助。 ? ? ? 在SQL語言中,一個select-from-where語句稱為一

    2024年02月13日
    瀏覽(91)
  • 通過sql語句查詢出某個字段在數(shù)據(jù)庫中的某個表

    通過sql語句查詢出某個字段在數(shù)據(jù)庫中的某個表

    新入職的小伙伴,肯定還沒熟悉數(shù)據(jù)庫中表于表的關系以及表中的字段的含義是什么,就需要進行需求開發(fā),導致會出現(xiàn)對某個字段在哪張表里面都分辨不清,不過不要怕,可以利用已下sql語句快速找到。(要注意的是,此方法可能不適用于所有類型的數(shù)據(jù)庫系統(tǒng),但對于大

    2024年02月16日
    瀏覽(43)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包