[SQL] 查詢語法基本練習題與解題分享

簡答題

請說明以下三者有何不同?完整備份、差異備份、卸離後拷貝檔案

完整備份:
將資料庫內的所有資料建立完整備份。因資料最完整,備份時間最長、檔案最大。

差異備份:
比對上一次資料庫的完整備份,只備份有變動的部分。
在使用差異備份時要先建立一次完整備份。
因只備份差異部分,備份時間較短,但若長時間未定期完整備份,備份檔案仍會越來越大。

卸離後拷貝檔案:
備份的資料完整度與完整備份相同,差異在於拷貝過程中需將資料庫卸離,造成資料庫需暫時性離線。
因為是直接拷貝檔案,速度會比備份還原快一些。
卸離的檔案若搬移到另一電腦使用,再重新附加資料庫時,可能會有使用者權限的問題。


基本語法練習



1. 列出姓李的姓名、住址、電話

select userinfo.uid as '身分證', cname as '姓名', address as '住址', tel as '電話'
from
userinfo Left Join live
on userinfo.uid = live.uid
left join house
on live.hid = house.hid
left join phone
on house.hid = phone.hid
where cname like '李%'

解題想法:


根據原始資料庫的設計,題目所需的姓名、住址、電話等資訊,分別儲存在Userinfo、House、Phone資料表中。因此,為了讓目標欄位能成功產出,必須先讓相關聯的資料表Join成一張大表,再帶入篩選條件--姓李的姓名。

使用語法:
1. Join--Left Join
2. Like
3. as

2. 台北市有多少棟房子

select count(address) as '台北市房屋數'
from house
where address like '台北市%'

解題想法:
這個題目是要篩選出台北市總共有多少棟房子。而在模擬的資料庫中,house資料表裡包含全
台灣的房屋地址。因此要將篩選的條件,設定在住址欄位中含有"台北市"的值,再利用count() function計算那些欄位的數量。

使用語法:
1. count()
2. like

3. 請列出王大明電話費超過 500 元的電話費資料

select userinfo.uid as UID, cname as '姓名', tel as '電話', dd as '月份', fee as '帳單金額'
from
userinfo left join live
on userinfo.uid = live.uid
left join house
on house.hid = live.hid
left join bill
on live.hid = bill.hid
where cname = '王大明' and fee > 500

解題想法:
基本概念類似第一題。題目要求我們篩選出王大明電話費超過500元的資料,代表著在條件判斷的部分,要執行姓名"王大明"以及電話費超過500兩種條件。但是,在執行條件篩選前,我們必須先建構出涵蓋所需欄位的資料表,所以同樣會用到JOIN語法。

使用語法:
1. JOIN--Left Join
2. Like
3. >

4. 請列出 2018 的所有電話費繳費資料

select * from bill
where DATEPART(yyyy, dd) = 2018

解題想法:
從bill資料表中拉出資料,利用DATEPART篩選出dd欄位中,年份為2018的資料。

使用語法:
1. Darepart()

5. 請問 2018 年 1 月 1 日星期幾?

select DATENAME(WEEKDAY,'2018-01-01')

解題想法:
使用DATENAME功能計算2018/01/01為星期幾。

使用語法:
1. DATENAME

留言

Popular Posts

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

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

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