[SQL] 查詢語法基本介紹 Part 3 (群組, 別名, DISTINCT, 合併, 特定字串, TOP)
群組_GROUP BY
將相同的資料合併在一起。
SELECT tel, sum(fee) /* sum(fee)會是一個計算值 ((根據每一群組做加總 */
FROM bill
GROUP BY tel /*要群組的欄位 ((在bill資料表中,針對tel欄位的相同值綁在一起。*/
**group by 產出的表中出現的欄位,除了計算的值之外,要設定在group by後面的欄位才可放。(如下方的例子)
/* 先根據電話group一次,之後再用地址group一次。 */
Select tel, sum(fee), address
From bill, house
Where bill.hid = house.hid
Group by tel, address
別名_as
暫時性的替換名稱,資料表或欄位都可以。別名除了單一英文字外,其餘需用單引號夾住。備註:Oracle不可打as;MS-SQL必須打as
Select *
From userinfo as a, live as b, house as c
Where a.uid = b.uid and b.hid = c.uid
SELECT
a.uid AS '身份證字號',
cname AS '姓名',
address AS '住址',
tel AS '電話'
FROM
userinfo AS a, live AS b, house AS c, phone AS d
WHERE
a.uid = b.uid AND
b.hid = c.hid AND
c.hid = d.hid
ORDER BY a.uid
不重複的資料_DISTINCT
拿掉重複的資料,使產出的資料表中不重複。/*列出所有的姓氏*/
SELECT DISTINCT left(cname, 1) 讓重複的姓氏(第一個字)拿掉
FROM userinfo
綜合練習_DISTINCT, count(), 巢狀查詢
列出每個姓氏有幾筆資料
SELECT lastname, count(*) AS n
FROM (
SELECT left(cname, 1) as lastname
FROM userinfo
) AS a
GROUP BY lastname
老師分享:DISTINCT 有時可當救命的工具
E.g. 查詢的資料有重複,很明顯就是有錯誤,若事態緊急,可先用distinct解決重複的問題。之後再找重複資料的問題點。
取欄位值的特定字串_left, right, substring
Select left(‘abcdef’, 2) /*從左邊的字串中取兩個字*/Select right(‘abcdef’, 2) /*從右邊的字串中取兩個字*/
Select substring(‘abcdef’, 2, 3) /*從字串的第二個位置取三個字*/
合併_UNION ALL
合併兩個一模一樣的查詢結果。
/*
select * from userinfo where uid ='A01'
union all
select * from userinfo where uid ='A03'
*/
額外的範例:臨時加入一筆測試帳號 防止原始資料誤刪或修改。
select * from userinfo
union all
select 'AAA','測試帳號1'
union all
select 'BBB','測試帳號2‘
**與distinct功能合用 可解決問題
前幾筆資料_TOP (MS-SQL Only)
--top '筆數' (指定資料查詢前幾筆)
select top 5 * from bill order by fee desc
--top 'percent' (指定查詢前百分之幾的資料)
select top 5 percent * from bill order by fee desc
留言
張貼留言