力扣資料庫SQL解題記錄

2021-10-10 04:56:09 字數 3630 閱讀 5310

表結構

create

table person (personid int

, firstname varchar

(255

), lastname varchar

(255))

create

table address (addressid int

, personid int

, city varchar

(255

), state varchar

(255))

truncate

table person

insert

into person (personid, lastname, firstname)

values

('1'

,'wang'

,'allen'

)truncate

table address

insert

into address (addressid, personid, city, state)

values

('1'

,'2'

,'new york city'

,'new york'

)

題目,編寫乙個 sql 查詢,滿足條件:無論 person 是否有位址資訊,都需要基於上述兩表提供 person 的以下資訊:firstname, lastname, city, state

解題答案:

select p.firstname, p.lastname, a.city, a.state

from person p left

join address a

on p.personid = a.personid

涉及知識點:

1、droptruncatedelete的用法

drop table tablename: 刪除內容和定義,釋放空間。本質上是把整個表去掉.以後要新增資料是不可能的,除非新增乙個表。

truncate table tablename: 清空表中的所有資料,速度較快,不可回滾,其本質上是對整張表進行刪除再重新建立表。

delete table tablename:逐行刪除資料,每步刪除都是有日誌記錄的,並且可以回滾資料;本質上是逐行刪除表中的資料。

2、sql的join用法

1、inner join(簡單的join),內連線,只匹配相同的部分,即兩個資料表的交集部分。

2、left join(左連線),以left join左邊的表為基準,將右邊的表與之匹配,右邊無對應的資料顯示null。

3、right join(右鏈結),和left join想對應,以右邊的表為基準,將左邊的表進行一一對應,不存在的顯示null。

4、full outer join(全連線),生成兩個資料表的全集。

create

table

ifnot

exists employee (id int

, salary int

)truncate

table employee

insert

into employee (id, salary)

values

('1'

,'100'

)insert

into employee (id, salary)

values

('2'

,'200'

)insert

into employee (id, salary)

values

('3'

,'300'

)

題目

編寫乙個 sql 查詢,獲取 employee 表中第二高的薪水(salary)命名為secondhighestsalary

解題答案:

select ifnull(

(select

distinct salary from employee

order

by salary desc

limit

1offset1)

,null

)as secondhighestsalary

涉及知識點:

1、要取出第二高的薪水值,首先對資料進行排序用 order by desc 進行降序排序;

2、由於可能存在重複值採用distinct去重;

3、顯示第二高的薪水,可採用limit n offset m ,limit含義是顯示前n個,offset是跳過前m個;

4、考慮特殊情況若是第二高的不存在,則會報錯,需要採用ifnull(a,b)函式進行判斷,ifnull(a,b)表示若存在顯示a,不存在顯示b的結果。

表結構

create

table

ifnot

exists employee (id int

, salary int

)truncate

table employee

insert

into employee (id, salary)

values

('1'

,'100'

)insert

into employee (id, salary)

values

('2'

,'200'

)insert

into employee (id, salary)

values

('3'

,'300'

)

題目

編寫乙個 sql 查詢,獲取 employee 表中第 n 高的薪水(salary)

解題答案

create

function getnthhighestsalary(n int

)returns

intbegin

declare m int

;set m=n-1;

return

(# write your mysql query statement below.

select ifnull(

(select

distinct salary from employee order

by salary desc

limit m,1)

,null))

;end

解題思路

該題與上題類似,不同的是多了個函式,其中主要涉及的知識點如下:

#1、建立函式的格式

create

function function_name(para para_type)

return return_type

begin

function_body

end#2、定義變數

declare

value value_type

#3、每個語句結束用「;」結尾

力扣部分思路總結(解題記錄)

題號 771 簡單題 描述 查詢s字串中每乙個元素是否在j 現,並求和 思路 string find 函式 或者 hash結構 int count 0 int a 150 for auto i j for auto i s for auto i s return count 題號1104 中等題 描...

leetcode 資料庫 解題記錄

記錄一下我自己做的,leetcode的資料庫方面的問題的,思考過程和答案。175.組合兩個表 177.第n高的薪水 這道題需要寫函式,我最討厭寫函式,所以這道題我沒做。176.第二高的薪水 178.分數排名 179.最大數 這道題不是資料庫的題,是演算法的題。180.連續出現的數字 181.超過經理...

力扣1103 分糖果 II 解題記錄

題目 假設有m個糖果,n位小朋友。如果每個小朋友都分到一次算一輪,假設能分t輪,分完t輪後剩r個。即 知道了t也就求出了r m t。然後問題就簡單了,在前t輪中每個小朋友分到的糖果可以通過等差數列求和得出。第t 1輪就乙個小朋友乙個小朋友的分。第i個小朋友應該分t num people i個,若分完...