日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

DW集训营数据库Mysql梳理[五]

發布時間:2023/12/9 数据库 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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的文件類型,在數據庫的表頁面運行’導入向導’,選擇導入數據的類型:
  • 選擇Excel文件的位置,選擇文件數據源,并導入數據源中的表,這里我導入xlsx失敗,于是將xlsx文件保存為xls進行導入:
  • 選擇目標表,也可以新建一個表將數據插入:
  • 設定主鍵
  • 選擇導入模式,如果是新建表,則選擇第一項–添加記錄到目標表:
  • 導入成功
  • 對表進行操作
    通過上述步驟將excel文件導入到Navicat數據庫中,在數據表窗口中,通過’+‘和’-'可以實現插入和刪除一條記錄,當要遍歷每一列添加內容時,使用’Tab’鍵即可依次往下添加數據。
  • 2.2 MySQL表導出表到Excel文件

  • 根據表的右鍵選擇導出向導;
  • 選擇要導出的數據表格式,這里我們選擇的是xls表格格式;
  • 接下來選擇需要導出的表,并設置導出文件的位置,然后點擊下一步:
  • 導出成功
  • 在保存的位置,可以看到導出的數據表成功
  • 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)相同。
    首先創建表以及插入語句:

    -----創建表 CREATE TABLE IF NOT EXISTS score(Id TINYINT PRIMARY KEY AUTO_INCREMENT,Score FLOAT(5,2) NOT NULL ); -----插入表 INSERT score(Score) VALUES('3.50'),('3.65'),('4.00'),('3.85'),('4.00'),('3.65');

    現在的問題是,如何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梳理[五]的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。