[SQL] 查詢語法基本介紹 Part 1

語法基本架構

select uid, cname
from userinfo
where cname = ‘王大明’

從上方的範例我們可以觀察出,在 select 後方需要鍵入欲查詢的資料欄位,也就是最終查詢完成時我們想要看到的資料表格。而 from 後方鍵入從哪一個資料表中查詢
where 後方輸入查詢條件

例一:查詢userinfo資料表中的所有欄位
select * from userinfo 

例二:查詢userinfo資料表中的特定欄位
select cname, birthday from userinfo

除了單純地查詢欄位外,透過給定條件、function的使用,可使查詢更精確。

LIKE 查詢含有特定字元的欄位

select * from userinfo where cname like = '李%'

1. 使用%符號區隔表示要查詢的關鍵字。
2. LIKE是模糊查詢,屬於全文檢索指令。
3. 欲查詢的關鍵字需以單引號 ' 夾住。
4. %符號的位置決定關鍵字查詢的方式。(請注意看以下範例!)

select * from userinfo where cname like = '李%'  /*搜尋李開頭的值*/
select * from userinfo where cname like = '%王'  /*搜尋王結尾的值*/
select * from userinfo where cname like = '%王%' /*搜尋任何含有王關鍵字的值*/

額外補充:特殊符號" _ "底線的用法

在SQL查詢中可用底線代表中英文的一個空值,並結合關鍵字做查詢。但是基本上很少用,因為一個底線只對應到一個字的關鍵字。

例如:王_ _ (王大明會出現/王磊則不會)

AND/OR 連結查詢條件

如同其他程式語言,在SQL語法中也可使用AND或OR來代表相對應的條件。
例如,當我們要查詢資料庫中,姓李與姓黃的人名時,便可使用OR來連接查詢條件。

select * from userinfo
where cname like '李%' OR cname like '黃%'

當然,AND也可以相同的方法使用,但其代表意思不同,如下方範例:
查詢資料庫中姓李且身分證字號以890結尾的人。

select * from userinfo
where cname like '李%' AND uid like '%890'

=, >, <, >=, <=, <> 數值條件

大於、等於、小於是一般數學運算式中的符號,而在這裡則是針對數值大小的尋找條件。

例如:列出電話費在500~1000元的資料
select * from bill
where fee >=500 and fee <= 1000

補充:除了以符號表示,已可以下列文字方式表示數值大小條件。
select * from bill
where fee between 500 and 1000

另外,再配合 not 的使用,也可做出下列變化:

select * from bill
where fee NOT between 500 and 1000 
/* 費用不在500~1000範圍內的金額 */

IN, NOT IN 包含某筆資料的查詢方式

利用IN或NOT IN來查詢包含某筆資料,或者查詢除了某筆資料外的其他資料,搜尋字串以單引號註明。
此搜尋方式也可用OR條件方式撰寫,如下方範例。

IN 範例:從Userinfo中列出張學友與金城武的資料

/* 寫法一*/
select * from userinfo
where cname IN ('張學友', '金城武') 
/* 寫法二*/
select * from userinfo
where cname = '張學友' OR cname = '金城武'

NOT IN 範例:查詢除了張學友與金城武外的資料

select * from userinfo
where cname NOT IN ('張學友', '金城武') 

ORDER BY 排序

排序查詢的資料,指令預設是由小到大排序,若要反向排序(大到小),則需要在ORDER BY後加上DESC。(P.S. asc 代表順向排序。)

範例:排序電話號碼。

/* 預設排序(由小到大) */
select * from phone
ORDER BY tel
/* 反向排序(由大到小) */
select * from phone 
ORDER BY tel DESC

同場加映:若要兩個以上的欄位做排序?

/* 先以姓名排序,如姓名重複再以UID反向排序 */
select * from userinfo
ORDER BY cname, uid desc

IS NULL/ IS NOT NULL 判斷是否為NULL值

如果在MS-SQL資料表中有NULL(斜體),代表該資料表格從未輸入過資料。
如果為空白是代表空字串,表示曾經輸入過資料但被刪除。
MS-SQL並不會將空字串轉成NULL值。

註:ORACLE會將空字串自動轉成NULL值(老師說以前是啦,現在不確定...)

範例:列出使用者未輸入的資料

select * from userinfo where cname IS NULL or cname = ''

同場加映:NULL值很麻煩?
當使用其他程式語言找資料時,如果資料庫的值有NULL,且未先用程式語言判斷資料是否為NULL值,程式會閃退。因為基本上程式無法處理NULL值,除了VB外幾乎都會當機。
如要解決這個問題,有以下兩種方法:
1. 後端工程師加條件式做判斷。
2. 資料庫工程師先以SQL Command先處理/判斷是否有NULL值。
---A. 使用isnull function判定該欄位是否為NULL值,若為NULL則給替代值。
/* isnull function code */
select uid isnull(cname, 'empty') from userinfo


資料來源:課堂筆記整理 PPT Page 1~11

留言

Popular Posts

[T-SQL] T-SQL 基本介紹_筆記

[SQL] 查詢語法基本介紹 Part 5 (視觀表 View)

[SQL] MS-SQL資料庫卸離與備份還原