Data Query Language(DQL)

  DQL中的select命令應該是整個SQL命令的核心了,搞定了select語法,就等於搞定了SQL

語法

select 欄位名稱
from 資料表名稱
[where 條件 ]
[group by
欲分類的欄位名稱   [having 條件 ] ] 
[order by
欲排序的欄位名稱 ]

欄位名稱

1.           可用 * 代表所有欄位,也可逐一指定欄位名稱,通常為了效率與欄位順序等考量,還是少使用 * 的方式。對於一個資料表而言,欄位的指定等同於資料表的縱向(colunm)篩選。

2.          可使用 distinct 關鍵字過濾重複出現的紀錄。

select distinct dptcd from student

3.          配合函數使用,做欄位顯示的過濾,例如substring()可顯示欄位的部分內容、len()可顯示欄位字串長度。

select substring(sid, 1, 3) from student

select sid , nm , len(nm) from student

4.          在原來欄位名稱後空一格加上另外一個名稱,可為欄位重新命名。

select sid 學號 , nm 姓名 , tall 身高 from student

5.          配合算數運算式,可將欄位的值做加減乘除的運算,成為一個虛擬欄位,並為其加上欄位名稱。

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 null

5.          通常使用 >, <, >=, <=, =, <> 等比較運算子,字元與日期欄位通常以單引號刮起來。

select nm from student where tall >= 170

6.          字元欄位使用 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 180

select 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科系名稱

 

 

 

 

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 snowman 的頭像
    snowman

    snowman的部落格

    snowman 發表在 痞客邦 留言(0) 人氣()