1.數據導入導出
1.1將excel導入MySQL表
直接用navicate:
然後
一路下去就OK:
1.2將MySQL導出excel
直接用導出功能:
OK!
2.項目實戰
2.1項目七 各部門工資最高的員工
創建Employee 表,包含所有員工信息,每個員工有其對應的 Id, salary 和 department Id。
創建Department 表,包含公司所有部門的信息。
編寫一個 SQL 查詢,找出每個部門工資最高的員工。例如,根據上述給定的表格,Max 在 IT 部門有最高工資,Henry 在 Sales 部門有最高工資。
(1)新建表
CREATE TABLE Employee(
Id INT PRIMARY KEY,
Name VARCHAR(10),
Salary INT,
DepartmentId INT)
CREATE TABLE Department(
Id INT PRIMARY KEY,
Name VARCHAR(10))
(2)插入數據
INSERT INTO Employee VALUE('1','Joe','70000','1');
INSERT INTO Employee VALUE('2','Henry','80000','2');
INSERT INTO Employee VALUE('3','Sam','60000','2');
INSERT INTO Employee VALUE('4','Max','90000','1');
INSERT INTO Department VALUE('1','IT');
INSERT INTO Department VALUE('2','Sales');
(3)查詢
SELECT c1.department,c1.employee,c1.Salary
FROM
(SELECT Department.name AS department,Employee.name As employee,Salary
FROM Employee INNER JOIN Department
ON Employee.DepartmentId=Department.Id) AS c1,
(SELECT Department.name AS department,Employee.name As employee,Salary
FROM Employee INNER JOIN Department
ON Employee.DepartmentId=Department.Id) AS c2
WHERE c1.department=c2.department
AND c1.Salary>c2.Salary;
這裏說一句,只要FROM裏的東西是一張表,都可以在FROM裏,我們這裏最外層FROM裏的東西是:
SELECT Department.name AS department,Employee.name As employee,Salary
FROM Employee INNER JOIN Department
ON Employee.DepartmentId=Department.Id;
2.2項目八 換座位
小美是一所中學的信息科技老師,她有一張 seat 座位表,平時用來儲存學生名字和與他們相對應的座位 id。 其中縱列的 id 是連續遞增的 小美想改變相鄰倆學生的座位。 你能不能幫她寫一個 SQL query 來輸出小美想要的結果呢? 請創建如下所示seat表: 示例:
假如數據輸入的是上表,則輸出結果如下:
注意: 如果學生人數是奇數,則不需要改變最後一個同學的座位。
(1)新建表
CREATE TABLE seat(
id INT ,
student VARCHAR(20)
)
(2)插入數據
INSERT INTO seat VALUE('1','Abbot');
INSERT INTO seat VALUE('2','Doris');
INSERT INTO seat VALUE('3','Emerson');
INSERT INTO seat VALUE('4','Green');
INSERT INTO seat VALUE('5','Jeames');
(3)查詢
SELECT *
FROM (
-- 遇到偶數往上移一個位置
SELECT id-1 AS id,student
FROM seat
WHERE id%2=0
UNION
-- 遇到奇數往下移一個位置
SELECT id+1 AS id,student
FROM seat
WHERE id%2=1 AND (id+1)<=(SELECT COUNT(*) FROM seat)
UNION
-- 處理最後一個位置,這裏只考慮奇數情況,保持不變(偶數已經在第一步裏處理了)
SELECT id AS id,student
FROM seat
WHERE id%2=1 AND(id+1)>(SELECT COUNT(*) FROM seat)
) AS c1
ORDER BY id ASC;
2.3項目九 分數排名
編寫一個 SQL 查詢來實現分數排名。如果兩個分數相同,則兩個分數排名(Rank)相同。請注意,平分後的下一個名次應該是下一個連續的整數值。換句話說,名次之間不應該有“間隔”。 創建以下score表:
例如,根據上述給定的 Scores 表,你的查詢應該返回(按分數從高到低排列):
(1)新建表
CREATE TABLE scores(
ID INT,
Score FLOAT);
(2)插入數據
INSERT INTO scores VALUE('1','3.50');
INSERT INTO scores VALUE('2','3.65');
INSERT INTO scores VALUE('3','4.00');
INSERT INTO scores VALUE('4','3.85');
INSERT INTO scores VALUE('5','4.00');
INSERT INTO scores VALUE('6','3.65');
(3)查詢
SELECT score,(SELECT COUNT(DISTINCT score)
FROM scores
WHERE score>=s.score) AS ran_k
FROM scores AS s
ORDER BY score DESC;