MySQL 入門實踐專案(3 4)

2021-09-22 21:23:16 字數 3638 閱讀 1315

資料匯入匯出

將之前建立的任意一張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 事件排程器負責...