刷題日記 | 數(shù)據(jù)庫經(jīng)典例題(MySQL)

?一顆斯特拉
【注】
1.標(biāo)有??的是值得多做的題
2.參考書:
①Oracle講稿 BY帥氣的朱老師
菜鳥驛站-MySQL


基礎(chǔ)知識

【001】SQL數(shù)據(jù)庫的數(shù)據(jù)類型詳細(xì)解釋


常見函數(shù)

字符函數(shù)及說明

1.ASCII(c):用于返回一個字符ASCII碼值
2.CHAR(i):用于返回給出ASCII碼值所對應(yīng)的字符寇仓。注意笤虫,Oracle中這個函數(shù)寫作CHR(i)劫谅,這里給出的是MySQL中的用法

數(shù)字函數(shù)及說明

1.MOD(n1,n2):返回n1除以n2的余數(shù)

日期及時間及說明

1.SUBDATE(date,n):日期參數(shù)date減去n天前的日期
2.DATEDIFF(date1,date2):獲取兩個指定日期之間相隔的天數(shù)眼坏,有正負(fù)兩種情況


175. 組合兩個表(4月2日)

01 知識點(diǎn)

1.外連接查詢

格式:SELECT table1.column,table2.column… FROM
table1[LEFT|RIGHT|FULL]JOIN table2
ON table1.column1=table2.column2;

外連接分為3種類型,分別是左外連接庆尘、右外連接和完全外連接剃诅,分別有以下作用:

  • 左外連接:用于不僅返回滿足連接條件的所有記錄巷送,而且還返回不滿足連接條件的連接操作符左邊表的其他行驶忌。
  • 右外連接——用于不僅返回滿足連接條件的所有記錄,而且還返回不滿足連接條件的連接操作符右邊表的其他行笑跛。
  • 完全外連接——用于不僅返回滿足連接條件的所有記錄付魔,而且還返回不滿足連接條件的所有其他行。

這道題是“編寫一個 SQL 查詢飞蹂,滿足條件:無論 person 是否有地址信息几苍,都需要基于上述兩表提供 person 的以下信息。FirstName, LastName, City, State
”其中陈哑,前兩個變量是左表的妻坝,后兩個變量是右表的,題目要求不管由表中的變量是否為空也要返回左表的值惊窖,所以要用到左連接刽宪。


176. 第二高的薪水(4月21號)

01 知識點(diǎn)

1.limit子句

首先limit是屬于mysql的語法,用來從某個值開始界酒,取出之后的N條數(shù)據(jù)的語法圣拄。
limit有兩種方式:

  • limit a,b后綴兩個參數(shù)的時候(/參數(shù)必須是一個整數(shù)常量/),其中a是指記錄開始的偏移量毁欣,b是指從第a+1條開始庇谆,取b條記錄岳掐。
  • limit b后綴一個參數(shù)的時候,是直接取值到第多少位饭耳,類似于limit 0,b 串述。
2.ifnull()

if()和ifnull()的區(qū)別


181. 超過經(jīng)理收入的員工(4月24號)

01 反思總結(jié)

連接查詢中的WHEREJOIN分不清楚寞肖,以及想看一下什么是笛卡爾積剖煌,看看這篇文章
對兩個表里使用 Select 語句可能會導(dǎo)致產(chǎn)生笛卡爾乘積逝淹。應(yīng)該用 WHERE 語句加以限制耕姊。


182. 查找重復(fù)的電子郵箱(4月3日)

01 知識點(diǎn)

1.分組函數(shù)

使用數(shù)據(jù)分組應(yīng)注意的問題:

  • 分組函數(shù)只能出現(xiàn)在選擇列表、HAVING 子句和 ORDER BY 子句中栅葡。
  • 如果在 SELECT 語句中同時包含有 GROUP BY 茉兰、HAVING以及 ORDER BY 子句,那么必須將 ORDER BY 子句放在最后欣簇。
  • 如果選擇列表包含有列规脸、表達(dá)式和分組函數(shù),那么這些列和表達(dá)式必須出現(xiàn)在 GROUP BY 子句中熊咽,否則會出錯莫鸭。
