国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數(shù)據(jù)庫 > MySQL > 正文

MYSQL基礎上機練習題(七)選取特殊值綜合應用

2024-07-24 13:00:30
字體:
供稿:網(wǎng)友

一、實驗目的:

各種選取特殊值的綜合應用

二、實驗內(nèi)容:

選取一些特殊值如最大值、最小值、連續(xù)值、缺失值、重復值等

三、題目:

1.選取各部門工作年限最高的人的姓名以及其工作年限

2.選取各部門薪水最低的人的姓名以及其薪酬水平

3.選取各個部門中每個部門的員工比部門經(jīng)理薪水高的人的姓名及其薪酬水平

4.選取企業(yè)中連續(xù)遲到6天的人

5.選取還未錄入薪酬水平的員工名稱

6.選取電話號碼重復的員工姓名及其電話號碼

四、內(nèi)容:

1.選取各部門工作年限最高的人的姓名以及其工作年限

一般來說,選取工作年限最高的人,在MySQL中可以簡單地用MAX()函數(shù)求出,但當要同時輸出該人的姓名,則容易出錯,Mysql會直接選取各個部門中第一行數(shù)據(jù)的人的姓名,而非對應工作年限最高的人,如下:

SELECT Name, MAX(WorkYear), DepartmentNameFROM Employees LEFT JOIN Departments USING(DepartmentID)GROUP BY DepartmentID

得出的結(jié)果是: MYSQL最大值查詢 然而回顧一下Employees表,名字為“張揚”的員工,工作年齡只是2年而非6年 MYSQL最大值查詢

因此為了防止這類型錯誤,需要使用嵌套查詢

SELECT Name, DepartmentName, Employees.WorkYearFROMEmployees, Departments,(SELECT MAX(WorkYear) AS WorkYear, DepartmentId FROM Employees GROUP BY DepartmentId)TWHERE Employees.WorkYear = T.WorkYearAND Departments.DepartmentID = T.DepartmentIDAND Departments.DepartmentID = Employees.DepartmentIDORDER BY DepartmentName

這里的子查詢用于確定每個部門最高的工作年限:

SELECT MAX(WorkYear) AS WorkYear, DepartmentId FROM Employees GROUP BY DepartmentId

確定了薪酬水平后,再從Employees表中找出該薪酬水平對應的人的名稱以及部門ID,再通過部門ID在部門表中找到部門名稱:

SELECT Name, DepartmentName, Employees.WorkYearFROMEmployees, Departments,(#子查詢)TWHERE Employees.WorkYear = T.WorkYearAND Departments.DepartmentID = T.DepartmentIDAND Departments.DepartmentID = Employees.DepartmentIDORDER BY DepartmentName

MYSQL選取最大值

2.選取各部門薪水最低的人的姓名以及其薪酬水平

同理,選取各個部門的薪水最低的人的姓名及其薪酬,使用的也是自嵌套查詢而不能直接查詢,而由于這里涉及三個表,則需要連接三個表進行嵌套查詢

SELECT S1.InCome, Name, DepartmentNameFROM Employees E1LEFT JOIN Salary S1 USING(EmployeeID)LEFT JOIN Departments D USING(DepartmentID),(SELECT MIN(InCome) AS InCome, DepartmentIDFROM Salary S2LEFT JOIN Employees E2 USING(EmployeeID)GROUP BY E2.DepartmentID)TWHERE T.DepartmentID = E1.DepartmentIDAND T.InCome = S1.InCome

原理與第一題相同,在子查詢部分先查詢到各個部門中薪水最低的薪水水平是多少

SELECT MIN(InCome) AS InCome, DepartmentIDFROM Salary S2LEFT JOIN Employees E2 USING(EmployeeID)GROUP BY E2.DepartmentID

然后把結(jié)果輸出到外層,進行比較

SELECT S1.InCome, Name, DepartmentNameFROM Employees E1LEFT JOIN Salary S1 USING(EmployeeID)LEFT JOIN Departments D USING(DepartmentID),(#子查詢)TWHERE T.DepartmentID = E1.DepartmentIDAND T.InCome = S1.InCome

得出結(jié)果: MYSQL選取最小值

3.選取各個部門中每個部門的員工比部門經(jīng)理薪水高的人的姓名及其薪酬水平

由于部門經(jīng)理也是員工之一,因此需要連接部門經(jīng)理以及員工表,以作對比

SELECT E.Name AS Employee, E.InCome, M.Name AS Manager, M.InCome FROM(SELECT DepartmentID, Name, InComeFROM Employees E1 LEFT JOIN Salary S1 USING(EmployeeID))ELEFT JOIN(SELECT M2.DepartmentID, M2.EmployeeID, E2.Name, InCome FROM Managers M2LEFT JOIN Salary S2 USING(EmployeeID)LEFT JOIN Employees E2 USING(EmployeeID))MUSING(DepartmentID)WHERE E.InCome > M.InComeORDER BY M.DepartmentID

①首先,需要連接Employees和Salary兩個表,成為E表,代表全體員工的薪酬水平

(SELECT DepartmentID, Name, InComeFROM Employees E1 LEFT JOIN Salary S1 USING(EmployeeID))E

得出以下的表: MYSQL對比 ②然后需要連接Managers和Salary表,成為M表,代表各個部門經(jīng)理的薪酬水平

(SELECT M2.DepartmentID, M2.EmployeeID, E2.Name, InCome FROM Managers M2LEFT JOIN Salary S2 USING(EmployeeID)LEFT JOIN Employees E2 USING(EmployeeID))M

得出以下的表: MYSQL對比應用

然后把E表和M表通過相同的部門編號進行連接

SELECT E.Name AS Employee, E.InCome, M.Name AS Manager, M.InCome FROM(#全體員工的薪酬水平)ELEFT JOIN(#各個部門經(jīng)理的薪酬水平)MUSING(DepartmentID)WHERE E.InCome > M.InComeORDER BY M.DepartmentID

通過對比,可以得出結(jié)果: MYSQL對比應用

4.選取企業(yè)中連續(xù)遲到6天的人

5.選取還未錄入薪酬的員工名稱

使用ISNULL( )函數(shù)可以直接找出還未錄入薪酬的員工名稱

SELECT NameFROM EmployeesLEFT JOIN Salary USING(EmployeeID)WHERE ISNULL(InCome)

MYSQL缺失值

6.選取電話號碼重復的員工姓名及其電話號碼

選取重復的電話號碼時,可以選擇通過電話號碼來連接兩個Employees表,且連接后,員工的ID是不一樣的,則可以選擇不同員工的重復的電話號碼

SELECT DISTINCT E1.Name, E1.PhoneNumberFROM Employees E1 LEFT JOIN Employees E2 USING(PhoneNumber)WHERE E1.EmployeeID <> E2.EmployeeID

MYSQL選取重復值


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 濮阳市| 衡山县| 基隆市| 陆川县| 巍山| 涟源市| 邢台市| 汨罗市| 聂荣县| 土默特右旗| 博湖县| 金塔县| 日照市| 红原县| 嵩明县| 临朐县| 凌源市| 明水县| 平凉市| 大足县| 溧水县| 南昌市| 永福县| 长子县| 育儿| 栖霞市| 仪陇县| 青铜峡市| 白河县| 锦屏县| 清远市| 海南省| 鄂托克前旗| 临朐县| 马公市| 宣威市| 名山县| 长岛县| 铜鼓县| 罗山县| 库伦旗|