[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

合併兩個一模一樣的查詢結果。

--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



留言

Popular Posts

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

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

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