SQL基礎

了解DDL,DML和JOIN

結構化查詢語言是現代數據庫體系結構的基本組成部分之一。 SQL定義了用於在所有主要平台上創建和操作關係數據庫的方法。 乍看之下,這種語言看起來可能會讓人感到恐懼和復雜,但並不是那麼困難。

SQL背後的基礎知識簡要介紹了用於創建和修改數據庫的一些主要命令。

關於SQL

SQL的正確發音在數據庫社區中是一個有爭議的問題。 在其SQL標準中,美國國家標準協會宣布官方發音是“es隊列el”。 但是,許多數據庫專業人士都把這個俚語發音稱為“續集”。 這是你的選擇。

SQL有很多種口味。 Oracle數據庫使用其專有的PL / SQL。 Microsoft SQL Server利用Transact-SQL。 所有這些變體均基於行業標準ANSI SQL。 本介紹使用ANSI兼容的SQL命令,可用於任何現代關係數據庫系統。

DDL和DML

SQL命令可以分為兩個主要的子語言。 數據定義語言(DDL)包含用於創建和銷毀數據庫和數據庫對象的命令。 在用DDL定義數據庫結構之後,數據庫管理員和用戶可以使用數據操縱語言(DML)來插入,檢索和修改其中包含的數據。

數據定義語言命令

數據定義語言用於創建和銷毀數據庫和數據庫對象。 這些命令主要由數據庫管理員在數據庫項目的設置和刪除階段使用。 下面看一下四個基本的DDL命令的結構和用法:

創建。 在計算機上安裝數據庫管理系統可讓您創建和管理許多獨立的數據庫。 例如,您可能需要維護銷售部門的客戶聯繫人數據庫和人力資源部門的人事數據庫。 CREATE命令用於在您的平台上建立這些數據庫中的每一個。 例如,命令:

創建數據庫員工

在您的DBMS上創建一個名為“employees”的空數據庫。 創建數據庫後,下一步是創建包含數據的表。 CREATE命令的另一個變體可以用於此目的。 命令:

CREATE TABLE personal_info(first_name char(20)not null,last_name char(20)not null,employee_id int not null)

在當前數據庫中建立標題為“personal_info”的表格。 在該示例中,該表包含三個屬性:first_name,last_name和employee_id以及一些附加信息。

使用。 USE命令允許您在DBMS中指定要使用的數據庫。 例如,如果您當前正在銷售數據庫中工作,並想發出一些影響員工數據庫的命令,請使用以下SQL命令為其添加前言:

使用員工

在發布操縱數據的SQL命令之前,始終要意識到您正在使用的數據庫非常重要。

改變。 一旦在數據庫中創建了一個表格,您可能需要修改其定義。 ALTER命令允許您更改表的結構而不刪除並重新創建它。 看看下面的命令:

ALTER TABLE personal_info添加工資金額null

此示例向personal_info表添加了一個新屬性 - 員工的工資。 “金錢”參數指定僱員的工資以美元和美分格式存儲。 最後,“null”關鍵字告訴數據庫,該字段對於任何給定的員工都沒有值。

下降。 數據定義語言DROP的最終命令允許我們從我們的DBMS中刪除整個數據庫對象。 例如,如果我們想永久刪除我們創建的personal_info表,我們將使用以下命令:

DROP TABLE personal_info

同樣,下面的命令將用於刪除整個員工數據庫:

DROP DATABASE員工

小心使用此命令。 DROP命令從數據庫中刪除整個數據結構。 如果要刪除單個記錄,請使用數據操縱語言的DELETE命令。

數據操作語言命令

數據操作語言(DML)用於檢索,插入和修改數據庫信息。 這些命令在數據庫的例行操作中由所有數據庫用戶使用。

插。 SQL中的INSERT命令用於將記錄添加到現有表中。 回到上一節中的personal_info示例,想像我們的HR部門需要將新員工添加到其數據庫中。 你可以使用類似這樣的命令:

INSERT INTO個人信息值('bart','simpson',12345,$ 45000)

請注意,該記錄有四個值。 它們按照它們定義的順序對應於表格屬性:first_name,last_name,employee_id和salary。

選擇。 SELECT命令是SQL中最常用的命令。 它允許數據庫用戶從操作數據庫中檢索他們想要的特定信息。 看看幾個例子,再次使用僱員數據庫中的personal_info表。

下面顯示的命令檢索personal_info表中包含的所有信息。 請注意,星號在SQL中用作通配符。 這字面意思是“從個人信息表中選擇所有內容”。

SELECT * FROM personal_info

或者,用戶可能想要限制從數據庫中檢索的屬性。 例如,人力資源部門可能會要求列出公司所有員工的姓氏。 以下SQL命令將僅檢索該信息:

SELECT last_name FROM personal_info

WHERE子句可用於將檢索到的記錄限制為符合指定條件的記錄。 CEO可能有興趣審查所有高薪僱員的人事記錄。 以下命令檢索個人信息中包含的工資值大於$ 50,000的記錄的所有數據:

SELECT * FROM personal_info WHERE工資> $ 50000

UPDATE。 UPDATE命令可用於批量或單獨修改表中包含的信息。 假設該公司每年給全體員工的工資增加3%的生活成本。 可以使用以下SQL命令將其快速應用於存儲在數據庫中的所有員工:

更新personal_info SET工資=工資* 1.03

當新員工巴特辛普森表現出超越職責範圍的表現時,管理層希望以5,000美元的加薪承認自己的成就。 WHERE子句可以用來為這個提升選出Bart:

UPDATE personal_info SET salary = salary + $ 5000 WHERE employee_id = 12345

刪除。 最後,讓我們看看DELETE命令。 您會發現該命令的語法與其他DML命令的語法相似。 不幸的是,我們最新的企業收益報告並不完全符合預期,可憐的巴特已經被裁員。 帶有WHERE子句的DELETE命令可用於從personal_info表中刪除他的記錄:

DELETE FROM personal_info WHERE employee_id = 12345

JOIN的

現在您已經學習了SQL的基礎知識,現在是時候轉到語言所提供的最強大的概念之一 - JOIN語句。 JOIN語句允許您將多個表中的數據組合起來,從而有效地處理大量數據。 這些陳述是數據庫的真正威力所在。

要探索使用基本JOIN操作來合併兩個表中的數據,請使用PERSONAL_INFO表繼續該示例,並向混合中添加一個附加表。 假設您有一個名為DISCIPLINARY_ACTION的表,它使用以下語句創建:

CREATE TABLE disciplinary_action(action_id int not null,employee_id int not null,comments char(500))

該表格包含公司員工的紀律處分結果。 您會注意到,它不包含員工編號以外的其他員工的任何信息。 很容易想像您可能想要結合來自DISCIPLINARY_ACTION和PERSONAL_INFO表的信息的許多場景。

假設您的任務是創建一份報告,列出針對薪水超過40,000美元的所有員工採取的紀律處分措施。 在這種情況下使用JOIN操作很簡單。 我們可以使用以下命令檢索這些信息:

SELECT personal_info.first_name,personal_info.last_name,disciplinary_action.comments FROM personal_info,disciplinary_action WHERE personal_info.employee_id = disciplinary_action.employee_id AND personal_info.salary> 40000

代碼指定了我們想要在FROM子句中加入的兩個表,然後在WHERE子句中包含一條語句,以將結果限制為具有匹配員工ID並符合我們的薪水大於$ 40,000的條件的記錄。