資料匯入匯出
將之前建立的任意一張mysql表匯出,且是csv格式
再將csv表匯入資料庫
專案七: 查詢各部門工資最高的員工(難度:中等)
建立employee 表,包含所有員工資訊,每個員工有其對應的 id, salary 和 department id
create
table
employee
(id int
notnull
primary
key,
name varchar(20
)not
null
,salary int
notnull
,departmentid int);
insert
into
employee
(id,name,salary,departmentid)
values(1
,'joe'
,70000,1
),(2
,'henry'
,80000,2
),(3
,'sam'
,60000,2
),(4
,'max'
,90000,1
);
建立department 表,包含公司所有部門的資訊
create
table
department
(id int
notnull
primary
key,
name varchar(20
)not
null);
insert
into
department
(id,name)
values(1
,'it'),
(2,'sales'
);
思路:先查詢出每個部門最高的工資,然後再通過join匹配部門資訊
select d.name,e.name as employee,e.salary
from department d
join employee e
on e.departmentid = d.id
and e.salary=
(select
max(salary)
from employee
where employee.departmentid=department.id)
;
專案八: 改變相鄰倆學生的座位(如果學生人數是奇數,則不需要改變最後乙個同學的座位)
解法1:從最後結果來看就是 :
①id為偶數的需要往前挪
②id為奇數的需要往後挪
③再考慮最後一位是奇數還是偶數,奇數不變(發現偶數的情況已經包含在前面了)
通過 id%2=
1 來判斷是奇數。
這裡需要注意的地方是,最後一位,我們在判斷奇數往後挪的時候,是不包含最後一位的。所以在②的時候要限定 id 小於總個數。
select
*from
(//遇到偶數就往上移乙個位置
select id-
1as id,student
from seat where id%2=
0union
//遇到奇數就往下移乙個位置,不包含最後乙個位置
select id+
1as id,student
from seat
where id%2=
1and
(id+1)
<=
(select
count(*
)from seat)
union
// 處理最後乙個位置,這裡只考慮奇數情況,保持不變(偶數已經在第一步裡處理了)
select id as id,student
from seat
where id%2=
1and
(id+1)
>
(select
count(*
)from seat)
as ranks
order
by id asc;
解法2:將select 語句括號中內容的作用是為了更新original id 並將以id作為更新後的別名
mysql>
select(-
>
case
->
when
mod(id,2)
=1and id =
(select
count(*
)from seat)
--id為奇數且為最後乙個值時
->
then id --其值不變,為本身
->
when
mod(id,2)
=1->
then id+1-
>
else id-1-
>
end)
->
as id, student
->
from seat
專案九: 分數排名(難度:中等)
實現分數排名。如果兩個分數相同,則兩個分數排名(rank)相同。請注意,平分後的下乙個名次應該是下乙個連續的整數值。換句話說,名次之間不應該有「間隔」。
這裡的排名是連續排名。將分數去重後的清單排名就是最終排名。然後將這個排名join原始資料。
問題在於,怎麼在去重的分數清單增加一列id,這個id會隨著資料自動增加。這個可以通過引數化查詢搞定,但是我們還沒學,所以pass。
然後就有個取巧的辦法。我們還是需要獲取去重的分數清單,但是不需要排名id了:
① 原始表裡的最大值。 分數清單只取最大值,然後count(*
),這樣就只有1
② 原始表裡的第二大值。 分數清單取最大值和第二大值,然後count(*
), 這樣就是2
以此內推。
在code裡就是 分數清單裡的score要大於等於原始表的某個具體的值。
這個寫法的缺點是,每乙個原始表socre列的值,都需要重新掃瞄去重後的分數清單,在資料表大的情況下,效能會很差。
select score
,select
count
(distinct score)
from scores
where score >= s.score
)as ranks
from scores s
order
by score desc;+
-------
+-------+
| score | ranks |+--
-----+
-------
+|4.00|1
||4.00|1
||3.85|2
||3.65|3
||3.65|3
||3.50|4
|+-------
+------
-+
MySQL入門實踐 一
第一步當然是啟動mysql並登入,這裡我使用的是root賬號。service mysql start mysql u root p建立資料庫 create database ki 資料庫名字為ki使用剛剛建立的資料庫 use ki這樣就切換到資料庫ki了。通過status 命令可以檢視當前資料庫的資...
Python3 4執行緒入門
比較成熟的程式語言,基本上都有對執行緒的支援,而python也不例外,下面散仙來看下python裡面對幾個執行緒比較的類或方法 python多執行緒程式設計,一般使用thread和threading模組。thread模組想對較底層,threading模組對thread模組進行了封裝,更便於使用。所有...
《MySQL 入門教程》第 34 篇 計畫任務
mysql 支援定時執行的計畫任務,類似於 unix crontab 或者 windows 定時任務,被稱為事件 event 或者計畫事件。事件是乙個儲存在資料庫伺服器中的 sql 程式,在指定的時間範圍內定期執行,排程和執行事件的服務被稱為事件排程器 event scheduler 事件排程器負責...