SQL考題(面試考題參考)

  • 假設某關聯資料庫(Relational Database)中有兩個表格(Tables)分別儲存「員工」(Employee)、「部門」(Department)。其Table Schema 如下:

Employee(EID, Name, Sex, BirthYear, Full, Salary, DeptNo)

屬性分別代表員工「編號」、「姓名」、「性別」、「出生年」、「專職否」、「薪水」、「所屬部門代號」,而以「編號」為其Primary Key, “Full”的值為字元Y 時表示專職,N 時表示兼職。

Department(DNo, Name, Area)

屬性分別代表部門「代號」、「名稱」、「所在地區」,而以「代號」為其Primary Key。「名稱」值可能為「生產部」、「行銷部」等中文字串,「所在地區」值可能為「台北市」、「高雄市」等中文字串。

請寫出下列查詢之SQL:

(一)對所有專職人員,請依男女分別列出平均年齡,平均年齡欄位另取名為Average_Year 。

SELECT
  AVG(BirthYear) AS Average_Year,Sex
FROM
  Employee
WHERE Full=’Y’
GROUP BY Sex

(二)以一道SQL列出「生產部」的員工中最高與最低薪水的差距,差距欄位取名為Salary_Difference。

SELECT
  max(Salary)-min(Salary) as ‘Salary_Difference’
FROM
  Employee,Department
WHERE
  DeptNo = DNo AND Department.Name= ‘生產部’

(三)列出包含所有所屬部門在「台北市」的員工,欄位有「姓名」(另取名為EName)、「薪水」、「所屬部門名稱」(另取名為DName)。

SELECT
  Employee.Name as ‘EName’, Salary, Department.Name as ‘DName’
FROM
  Employee,Department
WHERE
  DeptNo = DNo AND Department.Area=’台北市’

  • 某一學校的資料庫有下列三個Table:Student (班級,學號,姓名),Course (課程編號,課程名稱,開課老師),Selection(學號,課程編號)。Student 與Course 分別記錄學生與課程資料,而Selection 則記錄那些學號的學生修了那些課程的編號。

請用SQL 寫出查詢:“學生王小明或學號為99開頭的學生所選課的課程名稱及老師”(只要秀課程名稱及老師即可,不要重複)。

SELECT

  Course.課程名稱,Course.開課老師

FROM

  Student,Selection,Course

WHERE

  Student.姓名 = ‘王小明’ AND Student.學號 = Selection.學號 AND Course.課程編號 = Selection.課程編號 OR Student.學號 LIKE ‘99%’ AND Student.學號 = Selection.學號 AND Course.課程編號 = Selection.課程編號

GROUP BY Course.課程名稱,Course.開課老師

  • 今有一功能為新增訂單資料,新增作業中會同時新增兩個資料表的內容資料(訂單主檔及明細檔),為確保資料庫交易的一致性,其中一方交易失敗則整個交易都rollback,請簡述如何設計方能達到此一目的。使用 TRANSACTION交易機制:
  1. Begin Transaction:開啟交易機制。
  2. 執行資料表內容資料的寫入或異動。
  3. Commit:確認交易,在確認時資料才會寫入資料表。
  4. Rollback:回復交易,執行這行時,會回復在交易內所有T-SQL所更動的內容。

分享這篇文章的網址 這篇文章的網址(可分享到FB、LINE):

用LINE分享給朋友:


b69 刷卡通通 5% 回饋 :超商 超市 / LINE Pay / 街口 / 高鐵 / 一卡通自動加值 通通5%回饋、再享跨行轉帳提款免手續費等優惠!全台提款機 通通免提款手續費!
點我了解