sql關系運算
⑴ mysql的 四種關系運算
關系運算包括四種:投影、選擇、連接、除。
在任何一種資料庫管理系統中(包括MySQL),投影對應於SELECT子句,選擇對應於WHERE子句,連接對應於JOIN子句,但除沒有直接的對應語句,需要根據題目的實際含義書寫復雜的SQL,通常都會包含子查詢。
⑵ SQL常用的幾種連接(JOIN)小結
連接運算是8種關系運算中的一種。
五種JOIN方式:
1.INNER JOIN or JOIN2.OUTER JOIN
2.1LEFT OUTER JOIN or LEFT JOIN
2.2RIGHT OUTER JOIN or RIGHT JOIN
2.3FULL OUTER JOIN or FULL JOIN3.NATURAL JOIN4.CROSS JOIN5.SELF JOINPS:JOIN中的簡寫為語法糖,實際中寫出來方便讀一點而已12345678910
兩種連接條件:
1.Equi JOIN 1.1NATURAL 1.2USING(a,b) 1.3= ...2.Theta JOIN 2.1>= 2.2<= 2.3> ...PS:USING(...)指定需要哪些列相等。ON則可以指定任意的連接條件(=,>=,<=,!=,>,<...)123456789101112
JOIN or INNER JOIN
返回兩個表中同時滿足條件的元組對,不滿足的將被丟棄。
OUTER JOIN
LEFT OUTER JOIN
返回左表所有行以及右表滿足條件的行,左表有值右表無值填充為null
RIGHT OUTER JOIN
返回右表所有行以及左表滿足條件的行,右表有值左表無值填充為null
FULL OUTER JOIN
返回所有表的所有行,在滿足條件的行之外,左表滿足右表不滿足或者相反,均填充null
NATURAL JOIN
1、來自兩個關系的元組對在共同屬性上的值相同。(不限於一個共同屬性,也可以是多個共同屬性)
2、去掉重復的屬性(列)。
3、列出屬性的順序:先是共同屬性,然後是第一個關系的屬性,最後是第二個關系的屬性。
為了防止兩個表有多個共同屬性時natural join 會忽略部分需要的元組對,應使用join…using(…),以指定需要哪些列相等
join…using(…)連接只能局限在指定的屬性上
CROSS JOIN
返回笛卡兒積
SELF JOIN
相當於A JOIN A
最後放一張圖:
⑶ sql,關系代數~~
資料庫關系代數表達式學習
關系代數是關系資料庫系統查詢語言的理論基礎。很有必要學習一下,有些是用代數表達式很方便的東西,用SQL寫出來還是挺麻煩的,並不是想像當中那麼直接。
種操作:一、關系代數的9種操作:
關系代數中包括了:並、交、差、乘、選擇、投影、聯接、除、自然聯接等操作。
五個基本操作:五個基本操作:並(∪)、差(-)、笛卡爾積(×)、投影(σ)、選擇(π)
四個組合操作:四個組合操作:交(∩)、聯接(等值聯接)、自然聯接(RS)、除法(÷)注2:等值連接表示先做笛卡爾積(×)之後,對相應列進行選擇或等值關聯後的結果(僅篩選行、不篩選列)注2:自然連接表示兩個關系中若有相同名稱的屬性,則自動作為關聯條件,且僅列出一列
二、關系代數表達式:關系代數表達式:
由關系代數運算經有限次復合而成的式子稱為關系代數表達式。這種表達式的運算結果仍然是一個關系。可以用關系代數表達式表示對資料庫的查詢和更新操作。
三、舉例說明:舉例說明:
設教學資料庫中有3個關系:
學生關系S(SNO,SNAME,AGE,SEX)學習關系SC(SNO,CNO,GRADE)課程關系C(CNO,CNAME,TEACHER)
(1)檢索學習課程號為C2的學生與成績-----------------------------------SELECTSNO,GRADEFROMSCWHERECNO='C2'------------------------------------
π
SNO,GRADE(σCNO='C2'(SC))
************************************
(2)檢索學習課程號為C2的學生與-----------------------------------SELECTSC.SNO,S.SNAMEFROMSC,SWHERESC.SNO=S.SNOANDSC.CNO='C2'-----------------------------------π
SNO,SNAME(σCNO='C2'(S
SC))
此查詢涉及S和SC,先進行自然連接,然後再執行選擇投影操作。---π
SNO,SNAME(S)
(πSNO(σCNO='C2'(SC)))
自然連接的右分量為"學了C2課的學生的集合"。此表達式比前一個表達式優化,執行起來要省時間、省空間。************************************
(3)檢索選修課程名為MATHS的學生與------------------------------------
SELECTSC.SNO,S.SNAMEFROMSC,S,CWHERESC.SNO=S.SNOANDSC.CNO=C.CNOANDC.CNAME='MATHS'-----------------------------------π
SNO,SANME(σCNAME='MATHS'(S
SCC))
************************************
(4)檢索選修課程號為C2或C4的學生-----------------------------------SELECTSNOFROMSCWHERECNO='C2'ORCNO='C4'-----------------------------------π
SNO(σCNO='C2'∨CNO='C4'(SC))
************************************
(5)檢索至少選修課程號為C2或C4的學生
-----------------------------------SELECTSA.SNOFROMSCASSA,SCASSBWHERESA.SNO=SB.SNOANDSA.CNO='C2'ANDSB.CNO='C4'-----------------------------------π1(σ1=4∧2='C2'∧5='C4'(SC×SC))************************************
(
6)檢索不學C2課的學生與年齡-----------------------------------SELECTSNAME,AGEFROMSMINUSSELECTS.SNAME,S.AGEFROMSC,SWHERESC.SNO=S.SNOANDSC.CNO='C2'(Oracle)------------------------------------
π
SNAME,AGE(S)-πSNAME,AGE(σCNO='C2'(S
SC))
************************************
(7)檢索學習全部課程的學生-----------------------------------這個定義用SQL表示比較麻煩,略過-----------------------------------π
SNO,CNO(SC)÷πCNO(C)
先用除法取出選取所有課程的SNO集(除法可以理解為一個Filter)π
SNAME(S
(πSNO,CNO(SC)÷πCNO(C)))
再關聯S表取出SNAME************************************
(8)檢索所學課程包含S3所學課程的學生-----------------------------------這個定義用SQL表示比較麻煩,略過-----------------------------------π
SNO,CNO(SC)÷
πCNO(σSNO='S3'(SC))
同樣運用了除法的特性
************************************
(9)將新課程元組將新課程元組('C10','PHYSICS','YU')插入到關系C中插入到關系-----------------------------------INSERTINTOCVALUES('C10','PHYSICS','YU')-----------------------------------(C∪('C10','PHYSICS','YU'))∪記住該符號的用法************************************
(10)將S4選修課程號為C4的成績改為85分-----------------------------------UPDATESCSETGRADE=85WHERESNO='S4'ANDCNO='C4'-----------------------------------(SC-('S4','C4',?)∪('S4','C4',85))-∪先用'-'實現DELETE功能,再用'∪'實現INSERT功能-注意使用?來表示檢索時忽略該欄位值************************************
四、關系代數表達式的優化:關系代數表達式的優化:
目的:為了系統在執行時既省時間又能提高效率。目的基本策略:先做選擇,運用投影去除多餘屬性等等。基本策略優化演算法:語法樹(盡量提前做選擇操作;在每個操作後,應做優化演算法個投影操作,去掉不用的屬性值)
例如:
ππ
SNO,SNAME(σGRADE>60(S
SC))進行優化後轉換為:πSNO(σGRADE>60(SC)))
SNO,SNAME(πSNO,SNAME(S)
--即提前做選擇操作;在每個操作後,應做個投影操作,去掉
不用的屬性值
又如:
S(S#,SNAME,AGE,SEX)SC(S#,C#,GRADE)C(C#,CNAME,TEACHER)
π
CNAME,TEACHER(σSEX='女'(S
SCC))進行優化後轉換為:
πCNAME,TEACHER(CπC#(πS#,C#(SC)πS#(σSEX='女'(S))))
優化前和優化後的語法樹如下所示:
⑷ 怎樣使用SQL語句實現選擇、投影和連接等關系運算
SQL語句中select對卜磨嘩孝應投影運算,where語句對應選擇運算,from後面的表對應連接運算,其中
from a, b表型蘆斗示笛卡爾集
from a join b on a.A=b.A對應自然連接
⑸ SQL語句實現關系代數中的「除法」
給定關系R(X,Y)和S(Y,Z),其中X,Y,Z為屬性組。R中Y與S中的Y可以有不同的屬性名,但必須出自相同的域集。R與S的除運算可以得到一個新的關系P(X),P是R中滿足下列條件的元組在X 屬性列上的投影: 元組在X上的分量值x的像集Y(x)包含S在Y上的投影的集合。
第一步:找出關系R和關系S中相同的屬性,即Y屬性。在關系S中對Y做投影(即將Y列取出);
第二步:被除關系R中與S中不相同的屬性列是X,關系R在屬性X上做取消重復值的投影;
第三步:求關系R中X屬性對應的像集Y;
第四步:判斷包含關系,R÷S其實就是判斷關系R中X各個值的像集Y是否包含關系S中屬性Y的所有值。
R(X,Y)÷S(Y,Z)的運算用結構化語言SQL 語句可表達為下列形式:
⑹ 述關系代數運算中的每一種運算與SQL 查詢語句有什麼關系
關系運算的投影,就是SQL查詢一列(豎),比如Select
sno
from
stu。而關系運算的選擇,就是查詢幾行(橫),比如,select
*
from
stu。關系的聯接運算,就是SQL的連接查詢(內,外,左,右,自然,等值等等),比如
Select
*
(或者某列)
from
stu,sc
where
stu.sno=sc.sno
關系的除運算應用較少也不好理解,這里不考慮。
⑺ sql語句中 <>0什麼意思
就是不等於0,<>是關系抄運算符的一襲種,常用的關系運算符有:
<,小於,例如a<b
<=,小於等於,例如a<=b
>,大於,例如a>b
>=,大於等於,例如a>=b
==,等於,例如a==b
!=,不等於,例如a!=b
(7)sql關系運算擴展閱讀:
運算符的優先順序從高到低排列:
1、括弧:( )
2、乘、除、求模運算符: * 、 / 、 %
3、加減運算符: + 、 -
4、比較運算符: = , > , < , >= , <= , <> , != , !> , !<
5、位運算符: ^ , & , |
6、邏輯運算符: NOT
7、邏輯運算符: AND
8、邏輯運算符: OR
⑻ T-sql的關系運算符有哪些
運算符是一些符號,它們能夠用來執行算術運算、字元串連接、賦值以及在欄位常量和變數之間進碧族隱行比較。在SQL Server 2005中,運算符主要有以下六大類:算術運算符、賦值運算符、位運算符、邏輯運算符以及字元串串聯接運算符。
1 .算術運算符:可在兩個表達式上執行數學運算,兩個表達式可以是數字數據類型分類的任何數據類型。包括: + , - , * , / 和取模( % )。
2 .賦值運算符:Transact - SQL中悔廳的運算符( = ),( = )還可以在列標題和為列定義值的表達式之間建立關系。
3 .位運算符:在整形數據或者二進制數據(image類型除外)之間執行位操作。
運算符 & (按位AND), | (按位OR), ^ (按位異或XOR)都是兩上操作數。
4 .比較運算符:比較兩個表達式的大小或是否相同,其比較的結果是布爾值,即:true(表達式結果為真)、false、以及unknown。
註: text , ntext ,image數據類型不可用穗橘。
5 .邏輯運算符:可把多個邏輯表達式連接起來。包括AND,OR和NOT等運算符,返回帶有true,false值和布爾數據類型。
6 .字元串串聯運算符:用 + 加號進行字元串串聯,例:語句select ' tai ' + ' hang ' ,其結果為taihang。
運算符的優先順序從高到低排列:
1 .括弧:( )
2 .乘、除、求模運算符: * 、 / 、 %
3 .加減運算符: + 、 -
4 .比較運算符: = , > , < , >= , <= , <> , != , !> , !<
5 .位運算符: ^ , & , |
6 .邏輯運算符: NOT
7 .邏輯運算符: AND
8 .邏輯運算符: OR
⑼ SQL關系代數,求至少選修了兩門以上課的學生的學號,用關系代數寫出來。
代碼入戲:
use hngy
go
/*查詢至少選修兩門課程的學生學號*/
select StuNO,count(CNO) 選修門數 from SC
group by StuNO
having count(CNO)>=2
go
(9)sql關系運算擴展閱讀
關系代數的運算有集合運算(集合<表>與集合<表>之間的運算)和關系運算(集合<表>內部的運算)集合運算:並運算: R U S 差運算: R - S 友激 交運算: R ∩ B 笛卡兒積: R x S (組合運算)。
並,交,差(是對各集合元組的重新組合;要求:參加集合操作的各結果表的列數必須相同,對應項的數據類型也必須相同)
關系運算:
選擇 , σF(R)={t|t∈R∧F(t)=True}σF(R)={t|t∈R∧F(t)=True} ------水平分割表
投影 , πA(R)={t[A]|t∈R}πA(R)={t[A]|t∈R} -------垂直分割表
連接 【/* 這里是比較運算符 */,為大於,小於的連接叫比較連接,為等於的連接叫等值連接,自然連接 ⋈ /*它是等值連接的特殊情況,結果集中公共的屬性只保留一個------去除重復橋余列。
兩表關聯,外敏告滾鍵主建出現在同一集合里(外鍵和主鍵就是重復的列,要去除一列),2*/自然, = σ XθY(R×S),擴展的還有外連接 】
⑽ sql資料庫中關系代數的除運算怎麼理解
R(A,B)/S(B)
將被除關系R按照除S不包含的屬性A進行分組,查看每個分組a,如果分組a中包含的B屬性值能夠覆蓋S中的B屬性值,則該分組符合查詢條件。