?一顆斯特拉
【注】
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()
181. 超過經(jīng)理收入的員工(4月24號)
01 反思總結(jié)
連接查詢中的WHERE
、JOIN
分不清楚寞肖,以及想看一下什么是笛卡爾積剖煌,看看這篇文章。
對兩個表里使用 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 NULL
和IS 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á)式的語法:
2.匹配
在 WHERE 子句中使用 LIKE 操作符
通配符
%:表示 0 或多個字符。
_: 表示單個字符躯泰。
1350. 院系無效的學(xué)生(3月31日)
01 反思總結(jié)
1.連接查詢與子查詢
這道題兩種方法都可以做出來谭羔,但是連接查詢比子查詢快了300ms。
-
作者: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)載請注明出處。 ?