LeetCode刷題 資料庫

2021-10-01 06:41:16 字數 2145 閱讀 9590

目錄

175.組合兩個表

176. 第二高的薪水

表1:person

+-------------+---------+

| 列名 | 型別 |

+-------------+---------+

| personid | int |

| firstname | varchar |

| lastname | varchar |

+-------------+---------+

personid 是上表主鍵

表2:address

+-------------+---------+

| 列名 | 型別 |

+-------------+---------+

| addressid | int |

| personid | int |

| city | varchar |

| state | varchar |

+-------------+---------+

addressid 是上表主鍵

firstname, lastname, city, state

解決方案:

select p.firstname , p.lastname, a.city, a.state from person as p

left join address as a on p.personid=a.personid;

小結:

inner join:如果表中有至少乙個匹配,則返回行;left join:即使右表中沒有匹配,也從左表返回所有的行

right join:即使左表中沒有匹配,也從右表返回所有的行;full join:只要其中乙個表中存在匹配,就返回行

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

+----+--------+

| id | salary |

+----+--------+

| 1 | 100 |

| 2 | 200 |

| 3 | 300 |

+----+--------+

例如上述employee表,sql查詢應該返回200作為第二高的薪水。如果不存在第二高的薪水,那麼查詢應返回null

+---------------------+

| secondhighestsalary |

+---------------------+

| 200 |

+---------------------+

解決方案:

select

ifnull(

(select distinct salary

from employee

order by salary desc

limit 1 offset 1),

null) as secondhighestsalary

小結:

select distinct 列名稱 from 表名稱
select column1, column2, columnn

from table_name

limit n ; 取前n條資料/limit n,m (第n條開始,取m條)

select column1, column2, columnn

from table_name

limit [n] offset [m];

資料庫刷題

考慮到可能不是每個人都有位址資訊,我們應該使用outer join而不是預設的inner join。注意 如果沒有某個人的位址資訊,使用 where 子句過濾記錄將失敗,因為它不會顯示姓名資訊。2.編寫乙個 sql 查詢,獲取 employee 表中第二高的薪水 salary select max ...

資料庫刷題2

1 至少連續出現三次的數字 select distinct l1.num as consecutivenums from logs l1,logs l2,logs l3 where l1.id 1 l2.id and l2.id 1 l3.id and l1.num l2.num and l2.nu...

面試刷題 資料庫

1 請回答一下什麼是事務?概念 資料庫事務 transaction 是訪問並可能操作各種資料項的乙個資料庫操作序列,這些操作要麼全部執行,要麼全部不執行,是乙個不可分割的工作單位。事務由事務開始與事務結束之間執行的全部資料庫操作組成。性質 作用 模型 優點 2 內連線和外連線有什麼區別?內連線 外連...