2.HAVING

功能(干什么):使用 HAVING 子句限制分組統(tǒng)計結(jié)果。劃分好的組內(nèi)的數(shù)據(jù)應(yīng)該滿足的要求横殴。


183. 從不訂購的客戶(4月26日)

01 知識點(diǎn)

1.多行子查詢

多行子查詢

這道題知道了IN操作符和NOT操作符的用法就搞定了被因!


185. 部門工資前三高的所有員工(4月5號)


196. 刪除重復(fù)的電子郵箱(4月27號)

01 知識點(diǎn)

1.delete

數(shù)據(jù)操縱語言DML——用于改變數(shù)據(jù)庫數(shù)據(jù),包括插入衫仑、刪除和修改(INSERT梨与、UPDATE、DELETE文狱。
刪除數(shù)據(jù)語句語法

格式:DELETE FROM <table|view> [WHERE <condition>];

上面是DELETE的一般格式粥鞋,但是官方給出了另外一個格式,這道題就要用到這個特別的形式瞄崇,有點(diǎn)類似于SELECT的用法呻粹。請參考DELETE類似SELECT的用法

格式:DELETE t1 FROM t1 LEFT JOIN t2 ON t1.id=t2.id WHERE t2.id IS NULL;

02 反思&總結(jié)

182題是查找重復(fù)的郵箱苏研,那里我們用了分組函數(shù)等浊。這里是刪除重復(fù)的郵箱,用分組函數(shù)很難保留最小Id的重復(fù)郵箱楣富,很復(fù)雜呢凿掂。所以記住DELETE的這種特殊用法。


197. 上升的溫度(4月25號)

01 反思&總結(jié)

這道題用SUBDATE(date,n)DATEDIFF(date1,date2)這兩種時間函數(shù)來表示間隔一天的連接條件均可,操作中庄萎,用第二個函數(shù)運(yùn)行時間更短踪少。


574. 當(dāng)選者(4月7號)

01 知識點(diǎn)

1.子查詢

定義(是什么):子查詢是指嵌入在其他 SQL 語句中的SELECT 語句。
功能:通過在 WHERE 糠涛、HAVING援奢、START WITH 子句中使用子查詢,可以提供條件值忍捡。

分類:
子查詢的分類

【注】朱老師在課上說子查詢中不能由order by語句集漾,但是這里可以用。上網(wǎng)查了下可能是軟件更新了的原因砸脊。

586. 訂單最多的客戶(4月9號)

01 反思總結(jié)

1.LIMIT

LIMIT可用在取出單一結(jié)果的查詢中具篇,比如取唯一的最大值、最小值凌埂。


584. 尋找用戶推薦人(4月14號)

01 知識點(diǎn)

1.IS NULL操作符

MySQL 使用三值邏輯 —— TRUE, FALSE 和 UNKNOWN驱显。任何與 NULL 值進(jìn)行的比較都會與第三種值 UNKNOWN 做比較。這個“任何值”包括 NULL 本身瞳抓!這就是為什么 MySQL 提供IS NULLIS NOT NULL 兩種操作來對 NULL 特殊判斷埃疫,=NULL的表達(dá)是錯誤的。[1]


627. 交換工資(4月13號)

01 知識點(diǎn)

1.IF表達(dá)式孩哑、CASE WHEN表達(dá)式
2.字符與ASCII碼的轉(zhuǎn)化

ASCII(string):將字符串的第一個字符轉(zhuǎn)換成ASCII碼的形式
CHAR(int):將ASCII碼轉(zhuǎn)換成字符


1082. 銷售分析 I(4月16日)

01 反思總結(jié)

1.MySQL與Oracel的區(qū)別

select seller_id from Sales 
group by seller_id
having sum(price)=(select max(sum(price)) from Sales group by seller_id);

這道題中栓霜,上面這段語句在Oracle中能通過,但在MySQL中通不過横蜒,提示的錯誤信息是:

Invalid use of group function

這究竟是怎么回事胳蛮?
記住愁铺!MySQL里面不能疊加使用MAX()和SUM()鹰霍,比如MAX(SUM())。如果要找MAX(SUM())茵乱,怎么做呢?可以參考mysql – 為什么SUM()的MAX()給出錯誤的輸出孟岛?瓶竭。我們給出在M

select seller_id from Sales 
group by seller_id
having sum(price)=(select max(t) from (select sum(price) t from Sales group by seller_id) temp);

1251. 平均售價(3月26日)

01 知識點(diǎn)

1.別名

當(dāng)表名很長或者執(zhí)行一些特殊查詢的時候,為了方便操作渠羞,可以為表指定一個別名斤贰,用這個別名代替表原來的名稱。
為表指定別名的基本語法格式為:

<表名> [AS] <別名>

其中各子句的含義如下:
<表名>:數(shù)據(jù)庫中存儲的數(shù)據(jù)表的名稱次询。
<別名>:查詢時指定的表的新名稱荧恍。
AS關(guān)鍵字可以省略,省略后需要將表名和別名用空格隔開。
注意:表的別名不能與該數(shù)據(jù)庫的其它表同名送巡。字段的別名不能與該表的其它字段同名摹菠。在條件表達(dá)式中不能使用字段的別名,否則會出現(xiàn)“ERROR 1054 (42S22): Unknown column”這樣的錯誤提示信息骗爆。

2.ROUND函數(shù)

ROUND(x)函數(shù)返回最接近于參數(shù) x 的整數(shù)次氨。
ROUND(x,y)函數(shù)對參數(shù)x進(jìn)行四舍五入的操作,返回值保留小數(shù)點(diǎn)后面指定的y位摘投。

3.SUM函數(shù)

SUM()是一個求總和的函數(shù)煮寡,返回指定列值的總和。

  • 如果在沒有返回匹配行 SELECT 語句中使用 SUM 函數(shù)犀呼,則 SUM 函數(shù)返回 NULL幸撕,而不是 0。
  • DISTINCT 運(yùn)算符允許計算集合中的不同值外臂。
  • SUM 函數(shù)忽略計算中的 NULL 值杈帐。
    SELECT 語句中,允許使用 GROUP BY 子句专钉,將結(jié)果集中的數(shù)據(jù)行根據(jù)選擇列的值進(jìn)行邏輯分組挑童,以便能匯總表內(nèi)容的子集,實(shí)現(xiàn)對每個組而不是對整個結(jié)果集進(jìn)行整合跃须。
4.分組查詢

一站叼、語法格式如下:

GROUP BY { <列名> | <表達(dá)式> | <位置> } [ASC | DESC]

二、語法說明如下:
<列名>:指定用于分組的列菇民【⌒ǎ可以指定多個列,彼此間用逗號分隔第练。
<表達(dá)式>:指定用于分組的表達(dá)式阔馋。通常與聚合函數(shù)一塊使用,例如可將表達(dá)式 COUNT(*)AS' 人數(shù) '作為 SELECT 選擇列表清單的一項娇掏。
<位置>:指定用于分組的選擇列在 SELECT 語句結(jié)果集中的位置呕寝,通常是一個正整數(shù)。例如婴梧,GROUP BY 2 表示根據(jù) SELECT 語句列清單上的第 2 列的值進(jìn)行邏輯分組下梢。
ASC|DESC:關(guān)鍵字 ASC表示按升序分組,關(guān)鍵字DESC表示按降序分組塞蹭,其中ASC為默認(rèn)值孽江,注意這兩個關(guān)鍵字必須位于對應(yīng)的列名、表達(dá)式番电、列的位置之后岗屏。
注意:GROUP BY 子句中的各選擇列必須也是 SELECT 語句的選擇列清單中的一項。

三、對于 GROUP BY 子句的使用这刷,需要注意以下幾點(diǎn):

  • GROUP BY 子句可以包含任意數(shù)目的列婉烟,使其可以對分組進(jìn)行嵌套,為數(shù)據(jù)分組提供更加細(xì)致的控制崭歧。
  • GROUP BY 子句列出的每個列都必須是檢索列或有效的表達(dá)式隅很,但不能是聚合函數(shù)。若在 SELECT 語句中使用表達(dá)式率碾,則必須在 GROUP BY 子句中指定相同的表達(dá)式叔营。
  • 除聚合函數(shù)之外,SELECT 語句中的每個列都必須在 GROUP BY 子句中給出所宰。
    若用于分組的列中包含有 NULL 值绒尊,則 NULL 將作為一個單獨(dú)的分組返回;若該列中存在多個 NULL 值仔粥,則將這些 NULL 值所在的行分為一組婴谱。

1294. 不同國家的天氣類型(4月8號)

01 知識點(diǎn)

1.CASE語句

CASE 表達(dá)式的語法:


CASE表達(dá)式的語法
CASE語句例題
2.匹配

在 WHERE 子句中使用 LIKE 操作符
通配符
%:表示 0 或多個字符。
_: 表示單個字符躯泰。


1350. 院系無效的學(xué)生(3月31日)

01 反思總結(jié)

1.連接查詢與子查詢

這道題兩種方法都可以做出來谭羔,但是連接查詢比子查詢快了300ms。



  1. 作者:LeetCode
    鏈接:https://leetcode-cn.com/problems/find-customer-referee/solution/xun-zhao-yong-hu-tui-jian-ren-by-leetcode/
    來源:力扣(LeetCode)
    著作權(quán)歸作者所有麦向。商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權(quán)瘟裸,非商業(yè)轉(zhuǎn)載請注明出處。 ?

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末诵竭,一起剝皮案震驚了整個濱河市话告,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌卵慰,老刑警劉巖沙郭,帶你破解...
    沈念sama閱讀 218,451評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異裳朋,居然都是意外死亡病线,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,172評論 3 394
  • 文/潘曉璐 我一進(jìn)店門再扭,熙熙樓的掌柜王于貴愁眉苦臉地迎上來氧苍,“玉大人,你說我怎么就攤上這事泛范。” “怎么了紊撕?”我有些...
    開封第一講書人閱讀 164,782評論 0 354
  • 文/不壞的土叔 我叫張陵罢荡,是天一觀的道長。 經(jīng)常有香客問我,道長区赵,這世上最難降的妖魔是什么惭缰? 我笑而不...
    開封第一講書人閱讀 58,709評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮笼才,結(jié)果婚禮上漱受,老公的妹妹穿的比我還像新娘。我一直安慰自己骡送,他們只是感情好昂羡,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,733評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著摔踱,像睡著了一般虐先。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上派敷,一...
    開封第一講書人閱讀 51,578評論 1 305
  • 那天蛹批,我揣著相機(jī)與錄音,去河邊找鬼篮愉。 笑死腐芍,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的试躏。 我是一名探鬼主播猪勇,決...
    沈念sama閱讀 40,320評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼冗酿!你這毒婦竟也來了埠对?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,241評論 0 276
  • 序言:老撾萬榮一對情侶失蹤裁替,失蹤者是張志新(化名)和其女友劉穎项玛,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體弱判,經(jīng)...
    沈念sama閱讀 45,686評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡襟沮,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,878評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了昌腰。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片开伏。...
    茶點(diǎn)故事閱讀 39,992評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖遭商,靈堂內(nèi)的尸體忽然破棺而出固灵,到底是詐尸還是另有隱情,我是刑警寧澤劫流,帶...
    沈念sama閱讀 35,715評論 5 346
  • 正文 年R本政府宣布巫玻,位于F島的核電站丛忆,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏仍秤。R本人自食惡果不足惜熄诡,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,336評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望诗力。 院中可真熱鬧凰浮,春花似錦、人聲如沸苇本。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,912評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽圈澈。三九已至惫周,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間康栈,已是汗流浹背递递。 一陣腳步聲響...
    開封第一講書人閱讀 33,040評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留啥么,地道東北人登舞。 一個月前我還...
    沈念sama閱讀 48,173評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像悬荣,于是被迫代替她去往敵國和親菠秒。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,947評論 2 355

推薦閱讀更多精彩內(nèi)容