【LeetCode-SQL每日一练】—— 196. 删除重复的电子邮箱
🎈寫在前面
🙋?♂?大家好呀,我是超夢。大家可以叫我小夢~
小伙伴們都知道,不管是在學(xué)習(xí)中還是日常工作中,幾乎天天是要跟數(shù)據(jù)庫打交道的,為了更好的操作數(shù)據(jù)庫,我們的SQL知識儲備是必不可少的。想要掌握好SQL,那少不了每天的練習(xí)與學(xué)習(xí)。接下來小夢會帶領(lǐng)小伙伴們一起每天刷一道LeetCode-數(shù)據(jù)庫(SQL)相關(guān)的題目,然后在文章后例舉相關(guān)知識點幫助小伙伴們學(xué)習(xí)與鞏固,更好的掌握SQL。
🙋?♂? 小伙伴們?nèi)绻趯W(xué)習(xí)過程中有不明白的地方,歡迎評論區(qū)留言提問,小夢定知無不言,言無不盡。
?目錄?
🎈寫在前面
?SQL題目概述?
?解題思路?
?方法實現(xiàn)?
?代碼測試?
?知識點小結(jié)?
?SQL題目概述?
題目:
編寫一個 SQL 查詢,來刪除?Person?表中所有重復(fù)的電子郵箱,重復(fù)的郵箱里只保留?Id?最小?的那個。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 是這個表的主鍵。
?解題思路?
- 通過自連接將此表與它自身連接起來,通過電子郵箱列。
- 然后我們需要找到其他記錄中具有相同電子郵件地址的更大 ID。所以我們通過ID作比較找出大的數(shù)據(jù),把這個作為條件添加到WHERE子句中。
- 因為我們已經(jīng)得到了要刪除的記錄,然后我們使用DELETE語句實現(xiàn)。
?方法實現(xiàn)?
根據(jù)以上解題思路,我們可以很容易寫出題解。
DELETE pson1 FROM Person pson1,Person pson2 WHERE pson1.Email = pson2.Email AND pson1.Id > pson2.Id?代碼測試?
進行代碼測試
?與預(yù)期結(jié)果一致,測試成功,用時166ms
?知識點小結(jié)?
??內(nèi)連接與外連接?
小夢用極簡單的方式帶小伙伴們過一遍內(nèi)連接與外連接。
?表1 classa?????????????
?????????
表2 classb
🚀1. 內(nèi)連接 inner join (join 默認就是內(nèi)連接)
表1與表2的交集,用上面兩個表演示一下
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
會把兩個表所有的行都顯示在結(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!!!
重要的事情要說三遍!!!那怎么實現(xiàn)和full join一樣的效果呢?那就要通過使用union來實現(xiàn),具體實現(xiàn)SQL語句如下
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;這篇文章如果對小伙伴們有幫助的話,希望點個贊支持一下~????? 十分感謝~
總結(jié)
以上是生活随笔為你收集整理的【LeetCode-SQL每日一练】—— 196. 删除重复的电子邮箱的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python3 基础学习笔记 C06【用
- 下一篇: 我国GDP比美国少7万亿美元,人民币升值