數據庫之關系代數


一、傳統的集合運算

前提:

  關系R 和 關系S 具有相同的屬性個數

1、並 ∪

R∪S=

2、差 −

R−S=

3、交 ∩

R∩S=

4、笛卡爾積 ×

(n * m)

R×S=

二、專門的關系運算

選擇σ、投影 π 關系運算、自連接

均用Student、Coures、SC 表來演示

# 自連接
/*以Course表為例*/
-- 查詢每一門課的間接先修課(即先修課的先修課)
select fist.Cno, second.Cpno
from Coures as fist, Coures as second
where fist.Cpno = second.Cno;

1、選擇σ

目的:

  選出滿足條件的 諸元組 ∧ ∨ ¬

# 【選擇σ】 不改變屬性列個數 因此用 select *
-- 比較運算符的SQL表示
select  * 
from Student 
where Sage < 20;
/*延展: [10,20]  -->  where Sage between 10 and 20; */

-- 邏輯運算符的SQL表示
 ¬   not
∧   and
∨   or

例:σSage<20 (Student)

2、投影 π

目的:

 選出滿足條件的若干 屬性列

select Sname,Sdept  
from Student;

πSname,Sdept (Student)

3、連接 θ 💖 ⋈

目的:

  從兩個關系R、S的笛卡爾積中選取 屬性間滿足一定條件的元組

①關系表

②連接運算

1、內連接

2、自然連接

3、外連接

③SQL語句

1、using關鍵字:連接查詢時如果是同名字段作為連接條件,using可以代替on出現(比on更好)

  • using是針對同名字段(using(id) === A.id = B.id)
  • using關鍵字使用后會自動合並對應字段為一個
  • using可以同時使用多個字段作為條件

2、自然連接:包含自然內連接和自然外連接

  • 自然內連接:natural join
  • 自然外連接:natural left/right join
  • 自然連接條件匹配模式:自動尋找相同字段名作為連接條件(字段名相同)
#交叉連接
select *
from r2 cross join s2;
/*類似於:(笛卡爾積)
select *
from r2, s2;
*/

-- -------------------------------

#內連接
-- 非等值連接
/*
select *
from r2, s2
where r2.C < s2.E;
*/
select *
from r2 inner join s2 on r2.C < s2.E;

-- 等值連接
/*
select *
from r2,s2
where r2.B = s2.B;
*/
select *
from r2 inner join s2 on r2.B = s2.B;

-- -------------------------------

#自然連接
select *
from r2 natural join s2;
/*類似於使用using:  
select *
from r2 inner join s2 using(B);
*/

-- -------------------------------

#外連接
-- 左外連接
/*
select *
from r2 left join s2 on r2.B = s2.B;
或者;
select *
from r2 natural left join s2;
*/
select *
from r2 left join s2 using(B);

-- 右外連接
/*
select *
from r2 right join s2 on r2.B = s2.B;
或者:
select *
from r2 natural right join s2;
*/
select *
from r2 right join s2 using(B);

其他:

自連接內容,詳見《5、DQL語言(重點)》

4、除 ÷

-- 方式1
select A
from r3 natural join s3  
GROUP BY r3.A
HAVING count(r3.A) = (
	SELECT count(*)
	FROM s3 
);

-- 方式2
select A
from r3 left join s3 using(B,C)  /*使用left join 是因為MySQL不支持💖完全外連接*/
GROUP BY r3.A
HAVING count(r3.A) = (
	SELECT count(*)
	FROM s3 
);

三、配套SQL文件下載

本篇文章制作不易,期待你們的小星星😄。

  點擊右上角 GitHub 圖標即可查看下載

四、SQL JOINS圖


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM