<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                # 練習 42:SQL 刪除 > 原文:[Exercise 42: Deleting with SQL](https://learncodethehardway.org/more-python-book/ex42.html) > 譯者:[飛龍](https://github.com/wizardforcel) > 協議:[CC BY-NC-SA 4.0](http://creativecommons.org/licenses/by-nc-sa/4.0/) > 自豪地采用[谷歌翻譯](https://translate.google.cn/) 這是最簡單的練習,但我希望你鍵入代碼之前思考一秒鐘。如果你將`SELECT`寫成`"SELECT * FROM"`,將`INSERT`寫成`"INSERT INTO"`,那么你會怎么編寫`DELETE`格式?你可以看下面,但是試著猜測它會是什么,然后看一看。 ```sql /* make sure there's dead pets */ SELECT name, age FROM pet WHERE dead = 1; /* aww poor robot */ DELETE FROM pet WHERE dead = 1; /* make sure the robot is gone */ SELECT * FROM pet; /* let's resurrect the robot */ INSERT INTO pet VALUES (1, "Gigantor", "Robot", 1, 0); /* the robot LIVES! */ SELECT * FROM pet; ``` 我只是簡單地通過刪除它,然后使用`dead=0`將記錄放回去,來為機器人實現非常復雜的更新。在以后的練習中,我將向你展示,如何使用`UPDATE`來實現它,所以不要以為這是更新的真正方法。 你已經熟悉了這個腳本中的大多數行,除了第五行。這里你擁有`DELETE`,它與其他命令格式幾乎相同。你提供了`DELETE FROM table WHERE tests`,以及一種方式,將其看做移除行的`SELECT`。任何在`WHERE`子句中有效的內容在這里都有效。 ## 使用其它表來刪除 記得我說過:“`DELETE`就像`SELECT`,但它從表中刪除行。” 限制是一次只能從一個表中刪除。這意味著為了刪除所有寵物,你需要執行一些額外的查詢,然后基于它們刪除。 一種方法是使用一個子查詢,根據你已經編寫的查詢來選擇要所需的 ID。還有其他的方法可以實現它,但是現在你可以根據你所知道的方法來實現它: ```sql DELETE FROM pet WHERE id IN ( SELECT pet.id FROM pet, person_pet, person WHERE person.id = person_pet.person_id AND pet.id = person_pet.pet_id AND person.first_name = "Zed" ); SELECT * FROM pet; SELECT * FROM person_pet; DELETE FROM person_pet WHERE pet_id NOT IN ( SELECT id FROM pet ); SELECT * FROM person_pet; ``` 第 1~8 行是正常起步的`DELETE`命令,但是`WHERE`子句使用`IN`,匹配`pet`中的`id`列與子查詢中返回的表。子查詢(也稱為子選擇)是正常的`SELECT`,在嘗試尋找人們擁有的寵物時,它應該看起來和以前你做的那個相似。 第 13~16 行中,然后我使用子查詢,將任何不存在的寵物從`person_pet`表中給刪除,使用`NOT IN`而不是`IN`。 SQL 處理它的方式是以下過程: + 運行末尾處括號中的子查詢,并創建一個表,帶有所有列,就像普通`SELECT`一樣。 + 將此表視為一種臨時表,來匹配`pet.id`列。 + 瀏覽`pet`表,并刪除擁有此臨時表中(`IN`)的 ID 的任何行。 ## 挑戰練習 + 將所有`ex2.sql`到`ex7.sql`合并到一個文件中,并重執行上述腳本,以便你只需運行一個新文件即可重新創建數據庫。 + 添加一些東西到腳本中,來刪除其他寵物,然后再次使用新值插入它們。記住,這不是你通常更新記錄的方式,只是為了練習。 + 練習編寫`SELECT`命令,然后將它們放在`DELETE WHERE IN`中,來刪除找到的記錄。嘗試刪除你擁有的任何死亡寵物。 + 反著操作,刪除有死亡寵物的人。 + 你真的需要刪除死的寵物嗎?為什么不在`person_pet`中移除他們的關系,并標記它們死了?寫一個查詢,從`person_pet`中去除死亡寵物。 ## 深入學習 出于完整性,你需要閱讀[`DELETE`文檔](https://sqlite.org/lang_delete.html)。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看