【MySQL】5.MySQL實戰

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;

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章