SQL指令語法速查手冊(三)

資料表指定與結合

語法
FORM 語法指定多表格
SELECT .. FROM (指定資料表),(指定資料表)...

如果當兩張資料表有相同欄位時,沒有指定資料表的話會系統會無法取得正確目標而錯誤。要正確的執行這個敘述就必須指定特定表格,語法是在欄位前加上資料表名稱,並透過「.」(小數點)分隔。

語法如下
SELECT (指定資料表名稱).(欄位名稱),....
FROM (指定資料表),(指定資料表)..

範例
SELECT student.ID FROM student,homework
WHERE student.ID=homework.ID;

透過別名來指名資料表

定義別名常用於資料表名稱過於冗長的時候。透過定義資料表別名,就能有效的簡化冗長的資料表名稱。

語法
SELECT .. FROM (指定資料名稱) (資料表別稱)...;

範例
SELECT aaa.ID FROM student aaa, homework bbb
WHERE aaa.ID=bbb.ID;

交叉結合

交叉結合就是兩張資料表透過外積的方式來結合,而交叉結合也稱為Cross結合。

語法
SELECT ...FROM (指定資料表) CROSS JOIN (指定資料表)
SELECT ...FROM (指定資料表), (指定資料表)

範例
SELECT * FROM student,homework;

自然結合(內部結合)

自然結合的意思在兩個資料表進行交叉結合後,將其中一表內特定的欄位值與另一張資料表內特定欄位值進行相等的判斷(連結結合),自然結合也稱為等結合(相等結合)。
自然結合分為內部結合與外部結合,這邊首先介紹內部結合。

語法
1.SELECT...FROM (指定資料表),(指定資料表)
WHERE (指定資料表.指定欄位)=(指定資料表.指定欄位)
2.SELECT...FROM (指定資料表) INNER JOIN (指定資料表)
WHERE (指定資料表.指定欄位)= (指定資料表.指定欄位)

範例
SELECT * FROM student,homework
WHERE student.ID=homework.ID;

SELECT student.ID,student,name,student.height,
student.weight,homework.work FROM
student.ID=.homework.ID;

加入另一個資料表 teacher
SELECT student.ID,student.name,student.height,
student.weight,teacher.name teacher,homework.work
FROM student,homework,teacher
WHERE student.ID=homework.ID
and homework.work=teacher.work;
另一寫法
SELECT student.ID,student.name,student.height,
student.weight,teacher.name teacher,homework.work
FROM student INNER JOIN homework ON student.ID=homework.ID
INNER JOIN teacher ON homework.work=teacher.subject;

透過上面的內部結合的例子來進行進階範例,搜尋學生名字為jack的功課資料。

語法:
INNER JOIN 敘述
SELECT student.ID,student.name,student.height,
student.weight,teacher.name teacher,homework.work
FORM student INNER JOIN homework
ON student.ID=homework.ID
INNER JOIN teacher
ON homework.work=teacher.subject
WHERE student.name='jack';

where 敘述
SELECT student.ID,student.name,srudent.height
student.weight,teacher.name,homewrk.work
FROM student,homework,teacher
WHERE student.ID=homework.ID
and homework.work=teacher.subject
and student.name='jack';

自然結合(外部結合)

左外部結合

左外部結合是將SQL敘述句內的先指定的資料表作為主資料表,並且將主資料表內的資料全部保留。而被結合的資料表稱為副資料表,副資料表則是只有滿足條件時才會留下來。

語法
SELECT ...FROM (主資料表)
LEFT OUTER JOIN (副資料表) ON (條件式)

範例
SELECT student.ID,student.name,student.height,
student.weight,homework.work FROM student
LEFT OUTER JOIN homework ON student.ID=homework.ID;

右外部結合

右外部結合與左外部結合相反,會將後來指定的資料表設為主資料表,並且將主資料表所有資料輸出。

語法
SELECT ...FROM (副資料表)
right OUTER JOIN (主資料表) ON (條件式)

SQL指令語法速查手冊(二)

運算子的優先順序

優先順序運算子
1*、/、%
2+、-
3=、>、>=、<、<=、<>、!=
4&、|、^、~
5NOT
6AND
7BETWWEN、IN、LIKE、OR

「%」萬用字元應用

說明
LIKE 透過「%」萬用字元有三種常用用法:
1.透過xxx開頭:LIKE'xxx%'
2.xxx在字串中:LIKE'%xxx%'
3.xxx在字尾:LIKE'%xxx'

