日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > 数据库 >内容正文

数据库

【LeetCode-SQL每日一练】—— 196. 删除重复的电子邮箱

發(fā)布時(shí)間:2023/12/10 数据库 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【LeetCode-SQL每日一练】—— 196. 删除重复的电子邮箱 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

🎈寫在前面

🙋?♂?大家好呀,我是超夢(mèng)。大家可以叫我小夢(mèng)~

小伙伴們都知道,不管是在學(xué)習(xí)中還是日常工作中,幾乎天天是要跟數(shù)據(jù)庫(kù)打交道的,為了更好的操作數(shù)據(jù)庫(kù),我們的SQL知識(shí)儲(chǔ)備是必不可少的。想要掌握好SQL,那少不了每天的練習(xí)與學(xué)習(xí)。接下來(lái)小夢(mèng)會(huì)帶領(lǐng)小伙伴們一起每天刷一道LeetCode-數(shù)據(jù)庫(kù)(SQL)相關(guān)的題目,然后在文章后例舉相關(guān)知識(shí)點(diǎn)幫助小伙伴們學(xué)習(xí)與鞏固,更好的掌握SQL。

🙋?♂? 小伙伴們?nèi)绻趯W(xué)習(xí)過(guò)程中有不明白的地方,歡迎評(píng)論區(qū)留言提問(wèn),小夢(mèng)定知無(wú)不言,言無(wú)不盡。


?目錄?

🎈寫在前面

?SQL題目概述?

?解題思路?

?方法實(shí)現(xiàn)?

?代碼測(cè)試?

?知識(shí)點(diǎn)小結(jié)?


?SQL題目概述?

題目:

編寫一個(gè) SQL 查詢,來(lái)刪除?Person?表中所有重復(fù)的電子郵箱,重復(fù)的郵箱里只保留?Id?最小?的那個(gè)。LeetCode原題連接https://leetcode-cn.com/problems/delete-duplicate-emails/

Person?表

+----+------------------+ | Id | Email | +----+------------------+ | 1 | john@example.com | | 2 | bob@example.com | | 3 | john@example.com | +----+------------------+

Id 是這個(gè)表的主鍵。


?解題思路?

  • 通過(guò)自連接將此表與它自身連接起來(lái),通過(guò)電子郵箱列。
  • 然后我們需要找到其他記錄中具有相同電子郵件地址的更大 ID。所以我們通過(guò)ID作比較找出大的數(shù)據(jù),把這個(gè)作為條件添加到WHERE子句中。
  • 因?yàn)槲覀円呀?jīng)得到了要?jiǎng)h除的記錄,然后我們使用DELETE語(yǔ)句實(shí)現(xiàn)。

?方法實(shí)現(xiàn)?

根據(jù)以上解題思路,我們可以很容易寫出題解

DELETE pson1 FROM Person pson1,Person pson2 WHERE pson1.Email = pson2.Email AND pson1.Id > pson2.Id

?代碼測(cè)試?

進(jìn)行代碼測(cè)試

?與預(yù)期結(jié)果一致,測(cè)試成功,用時(shí)166ms


?知識(shí)點(diǎn)小結(jié)?

??內(nèi)連接與外連接?

小夢(mèng)用極簡(jiǎn)單的方式帶小伙伴們過(guò)一遍內(nèi)連接外連接

?表1 classa?????????????

?????????

表2 classb

🚀1. 內(nèi)連接 inner joinjoin 默認(rèn)就是內(nèi)連接

表1與表2的交集,用上面兩個(gè)表演示一下

select classa.id as aid,classb.id as bid from classa inner join classb on classa.id = classb.id;

?查詢的結(jié)果是classa與classb的交集

🚀?2. 左外連接 left join

結(jié)果集保留左表的所有行,但右表只包含與左表匹配的行。右表相應(yīng)的空行為NULL值。

select classa.id as aid,classb.id as bid from classa left join classb on classa.id = classb.id;

?🚀?3. 右外連接 right join

結(jié)果集保留右表的所有行,但左表只包含與右表匹配的行。左表相應(yīng)的空行為NULL值。

select classa.id as aid,classb.id as bid from classa right join classb on classa.id = classb.id;

?🚀4. 全外連接 full join

會(huì)把兩個(gè)表所有的行都顯示在結(jié)果表中。

select classa.id as aid,classb.id as bid from classa full join classb on classa.id = classb.id;

小伙伴們注意啦!!!

MySQL不支持full join!!!MySQL不支持full join!!!MySQL不支持full join!!!

重要的事情要說(shuō)三遍!!!那怎么實(shí)現(xiàn)和full join一樣的效果呢?那就要通過(guò)使用union來(lái)實(shí)現(xiàn),具體實(shí)現(xiàn)SQL語(yǔ)句如下

select classa.id as aid,classb.id as bid from classa left join classb on classa.id = classb.id union select classa.id as aid,classb.id as bid from classa right join classb on classa.id = classb.id;


這篇文章如果對(duì)小伙伴們有幫助的話,希望點(diǎn)個(gè)贊支持一下~????? 十分感謝~


總結(jié)

以上是生活随笔為你收集整理的【LeetCode-SQL每日一练】—— 196. 删除重复的电子邮箱的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。