DQL中的select命令應該是整個SQL命令的核心了,搞定了select語法,就等於搞定了SQL。
語法
select 欄位名稱
from 資料表名稱
[where 條件 ]
[group by 欲分類的欄位名稱 [having 條件 ] ]
[order by 欲排序的欄位名稱 ]
欄位名稱
1. 可用 * 代表所有欄位,也可逐一指定欄位名稱,通常為了效率與欄位順序等考量,還是少使用 * 的方式。對於一個資料表而言,欄位的指定等同於資料表的縱向(colunm)篩選。
2. 可使用 distinct 關鍵字過濾重複出現的紀錄。
select distinct dptcd from student3. 配合函數使用,做欄位顯示的過濾,例如substring()可顯示欄位的部分內容、len()可顯示欄位字串長度。
select substring(sid, 1, 3) from studentselect sid , nm , len(nm) from student
4. 在原來欄位名稱後空一格加上另外一個名稱,可為欄位重新命名。
select sid 學號 , nm 姓名 , tall 身高 from student5. 配合算數運算式,可將欄位的值做加減乘除的運算,成為一個虛擬欄位,並為其加上欄位名稱。
select sid , nm , tall * 1.1 height from student
資料表名稱
1. 指的是屬於某個資料庫底下的資料表(table),例如student。
2. 資料表名稱若有名稱過長的情形,可以別名(alias)幫助記憶。
3. 可連結多個資料表做合併(join)查詢,此時需搭配條件式連結二個資料表的關連欄位。
select s.sid , s.nm , d.dptnm from student s , department d where s.dptcd=d.dptcd
條件
1. 指定欲篩選的欄位條件值為何? 亦可使用複合條件對於不同的欄位作設定。對於一個資料表而言,條件的指定等同於資料表的橫向(row)篩選。
2. 可使用 not 來表達與條件相反地狀況,多用在排除某些記錄的場合上。
3. 使用複合條件時多搭配邏輯運算子 and 與 or, 特別注意的是 and 的優先權較 or 為高,使用時若不確定優先順序,儘量使用小括弧包起來。
4. null代表未定或不明,要與null作比較時要使用 is 這個比較運算子,而不能使用 = , <>這些比較運算子喔。
select * from orders where paid_date is null5. 通常使用 >, <, >=, <=, =, <> 等比較運算子,字元與日期欄位通常以單引號刮起來。
select nm from student where tall >= 1706. 字元欄位使用 like 運算子時,多使用 % 與 _ 配合 運算元作模糊比對。
select dptnm from department where dptnm like '%電子%'7. 若欄位符合個數不多的條件時,通常搭配冗長的邏輯條件,此時可改用 in函數(子集合的概念)簡化之
select nm from student where not (dptcd='C507' or dptcd='C302' or dptcd='C405')select nm from student where dptcd not in ('C507' , 'C302' , 'C405')
8. 若欄位符合某個連續區間時,可使用 between ~ and ~
select nm from student where tall between 170 and 180select nm from student where bir between '1970-01-01' and '1975-12-31'
9. 配合函數使用,做條件的過濾,例如substring()可設定子字串的條件。
select nm from student where substring(sid,2,2) = '95'
欲排序的欄位名稱
order by 後接欲排序的欄位名稱,預設排序方式為由小到大(ascending),若要指定由大到小排序則需加上關鍵字 DESC
select sid, nm from student order by nm , sid desc
欲分類的欄位名稱
group by 後接欲分類的欄位名稱,同樣分類的欄位名稱會成為一筆紀錄。
select dptcd from student group by dptcd
select s.dptcd , d.dptnm from student s, department d where s.dptcd=d.dptcd group by s.dptcd --依照dptcd分組,並join科系名稱
留言列表