DW集训营数据库Mysql梳理[五]
生活随笔
收集整理的這篇文章主要介紹了
DW集训营数据库Mysql梳理[五]
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
DW集訓營數據庫Mysql梳理[五]
- 1 任務
- 2 數據導入導出
- 2.1將Excel文件導入MySQL表
- 2.2 MySQL表導出表到Excel文件
- 3 作業
- 3.1 各部門工資最高的員工
- 3.2 換座位
- 3.3 分數排名
- 參考
1 任務
任務五學習內容 數據導入導出 (見附件)將Excel文件導入MySQL表MySQL導出表到Excel文件 作業 項目七: 各部門工資最高的員工(難度:中等) 創建Employee 表,包含所有員工信息,每個員工有其對應的 Id, salary 和 department Id。 +----+-------+--------+--------------+ | Id | Name | Salary | DepartmentId | +----+-------+--------+--------------+ | 1 | Joe | 70000 | 1 | | 2 | Henry | 80000 | 2 | | 3 | Sam | 60000 | 2 | | 4 | Max | 90000 | 1 | +----+-------+--------+--------------+ 創建Department 表,包含公司所有部門的信息。 +----+----------+ | Id | Name | +----+----------+ | 1 | IT | | 2 | Sales | +----+----------+ 編寫一個 SQL 查詢,找出每個部門工資最高的員工。例如,根據上述給定的表格,Max 在 IT 部門有最高工資,Henry 在 Sales 部門有最高工資。 +------------+----------+--------+ | Department | Employee | Salary | +------------+----------+--------+ | IT | Max | 90000 | | Sales | Henry | 80000 | +------------+----------+--------+項目八: 換座位(難度:中等) 小美是一所中學的信息科技老師,她有一張 seat 座位表,平時用來儲存學生名字和與他們相對應的座位 id。 其中縱列的 id 是連續遞增的 小美想改變相鄰倆學生的座位。 你能不能幫她寫一個 SQL query 來輸出小美想要的結果呢?請創建如下所示seat表: 示例: +---------+---------+ | id | student | +---------+---------+ | 1 | Abbot | | 2 | Doris | | 3 | Emerson | | 4 | Green | | 5 | Jeames | +---------+---------+ 假如數據輸入的是上表,則輸出結果如下: +---------+---------+ | id | student | +---------+---------+ | 1 | Doris | | 2 | Abbot | | 3 | Green | | 4 | Emerson | | 5 | Jeames | +---------+---------+ 注意: 如果學生人數是奇數,則不需要改變最后一個同學的座位。項目九: 分數排名(難度:中等) 編寫一個 SQL 查詢來實現分數排名。如果兩個分數相同,則兩個分數排名(Rank)相同。請注意,平分后的下一個名次應該是下一個連續的整數值。換句話說,名次之間不應該有“間隔”。 創建以下score表: +----+-------+ | Id | Score | +----+-------+ | 1 | 3.50 | | 2 | 3.65 | | 3 | 4.00 | | 4 | 3.85 | | 5 | 4.00 | | 6 | 3.65 | +----+-------+ 例如,根據上述給定的 Scores 表,你的查詢應該返回(按分數從高到低排列): +-------+------+ | Score | Rank | +-------+------+ | 4.00 | 1 | | 4.00 | 1 | | 3.85 | 2 | | 3.65 | 3 | | 3.65 | 3 | | 3.50 | 4 | +-------+------+2 數據導入導出
附件excel文件已存百度網盤:附件excel
2.1將Excel文件導入MySQL表
將Excel文件導入到Navicat for MySQL數據庫
通過上述步驟將excel文件導入到Navicat數據庫中,在數據表窗口中,通過’+‘和’-'可以實現插入和刪除一條記錄,當要遍歷每一列添加內容時,使用’Tab’鍵即可依次往下添加數據。
2.2 MySQL表導出表到Excel文件
3 作業
3.1 各部門工資最高的員工
先建立表并插入數據:
CREATE TABLE IF NOT EXISTS Employee(Id SMALLINT PRIMARY KEY AUTO_INCREMENT,Name VARCHAR(20) NOT NULL,Salary INT NOT NULL,DepartmentId TINYINT NOT NULL ); CREATE TABLE IF NOT EXISTS Department(Id SMALLINT PRIMARY KEY AUTO_INCREMENT,Name VARCHAR(20) NOT NULL );INSERT Employee(Name,Salary,DepartmentId) Values('Joe',70000,1),('Henry',80000,2),('Sam',60000,2),('Max',90000,1);INSERT Department(Name) Values('IT'),('Sales');在處理這個問題的思路上,我首先先將表連接,再對連接好的表來設置條件,設置的條件為:對應的id相同,并且使用子查詢的方式篩選出了最大值,這里要注意的是,因為題目有最終數據表的格式,所以再select中的命名需要起別名:
SELECT d.Name as Department,e.Name as Employee,e.Salary FROM Employee e,Department d WHERE e.DepartmentId = d.Id and e.Salary = (SELECT MAX(Employee.Salary)FROM EmployeeWHERE Employee.DepartmentId = d.Id);3.2 換座位
同樣,我們先創建表結構并且插入數據:
CREATE TABLE IF NOT EXISTS seat(id TINYINT PRIMARY KEY AUTO_INCREMENT,student VARCHAR(20) NOT NULL ); INSERT seat(student) VALUES('Abbot'),('Doris'),('Emerson'),('Green'),('Jeames');接下來考慮交換相鄰的座位,如果是奇數的話,則最后一個座位不用變,這里考慮的是使用case when的條件語句:
SELECT (CASE WHEN id=counts THEN id WHEN MOD(id,2)=0 THEN id-1 ELSE id+1 END) AS id,student FROM seat ,(SELECT COUNT(id) AS counts FROM seat) ORDER BY id;3.3 分數排名
編寫一個 SQL 查詢來實現分數排名。如果兩個分數相同,則兩個分數排名(Rank)相同。
首先創建表以及插入語句:
現在的問題是,如何select出score,并且還select出score的排名?現在有一個思路是:所謂的現在的排名,實質上表示的意思是當前大于或等于其對應分數的數字,比如4,還有相同的分數4,那么其對應的排名應該是1。于是我們需要在score表中找出大于或者等于該分數的不重復的分數,然后降序排列:
SELECT Score,(SELECT COUNT(DISTINCT Score)FROM score AS s2 WHERE s2.Score>=s1.Score) FROM score AS s1 ORDER BY Score DESC;參考
MySQL實現
總結
以上是生活随笔為你收集整理的DW集训营数据库Mysql梳理[五]的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 前端学习(2745):重读vue电商网站
- 下一篇: VB连接SQL SERVER实例