「_」萬用字元

說明
「_」萬用字元是一個匹配單一字元的萬用字元,「%」萬用字元是可以匹配零至多個的字元,但是「_」萬用字元僅僅只能匹配一字,是相當嚴格。

例如
價格要搜尋三位數的字串時,可能就會透過
語法(price LIKE'___') 三個_
以下則是搜尋商品名稱有5個字元的資料
select * from store where name LIKE'_____'; 五個_

欄位別名

語法
欄位 別名

範例
SELECT name,weight/((height/100)*(height/100)) BMI FROM student
篩選 name 跟 BMI(是由方程式欄位設別名為BMI)從 student 資料表出來。

指定遞增、遞減排序

語法
ORDER BY (指定欄位) (ASC遞增/DESC遞減)

指定多欄位排序

語法
ORDER BY (指定欄位) (ASC/DESC),
(指定欄位) (ASC/DESC)
多個欄位的排序首先對指定的第一個欄位來進行排序,再對下一個指定的欄位進行排序,依此類推。

將資料輸出以群組化彙總

SQL不僅僅提供查詢計算的功能,也能夠將資料表特定欄位內的值群組進行彙總。群組化的意思是將欄位內相同的值集合起來分為各個群組,並且將各個群組進行彙總。

語法
指令為 GROUP BY
SELECT * FROM (資料表) GROUP BY (指定欄位)
範例
SELECT * FROM store GROUP BY class
範例
SELECT class, count(*), sum(price), sum(cost)
FROM store GROUP BY class;

將群組化資料設定條件

HAVING 的使用語法如下
SELECT * FROM (資料表) GROUP BY (指定欄位)
HAVING (指定條件)
範例
SELECT class, count(*),sum(price), sum(cost)
FROM store GROUP BY class;
若加上HAVING一起使用:
SELECT class, count(*),sum(price), sum(cost)
FROM store GROUP BY clas
HAVING count(*)>2;
在SQL中HAVING與WHERE這個兩個指令的差異是不是不大?是否覺得為何不用WHERE就足夠了?其實WHERE跟HAVING的差別在於WHERE是用於GROUP BY之前,因此就無法GROUP BY之後的結果來進行判斷。所以無論如何在GROUP BY後要進行資料判斷時,一定要使用HAVING指令。

SQL指令語法速查手冊(一)

關聯式資料庫(RDB)

關聯式資料模型式以列、欄鎖組成的資料表來表現資料的一種資料模型。我們可以對於這種資料表進行集合原理的操作。


資料操作語言(DML)

*SELECT 搜尋資料
*INSERT 加入資料
*UPDATE 更新資料
*DELETE 刪除資料

資料定義語言(DDL)

*CREATE 建立資料庫、資料表、視圖(VIEW)
*ALTER 變更資料庫、資料表、視圖(VIEW)
*DROP 刪除資料庫、資料表、視圖(VIEW)

資料控制語言(DCL)

*GRANT 給予資料庫使用者權限
*REVOKE 刪除資料庫使用者權限
*COMMIT 確定資料變更
*ROLLBACK 取消資料變更

SQL命令結構

SQL的敘述列是具有結構的,結構內分為三類:
*指令
*短句
*敘述句
在這個範例中指令就是 SELECT、 FROM,短句是「SELECT *」、「FROM TABLE」,則整個組合就稱為敘述句。

撰寫SQL敘述時的注意事項

*在SQL中英文大小寫並無區分
*空白字元的個數並不會對敘述句造成影響
*字串型態的常數必須要用單引號包住
*中文的處理
中文的處理
對於中文的處理在SQL上是沒有問題,唯一必須注意的是字元編碼問題。字元編碼問題在設定建立資料庫的時候必須小心注意,如果該資料庫的字元編碼不符合中文的編碼設定,將會造成資料庫內的值產生亂碼的問題,以及跨平台的編碼處理問題。如果要從Window系統降資料匯入Linux系統必須特別留意,因為兩者的字元編碼為BIG,後者為UTF-8,但只要多加留意就不會有太大的問題。

SQL備註說明

備註範例語法:
# (備註說明內容)
/*(備註說明內容) */
> SELECT * table #搜尋table內的所有欄位;
> SELECT * /*搜尋所有欄位*/ FROM TABLE ;