SQL,從一個表複製數據到另一個表

其中一個維護任務:將數據從一個表複製到另一個表。 你可以這樣將一個表的所有元素複製到另一個表中: INSERT INTO some\_table SELECT \* FROM other\_table 當然,如果你只想選擇一些數據,你可以這樣寫: INSERT INTO some\_table SELECT \* FROM other\_table WHERE list=94 如果你要將數據複製到的表已經有數據,你可能會遇到主鍵重複的問題。 為了讓表自動填充主鍵的自增值,你可以在選擇數據時排除主鍵列: INSERT INTO some\_table (`age`, `name`, `email`) SELECT `age`, `name`, `email` FROM other\_table 在我的案例中,id 是主鍵列,我將其排除在外。

SQL介紹

SQL(Structured Query Language)是我們用來與數據庫管理系統(DBMS)進行交互的語言。 在我們介紹了最流行的概念性數據模型,實體關係(ER),以及最受歡迎的邏輯數據模型(關聯模型)之後,是時候介紹SQL了。 SQL(Structured Query Language)是我們用來與數據庫管理系統(DBMS)進行交互的語言。 正如其名所示,它不是一種編程語言,而是一種查詢語言,後來發展成為一種用於執行比僅執行查詢更高級操作的數據庫接口。 我說“發展”,但實際上SQL一直在不斷發展。它是一個標準,最初於1986年發布,然後在1989年、1992年、1999年、2003年、2006年、2008年、2011年、2016年和寫作時最新版本的2019年進行了更新。 SQL在許多流行的DBMS中得到實現:PostgreSQL、MySQL、Oracle、SQLite、MicroSoft SQL Server等等。每個不同的數據庫實現標準,或者實現特定版本,並在其上添加自定義功能,以簡化創建查詢或添加特定功能。 除非另有說明,每次我談到SQL時,我都是談論SQL標準,而不是特定的實現。 SQL是一個非常廣泛的主題。我在不同的博客文章中涵蓋了許多其內容,包括: SQL,創建表 SQL,向表中添加數據 SQL,如何使用SELECT SQL,如何更新表結構 SQL,如何更新數據 SQL,如何刪除數據和表 SQL,處理空單元格 SQL,唯一鍵和主鍵 SQL 視圖 SQL 聯接

關聯代數

在使用關聯模型時,我們有兩組可以使用的操作。其中之一是關聯代數。 在使用關聯模型時,我們有兩組可以使用的操作。 第一組被稱為關聯代數,它是一種程序性語言。 這是SQL的基礎,因此學習它非常重要 - 因為SQL是處理關聯式數據庫的事實標準。 第二組被稱為關聯演算,與程序性不同,它是一種聲明性語言。這是我們與數據庫進行交互的一個基本差異,因為你不告訴數據庫軟件要做什麼,你只告訴它你想要什麼,然後讓它處理如何實現。 在編程語言中,這是一個常見的區別。在現代前端開發中,我們說在React中與DOM的交互是聲明式的。使用原始的JavaScript修改DOM是程序性的。 數據日誌、QBE和QUEL等語言以關聯演算作為基礎。我不打算談論它,因為我認為這是一種比SQL更專門的做事方式,但如果你有興趣,你可以看看它。 在簡介結束後,讓我們繼續講解關聯代數。 我們有兩種類型的操作: 基本操作 連接操作 關聯代數的基本操作 基本操作包括: 聯集:從兩個表中獲取數據,生成元組的和,前提是兩個表具有相同的列和屬性類型(域)。 差異:獲取包含在第一個表中但不在第二個表中的數據,生成元組的差異,前提是兩個表具有相同的列和屬性類型(域)。 笛卡爾積:從兩個表中獲取數據,並生成一個結合它們數據的單個表,基於屬性值。 選擇:根據某些條件僅提取表中的某些元組(行)。 投影:生成一個新表,只包含現有表的一個或多個屬性(列)。 重命名:用於重命名屬性,防止在不同數據中有相同名稱的多個表發生衝突。 關聯代數的連接操作 連接可能是你可以使用關聯代數進行的最強大的操作。它們建立在基本操作之上,允許你關聯不同關係(表)中包含的數據。 注意:我很快就會談到在數據庫管理系統中實際應用連接,這主要是理論上的介紹。 我們有兩種主要的連接版本:自然連接和θ連接。所有其他版本都是從這兩個版本中提取出來的。 自然連接 自然連接將兩個關係(表)進行關聯,並基於屬性的相同值創建一個新表。 首先,我們需要兩個具有相同屬性名稱(列)的關係。然後,如果關係A中的屬性值在關係B中的屬性中沒有相應的匹配值,該行不包含在結果中,它被忽略掉。 例如: 關係A: 員工編號 姓名 1 Mark 2 Tony 3 Rick 關係B: 經理姓名 員工編號 Todd 1 Albert 2 我們可以通過自然連接獲取每個員工的老闆姓名: 員工編號 姓名 經理姓名 1 Mark Todd 2 Tony Albert 由於關係中有相同的員工編號屬性名稱,結果中只出現一次,而不是兩次。 在關係A中出現的員工編號3,Rick,不包含在這個表中,因為在關係B中沒有相應的記錄。 θ-連接 Θ-連接允許根據任何條件比較兩個不同關係中的兩個列進行連接,而不僅僅是像自然連接那樣進行相等的比較。 它對兩個表執行笛卡爾積,並根據我們想要進行的選擇來過濾結果。 等值連接 等值連接是一種θ連接,其中的選擇是基於兩個不同表中屬性值的相等。 與自然連接的區別在於,我們可以選擇要比較的屬性名稱(列)。 稍後在介紹SQL時,我們將更詳細地討論連接,以便在實際應用中使用它們。

關聯型資料庫

關聯型資料庫是關聯模型理論所表達的概念的軟體實現。 在關聯型資料庫中,資料以 表格 的形式儲存。 每個表格包含一個或多個 欄位,用於存儲特定 類型 的資料,例如字串、數字等。 表格及其欄位的一組規則被稱為 模式。 每個表格都可以對每個行所包含的資料設定 限制。 表格可以相互引用,形成關聯,使用 外鍵。 資料庫管理系統是在電腦系統中實現資料庫的軟體。 通常,關聯型資料庫使用 SQL 語言 讓我們能夠創建資料庫、定義其表格模式、填充資料庫中的資料,並在需要時查詢資料。 一些實現關聯型資料庫的軟體包括 PostgreSQL、MySQL、SQLite、Oracle 和 Microsoft SQL Server。