數據庫基礎day02

~~我來了~~

1、自然連接
自然連接是找多個關係中共同部分,並建立屬性的並集到新關係中。

select 屬性1,屬性2
from 表1 natural join 表2 natural join 表3…;

高級形式:
select 屬性1,屬性2
from (表1 natural join 表2) join 表3 using (屬性1,屬性2);
#與自然連接類似,尋找join前後表的共同屬性1和屬性2

2、更名運算

old-name as new-name

#as子句既可出現在select子句中,也可出現在from子句中。
#as可以適用於重命名關係,可以比較同一個關係中的元組的情況,此時需要把一個關係跟它自身進行笛卡爾積運算。
#用來重命名關係的標識符被乘坐“表別名”。

3、字符串運算
#用一對單引號來表示字符串,字符串大小寫敏感。然而在MySQL和SQL Server中匹配字符串時不區分大小寫。

用兩個特殊字符描述模式:
%:匹配任意子串
_:匹配任意一個字符

例如 ‘Intro%’ 匹配任何以“Intro”開頭的字符串
%Comp% 匹配任何包含Comp子串的字符串。
_ _ _匹配只含有3個字符的字符串
_ _ _%匹配至少含有3個字符的字符串

使用like來表達模式:
select dept_name
from department
where building like ’ %Waston%’;

轉義字符的使用:
使用escape來定義轉義字符:
like ‘ab%cd%’ escape’’
#上式將匹配所有以ab%cd開頭的字符串,其中\是轉義字符。

4、select子句 * 屬性
*星號可以用在select子句中表示“所有的屬性”
select instructor .*
表示instructor中的所有屬性都被選中。

5、排列元組的顯示次序
order by子句可以讓查詢結果中元組按排列順序顯示。默認是升序。

使用desc表示降序,asc表示升序。
可以同時對多個屬性排序,例如:
select *
from instructor
order by salary desc, name asc;
#首先對工資降序排列,工資相同時對姓名升序排列。

6、where子句謂詞
between 比較運算符

where salary between 9000 and 10000
#找出工資在9000到10000的。

此外還有not between 運算符。

可以對n維元組運用比較運算符,例如
(a1,a2) <= (b1,b2) #在a1<=b1且a2<=b2時爲真。

集合運算

1、並運算 union

查詢1
union
查詢2

#union運算自動去除重複。
#要想保留所有重複,用union all 替代union

2、交運算 intersect

查詢1
intersect
查詢2

#intersect運算自動去除重複。
#要想保留所有重複,用intersect all 替代intersect

3、差運算 except

查詢1
except
查詢2

#從查詢1中輸出所有不出現在查詢2中的結果。即查詢1-(查詢1交查詢2),輸出的是查詢1剩下的結果

#except運算自動去除重複。
#要想保留所有重複,用except all 替代except

7、空值
#若一算術表達式的輸入爲空,則結果爲空。
#使用“unknown”作爲介於true 和 false 中的第三個邏輯值。

and:true和unknown返回unknown,false和unknown返回false
or:true和unknown返回true,false和unknown返回unknown
not:not unknown 返回 unknown

#如果where子句中對一個元組計算出false或者unknown,則該元組不能加入到結果集中。

#在謂詞中使用 null 測試空值。
where salary is null;
where salary is not null;

#在謂詞中 null=null 會返回unknown而不是true

#如果元組在所有屬性上取值相等,那麼被當做相同元祖,即使某些值爲空。

聚集函數
avg、min、max、sum、count。
sum和avg應用於數字集,其他三個可以用在非數字集,比如字符串。

1、基本聚集
select avg(salary) as avg_salary
#取平均工資,取名爲avg_salary
#在計算平均值是,保留重複元組是很重要的。

經常使用count計算一個關係中元組的個數,該函數寫法是count()
select count(
)
from course;
#不允許在count(*)時使用distinct。

2、分組聚集
group by子句。所有屬性上取值相同的元組將被分在一個組中。

select dept_name , avg(salary) as avg_salary
from instructor
group by dept_name;
#會把dept_name相同的首先聚集起來。

3、having子句
用來對 分組 限定條件。
having子句中的謂詞在形成分組後才起作用。

select dept_name , avg(salary) as avg_salary
from instructor
group by dept_name
having avg(salary) >42000;
#平均工資超過42000的分組纔會顯示出來。

4、對空值和布爾值的聚集
聚集函數,對除了count(*)外所有的聚集函數都忽略輸入集合中的空值。
規定空集的count運算之爲0。

##未完待續。。。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章