天天看點

3. 連接配接查詢:inner join、left join、right join 、full join、cross join

文章目錄

    • 1. 内連接配接【inner join】(即我們常用 ——>where+列相等)
    • 2. 自連接配接【inner join】(即我們常用 ——>where+列相等)
    • 3. 外連接配接【left join、right join 、full join】
    • 4. 交叉連接配接【cross join】

實作從兩個或兩個以上表中檢索資料且

結果集中出現的列

來自于兩個或兩個以上表中的檢索操作被稱為連接配接技術。

在 SQL Server中,連接配接操作又可以分為内連接配接、自連接配接、外連接配接、交叉連接配接等。

1. 内連接配接【inner join】(即我們常用 ——>where+列相等)

内連接配接把兩個表中的資料連接配接生成第三個表,第三個表中僅包含那些滿足連接配接條件的資料行。

内連接配接使用INNER JOIN連接配接運算符,并且使用ON關鍵字指定連接配接條件。

内連接配接是一種最常用的連接配接方式,是以JOIN關鍵字前面可以省略連接配接類型,預設為内連接配接。

内連接配接的文法格式:

3. 連接配接查詢:inner join、left join、right join 、full join、cross join

inner join例子1:

查詢每個學生的姓名、課程号和成績。 
USE teaching 
SELECT student.sname, sc.cno, sc.score
FROM student INNER JOIN sc ON student.sno=sc.sno


也可以利用下面的語句來實作:    
SELECT student.sname, sc.cno, sc.score
FROM student,sc
WHERE  student.sno=sc.sno

注意:當從多個表中查詢的列名相同時,列名前必須加表名。
           

inner join例子2:

查詢“計算機”專業的學生所選課程的平均分。
SELECT b.cno, avg(b.score) as 平均分
FROM student a  INNER JOIN sc b
ON a.sno=b.sno 
where a.specialty='計算機' 
GROUP BY b.cno
           

2. 自連接配接【inner join】(即我們常用 ——>where+列相等)

連接配接操作也可以在同一張表内進行自身連接配接,即将同一個表的不同行連接配接起來。

自連接配接必須為表指定兩個别名,使之在邏輯上成為兩張表。

從“teaching”庫中查詢同名學生的資訊。

SELECT * FROM student a  INNER JOIN student b  ON a.sname=b.sname
AND a.sno<>b.sno
           

<>是不相等的意思

3. 外連接配接【left join、right join 、full join】

自己的了解:

左外連接配接:連接配接的時候,左邊的表

部分行

可能沒有連接配接上,然後把這部分保留到結果集中,沒有的屬性為null

右外連接配接:連接配接的時候,右邊的表

部分行

可能沒有連接配接上,然後把這部分保留到結果集中,沒有的屬性為null

ppt上:

左外連接配接:對連接配接條件中左邊的表不加限制;

右外連接配接:對右邊的表不加限制;

全外連接配接: 對兩個表都不加限制,所有兩個表中的行都會包括在結果集中。

3. 連接配接查詢:inner join、left join、right join 、full join、cross join

左外連接配接left join 例子:

在“teaching”庫中查詢每個學生及其選修課程的成績情況(含未選課的學生資訊)。

SELECT student.*,sc.cno,sc.score
FROM student LEFT JOIN sc
ON student.sno=sc.sno


查詢所有男生的選課資訊,包括沒選課的男生。
SELECT student.*,sc.cno,sc.score
FROM student LEFT JOIN sc
ON student.sno=sc.sno 
where ssex='男'
           

全連接配接 full join例子:

查詢每個學生及其選修課程的情況(含未選課的學生資訊及未被選修的課程資訊)。

SELECT course.*,sc.score,student.sname, student.sno
FROM course FULL JOIN sc ON course.cno=sc.cno 
FULL JOIN student  ON student.sno=sc.sno
           
3. 連接配接查詢:inner join、left join、right join 、full join、cross join

4. 交叉連接配接【cross join】

交叉連接配接也被稱為笛卡爾積連接配接,包含所連接配接的兩個表中所有行的全部組合。

交叉連接配接使用CROSS JOIN關鍵字。交叉連接配接沒有實際意義,但是了解外連接配接和内連接配接的基礎。

自己的了解:

左邊是n行,右邊是n行,則結果集為n*n行

查詢所有學生可能的選課情況。
SELECT a.*,b.cno,b.score
FROM student a CROSS JOIN sc b