MYSQL學習04--數據導入導出及實戰練習
阿新 • • 發佈:2019-04-07
dep png 導入導出 mys ins avi name key 兩個
1、數據導入導出
MySQL表導出,且是CSV格式
我使用navicat導入導出,導出過程為:
右鍵表名->導出向導->選擇csv文件->下一步選擇源表名->下一步選擇導出字段->勾選包含列標題等配置->
開始->導出成功
再將CSV表導入數據庫
右鍵表名->導入向導->選擇csv文件->下一步選擇導入文件->下一步設置分隔符->下一步設置字段名稱,導入起始結束行 ->下一步設置源表目標表->設置字段 ->下一步選擇導入模式->點擊開始導入->導入成功
2、作業
- 項目七: 各部門工資最高的員工(難度:中等)
------------------------------------------------------------ -----**************項目七******************************----- ------------------------------------------------------------ CREATE TABLE employee ( id INT UNSIGNED AUTO_INCREMENT, name VARCHAR(20) NOT NULL, salary INT(10) NOT NULL, departmentId INT UNSIGNED NOT NULL, PRIMARY KEY(id) )ENGINE=INNODB DEFAULT CHARSET=utf8; INSERT INTO employee(name,salary,departmentId) VALUES("Joe",70000,1); INSERT INTO employee(name,salary,departmentId) VALUES("Henry",80000,2); INSERT INTO employee(name,salary,departmentId) VALUES("Sam",60000,2); INSERT INTO employee(name,salary,departmentId) VALUES("Max",90000,1); CREATE TABLE department( departmentId INT UNSIGNED AUTO_INCREMENT, d_name VARCHAR(20) NOT NULL, PRIMARY KEY(departmentId) )ENGINE=INNODB DEFAULT CHARSET=utf8; INSERT INTO department(d_name) VALUES('IT'); INSERT INTO department(d_name) VALUES('Sales'); --GROUP BY 和MAX()函數不能直接一起用,GROUP BY返回的是小組第一行的值,MAX()返回的是最大的,2組值組合在一起,會有錯誤 SELECT d.d_name,e.name,e.salary FROM employee e LEFT JOIN department d on e.departmentId=d.departmentId where e.salary IN (SELECT MAX(salary) FROM employee GROUP BY departmentId);
- 項目八: 換座位(難度:中等)
小美是一所中學的信息科技老師,她有一張 seat 座位表,平時用來儲存學生名字和與他們相對應的座位 id。
其中縱列的 id 是連續遞增的
小美想改變相鄰倆學生的座位。
你能不能幫她寫一個 SQL query 來輸出小美想要的結果呢?
------------------------------------------------------------ -----**************項目八、換座位************************--- ------------------------------------------------------------ CREATE TABLE seats( id INT UNSIGNED AUTO_INCREMENT, sname VARCHAR(40) NOT NULL, PRIMARY KEY(id) )ENGINE= INNODB DEFAULT CHARSET=utf8; INSERT INTO seats(sname) VALUES("Abbot"); INSERT INTO seats(sname) VALUES("Doris"); INSERT INTO seats(sname) VALUES("Emerson"); INSERT INTO seats(sname) VALUES("Green"); INSERT INTO seats(sname) VALUES("Jeames"); SELECT ( CASE WHEN id%2=1 and id = (SELECT COUNT(*) FROM seats) THEN id WHEN id%2 =1 THEN id+1 ELSE id-1 END ) AS id,sname FROM seats ORDER BY id;
- 項目九: 分數排名(難度:中等)
編寫一個 SQL 查詢來實現分數排名。如果兩個分數相同,則兩個分數排名(Rank)相同。請註意,平分後的下一個名次應該是下一個連續的整數值。換句話說,名次之間不應該有“間隔”。
------------------------------------------------------------
-----**************項目九、分數排名************************--
------------------------------------------------------------
CREATE TABLE score (
sco_id INT UNSIGNED AUTO_INCREMENT,
score FLOAT NOT NULL,
PRIMARY KEY(sco_id)
)ENGINE=INNODB DEFAULT CHARSET=utf8;
INSERT INTO score(score) VALUES(3.50);
INSERT INTO score(score) VALUES(3.65);
INSERT INTO score(score) VALUES(4.00);
INSERT INTO score(score) VALUES(3.50);
INSERT INTO score(score) VALUES(3.85);
INSERT INTO score(score) VALUES(4.00);
INSERT INTO score(score) VALUES(3.65);
SELECT score,(
SELECT COUNT(DISTINCT(score))+1
FROM score
WHERE Score>s1.Score
) AS RANK
FROM score AS s1
ORDER BY Score DESC,sco_id ASC;
3、MySQL 實戰 - 復雜項目
- 項目十:行程和用戶(難度:困難)
------------------------------------------------------------
-----*******項目十、行程和用戶****************************--
------------------------------------------------------------
CREATE TABLE trips(
id INT UNSIGNED AUTO_INCREMENT,
client_id INT NOT NULL,
driver_id INT NOT NULL,
city_id INT NOT NULL,
status enum('completed','cancelled_by_driver','cancelled_by_client'),
request_at DATE NOT NULL,
PRIMARY KEY(id)
)ENGINE=INNODB DEFAULT CHARSET=utf8;
INSERT INTO trips(client_id,driver_id,city_id,status,request_at) VALUES(1,10,1,'completed','2013-10-01');
INSERT INTO trips(client_id,driver_id,city_id,status,request_at) VALUES(2,11,1,'cancelled_by_driver','2013-10-01');
INSERT INTO trips(client_id,driver_id,city_id,status,request_at) VALUES(3,12,6,'completed','2013-10-01');
INSERT INTO trips(client_id,driver_id,city_id,status,request_at) VALUES(4,13,6,'cancelled_by_client','2013-10-01');
INSERT INTO trips(client_id,driver_id,city_id,status,request_at) VALUES(1,10,1,'completed','2013-10-02');
INSERT INTO trips(client_id,driver_id,city_id,status,request_at) VALUES(2,11,6,'completed','2013-10-02');
INSERT INTO trips(client_id,driver_id,city_id,status,request_at) VALUES(3,12,6,'completed','2013-10-02');
INSERT INTO trips(client_id,driver_id,city_id,status,request_at) VALUES(2,12,12,'completed','2013-10-03');
INSERT INTO trips(client_id,driver_id,city_id,status,request_at) VALUES(3,10,12,'completed','2013-10-03');
INSERT INTO trips(client_id,driver_id,city_id,status,request_at) VALUES(4,13,12,'cancelled_by_client','2013-10-03');
CREATE table users (
userId INT UNSIGNED AUTO_INCREMENT,
banned VARCHAR(4) NOT NULL,
role enum('client','driver','partner'),
PRIMARY KEY(userId)
)ENGINE=INNODB DEFAULT CHARSET=utf8;
INSERT INTO users(banned,role) VALUES( "No",'client');
INSERT INTO users(banned,role) VALUES( "Yes",'client');
INSERT INTO users(banned,role) VALUES( "No",'client');
INSERT INTO users(banned,role) VALUES( "No",'client');
INSERT INTO users(banned,role) VALUES( "No",'driver');
INSERT INTO users(banned,role) VALUES( "No",'driver');
INSERT INTO users(banned,role) VALUES( "No",'driver');
INSERT INTO users(banned,role) VALUES( "No",'driver');
SELECT t.request_at AS 'Day',
ROUND((SUM(CASE WHEN t.Status LIKE 'cancelled%' THEN 1 ELSE 0 END))/COUNT(*),2) AS 'Cancellation Rate'
FROM trips AS t INNER JOIN users AS u
ON u.userId = t.client_id AND u.banned = 'No'
GROUP BY t.request_at;
- 項目十一:各部門前3高工資的員工(難度:中等)
將項目7中的employee表清空,重新插入以下數據(其實是多插入5,6兩行),編寫一個 SQL 查詢,找出每個部門工資前三高的員工。例如,根據上述給定的表格,查詢結果應返回,此外,請考慮實現各部門前N高工資的員工功能。
CREATE TABLE employee (
id INT UNSIGNED AUTO_INCREMENT,
name VARCHAR(20) NOT NULL,
salary INT(10) NOT NULL,
departmentId INT UNSIGNED NOT NULL,
PRIMARY KEY(id)
)ENGINE=INNODB DEFAULT CHARSET=utf8;
INSERT INTO employee(name,salary,departmentId) VALUES("Joe",70000,1);
INSERT INTO employee(name,salary,departmentId) VALUES("Henry",80000,2);
INSERT INTO employee(name,salary,departmentId) VALUES("Sam",60000,2);
INSERT INTO employee(name,salary,departmentId) VALUES("Max",90000,1);
INSERT INTO employee(name,salary,departmentId) VALUES("Janet",69000,1);
INSERT INTO employee(name,salary,departmentId) VALUES("Randy",85000,1);
- 項目十二 分數排名 - (難度:中等)
依然是昨天的分數表,實現排名功能,但是排名是非連續的,如下:
+-------+------+
| Score | Rank |
+-------+------+
| 4.00 | 1 |
| 4.00 | 1 |
| 3.85 | 3 |
| 3.65 | 4 |
| 3.65 | 4 |
| 3.50 | 6 |
+-------+------
CREATE TABLE score (
sco_id INT UNSIGNED AUTO_INCREMENT,
score FLOAT NOT NULL,
PRIMARY KEY(sco_id)
)ENGINE=INNODB DEFAULT CHARSET=utf8;
INSERT INTO score(score) VALUES(3.50);
INSERT INTO score(score) VALUES(3.65);
INSERT INTO score(score) VALUES(4.00);
INSERT INTO score(score) VALUES(3.50);
INSERT INTO score(score) VALUES(3.85);
INSERT INTO score(score) VALUES(4.00);
INSERT INTO score(score) VALUES(3.65);
MYSQL學習04--數據導入導出及實戰練習