程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> W3C SQL,W3CSQL

W3C SQL,W3CSQL

編輯:MySQL綜合教程

W3C SQL,W3CSQL


SQL 是用於訪問和處理數據庫的標准的計算機語言。

什麼是 SQL?

  • SQL 指結構化查詢語言
  • SQL 使我們有能力訪問數據庫
  • SQL 是一種 ANSI 的標准計算機語言

編者注:ANSI,美國國家標准化組織

SQL 能做什麼?

  • SQL 面向數據庫執行查詢
  • SQL 可從數據庫取回數據
  • SQL 可在數據庫中插入新的記錄
  • SQL 可更新數據庫中的數據
  • SQL 可從數據庫刪除記錄
  • SQL 可創建新數據庫
  • SQL 可在數據庫中創建新表
  • SQL 可在數據庫中創建存儲過程
  • SQL 可在數據庫中創建視圖
  • SQL 可以設置表、存儲過程和視圖的權限

SQL 是一種標准 - 但是...

SQL 是一門 ANSI 的標准計算機語言,用來訪問和操作數據庫系統。SQL 語句用於取回和更新數據庫中的數據。SQL 可與數據庫程序協同工作,比如 MS Access、DB2、Informix、MS SQL Server、Oracle、Sybase 以及其他數據庫系統。

不幸地是,存在著很多不同版本的 SQL 語言,但是為了與 ANSI 標准相兼容,它們必須以相似的方式共同地來支持一些主要的關鍵詞(比如 SELECT、UPDATE、DELETE、INSERT、WHERE 等等)。

注釋:除了 SQL 標准之外,大部分 SQL 數據庫程序都擁有它們自己的私有擴展!

在您的網站中使用 SQL

要創建發布數據庫中數據的網站,您需要以下要素:

  • RDBMS 數據庫程序(比如 MS Access, SQL Server, MySQL)
  • 服務器端腳本語言(比如 PHP 或 ASP)
  • SQL
  • HTML / CSS

RDBMS

RDBMS 指的是關系型數據庫管理系統。

RDBMS 是 SQL 的基礎,同樣也是所有現代數據庫系統的基礎,比如 MS SQL Server, IBM DB2, Oracle, MySQL 以及 Microsoft Access。

RDBMS 中的數據存儲在被稱為表(tables)的數據庫對象中。

表是相關的數據項的集合,它由列和行組成。

數據庫表

一個數據庫通常包含一個或多個表。每個表由一個名字標識(例如“客戶”或者“訂單”)。表包含帶有數據的記錄(行)。

下面的例子是一個名為 "Persons" 的表:

IdLastNameFirstNameAddressCity 1 Adams John Oxford Street London 2 Bush George Fifth Avenue New York 3 Carter Thomas Changan Street Beijing

上面的表包含三條記錄(每一條對應一個人)和五個列(Id、姓、名、地址和城市)。

SQL 語句

您需要在數據庫上執行的大部分工作都由 SQL 語句完成。

下面的語句從表中選取 LastName 列的數據:

SELECT LastName FROM Persons

結果集類似這樣:

LastName Adams Bush Carter

在本教程中,我們將為您講解各種不同的 SQL 語句。

重要事項

一定要記住,SQL 對大小寫不敏感!

SQL 語句後面的分號?

某些數據庫系統要求在每條 SQL 命令的末端使用分號。在我們的教程中不使用分號。

分號是在數據庫系統中分隔每條 SQL 語句的標准方法,這樣就可以在對服務器的相同請求中執行一條以上的語句。

如果您使用的是 MS Access 和 SQL Server 2000,則不必在每條 SQL 語句之後使用分號,不過某些數據庫軟件要求必須使用分號。

SQL DML 和 DDL

可以把 SQL 分為兩個部分:數據操作語言 (DML) 和 數據定義語言 (DDL)。

SQL (結構化查詢語言)是用於執行查詢的語法。但是 SQL 語言也包含用於更新、插入和刪除記錄的語法。

查詢和更新指令構成了 SQL 的 DML 部分:

  • SELECT - 從數據庫表中獲取數據
  • UPDATE - 更新數據庫表中的數據
  • DELETE - 從數據庫表中刪除數據
  • INSERT INTO - 向數據庫表中插入數據

SQL 的數據定義語言 (DDL) 部分使我們有能力創建或刪除表格。我們也可以定義索引(鍵),規定表之間的鏈接,以及施加表間的約束。

SQL 中最重要的 DDL 語句:

  • CREATE DATABASE - 創建新數據庫
  • ALTER DATABASE - 修改數據庫
  • CREATE TABLE - 創建新表
  • ALTER TABLE - 變更(改變)數據庫表
  • DROP TABLE - 刪除表
  • CREATE INDEX - 創建索引(搜索鍵)
  • DROP INDEX - 刪除索引

SQL SELECT 語句

SELECT 語句用於從表中選取數據。

結果被存儲在一個結果表中(稱為結果集)。

SQL SELECT 語法

SELECT 列名稱 FROM 表名稱

以及:

SELECT * FROM 表名稱

注釋:SQL 語句對大小寫不敏感。SELECT 等效於 select。

SQL SELECT 實例

如需獲取名為 "LastName" 和 "FirstName" 的列的內容(從名為 "Persons" 的數據庫表),請使用類似這樣的 SELECT 語句:

SELECT LastName,FirstName FROM Persons

"Persons" 表:

IdLastNameFirstNameAddressCity 1 Adams John Oxford Street London 2 Bush George Fifth Avenue New York 3 Carter Thomas Changan Street Beijing

結果:

LastNameFirstName Adams John Bush George Carter Thomas

SQL SELECT * 實例

現在我們希望從 "Persons" 表中選取所有的列。

請使用符號 * 取代列的名稱,就像這樣:

SELECT * FROM Persons

提示:星號(*)是選取所有列的快捷方式。

結果:

IdLastNameFirstNameAddressCity 1 Adams John Oxford Street London 2 Bush George Fifth Avenue New York 3 Carter Thomas Changan Street Beijing

在結果集(result-set)中導航

由 SQL 查詢程序獲得的結果被存放在一個結果集中。大多數數據庫軟件系統都允許使用編程函數在結果集中進行導航,比如:Move-To-First-Record、Get-Record-Content、Move-To-Next-Record 等等。

類似這些編程函數不在本教程講解之列。如需學習通過函數調用訪問數據的知識,請訪問我們的 ADO 教程 和 PHP 教程。

SQL SELECT DISTINCT 語句

在表中,可能會包含重復值。這並不成問題,不過,有時您也許希望僅僅列出不同(distinct)的值。

關鍵詞 DISTINCT 用於返回唯一不同的值。

語法:

SELECT DISTINCT 列名稱 FROM 表名稱

使用 DISTINCT 關鍵詞

如果要從 "Company" 列中選取所有的值,我們需要使用 SELECT 語句:

SELECT Company FROM Orders

"Orders"表:

CompanyOrderNumber IBM 3532 W3School 2356 Apple 4698 W3School 6953

結果:

Company IBM W3School Apple W3School

請注意,在結果集中,W3School 被列出了兩次。

如需從 Company" 列中僅選取唯一不同的值,我們需要使用 SELECT DISTINCT 語句:

SELECT DISTINCT Company FROM Orders 

結果:

Company IBM W3School Apple

現在,在結果集中,"W3School" 僅被列出了一次。

 

 

 

WHERE 子句用於規定選擇的標准。

WHERE 子句

如需有條件地從表中選取數據,可將 WHERE 子句添加到 SELECT 語句。

語法

SELECT 列名稱 FROM 表名稱 WHERE 列 運算符 值

下面的運算符可在 WHERE 子句中使用:

操作符描述 = 等於 <> 不等於 > 大於 < 小於 >= 大於等於 <= 小於等於 BETWEEN 在某個范圍內 LIKE 搜索某種模式

注釋:在某些版本的 SQL 中,操作符 <> 可以寫為 !=。

使用 WHERE 子句

如果只希望選取居住在城市 "Beijing" 中的人,我們需要向 SELECT 語句添加 WHERE 子句:

SELECT * FROM Persons WHERE City='Beijing'

"Persons" 表

LastNameFirstNameAddressCityYear Adams John Oxford Street London 1970 Bush George Fifth Avenue New York 1975 Carter Thomas Changan Street Beijing 1980 Gates Bill Xuanwumen 10 Beijing 1985

結果:

LastNameFirstNameAddressCityYear Carter Thomas Changan Street Beijing 1980 Gates Bill Xuanwumen 10 Beijing 1985

引號的使用

請注意,我們在例子中的條件值周圍使用的是單引號。

SQL 使用單引號來環繞文本值(大部分數據庫系統也接受雙引號)。如果是數值,請不要使用引號。

文本值:

這是正確的:
SELECT * FROM Persons WHERE FirstName='Bush'

這是錯誤的:
SELECT * FROM Persons WHERE FirstName=Bush

數值:

這是正確的:
SELECT * FROM Persons WHERE Year>1965

這是錯誤的:
SELECT * FROM Persons WHERE Year>'1965'
  • SQL distinct
 

Update 語句

Update 語句用於修改表中的數據。

語法:

UPDATE 表名稱 SET 列名稱 = 新值 WHERE 列名稱 = 某值

Person:

LastNameFirstNameAddressCity Gates Bill Xuanwumen 10 Beijing Wilson   Champs-Elysees  

更新某一行中的一個列

我們為 lastname 是 "Wilson" 的人添加 firstname:

UPDATE Person SET FirstName = 'Fred' WHERE LastName = 'Wilson' 

結果:

LastNameFirstNameAddressCity Gates Bill Xuanwumen 10 Beijing Wilson Fred Champs-Elysees  

更新某一行中的若干列

我們會修改地址(address),並添加城市名稱(city):

UPDATE Person SET Address = 'Zhongshan 23', City = 'Nanjing'
WHERE LastName = 'Wilson'

結果:

LastNameFirstNameAddressCity Gates Bill Xuanwumen 10 Beijing Wilson Fred Zhongshan 23 Nanjing

DELETE 語句

DELETE 語句用於刪除表中的行。

語法

DELETE FROM 表名稱 WHERE 列名稱 = 值

Person:

LastNameFirstNameAddressCity Gates Bill Xuanwumen 10 Beijing Wilson Fred Zhongshan 23 Nanjing

刪除某行

"Fred Wilson" 會被刪除:

DELETE FROM Person WHERE LastName = 'Wilson' 

結果:

LastNameFirstNameAddressCity Gates Bill Xuanwumen 10 Beijing

刪除所有行

可以在不刪除表的情況下刪除所有的行。這意味著表的結構、屬性和索引都是完整的:

DELETE FROM table_name

或者:

DELETE * FROM table_name

 

TOP 子句

TOP 子句用於規定要返回的記錄的數目。

對於擁有數千條記錄的大型表來說,TOP 子句是非常有用的。

注釋:並非所有的數據庫系統都支持 TOP 子句。

SQL Server 的語法:

SELECT TOP number|percent column_name(s)
FROM table_name

MySQL 和 Oracle 中的 SQL SELECT TOP 是等價的

MySQL 語法

SELECT column_name(s)
FROM table_name
LIMIT number

例子

SELECT *
FROM Persons
LIMIT 5

Oracle 語法

SELECT column_name(s)
FROM table_name
WHERE ROWNUM <= number

例子

SELECT *
FROM Persons
WHERE ROWNUM <= 5

原始的表 (用在例子中的):

Persons 表:

IdLastNameFirstNameAddressCity 1 Adams John Oxford Street London 2 Bush George Fifth Avenue New York 3 Carter Thomas Changan Street Beijing 4 Obama Barack Pennsylvania Avenue Washington

SQL TOP 實例

現在,我們希望從上面的 "Persons" 表中選取頭兩條記錄。

我們可以使用下面的 SELECT 語句:

SELECT TOP 2 * FROM Persons

結果:

IdLastNameFirstNameAddressCity 1 Adams John Oxford Street London 2 Bush George Fifth Avenue New York

SQL TOP PERCENT 實例

現在,我們希望從上面的 "Persons" 表中選取 50% 的記錄。

我們可以使用下面的 SELECT 語句:

SELECT TOP 50 PERCENT * FROM Persons

結果:

IdLastNameFirstNameAddressCity 1 Adams John Oxford Street London 2 Bush George Fifth Avenue New York

SQL LIKE 操作符

  • SQL Top

LIKE 操作符用於在 WHERE 子句中搜索列中的指定模式。

LIKE 操作符

LIKE 操作符用於在 WHERE 子句中搜索列中的指定模式。

SQL LIKE 操作符語法

SELECT column_name(s)
FROM table_name
WHERE column_name LIKE pattern

原始的表 (用在例子中的):

Persons 表:

IdLastNameFirstNameAddressCity 1 Adams John Oxford Street London 2 Bush George Fifth Avenue New York 3 Carter Thomas Changan Street Beijing

LIKE 操作符實例

例子 1

現在,我們希望從上面的 "Persons" 表中選取居住在以 "N" 開始的城市裡的人:

我們可以使用下面的 SELECT 語句:

SELECT * FROM Persons
WHERE City LIKE 'N%'

提示:"%" 可用於定義通配符(模式中缺少的字母)。

結果集:

IdLastNameFirstNameAddressCity 2 Bush George Fifth Avenue New York

例子 2

接下來,我們希望從 "Persons" 表中選取居住在以 "g" 結尾的城市裡的人:

我們可以使用下面的 SELECT 語句:

SELECT * FROM Persons
WHERE City LIKE '%g'

結果集:

IdLastNameFirstNameAddressCity 3 Carter Thomas Changan Street Beijing

例子 3

接下來,我們希望從 "Persons" 表中選取居住在包含 "lon" 的城市裡的人:

我們可以使用下面的 SELECT 語句:

SELECT * FROM Persons
WHERE City LIKE '%lon%'

結果集:

IdLastNameFirstNameAddressCity 1 Adams John Oxford Street London

例子 4

通過使用 NOT 關鍵字,我們可以從 "Persons" 表中選取居住在不包含 "lon" 的城市裡的人:

我們可以使用下面的 SELECT 語句:

SELECT * FROM Persons
WHERE City NOT LIKE '%lon%'

結果集:

IdLastNameFirstNameAddressCity 2 Bush George Fifth Avenue New York 3 Carter Thomas Changan Street Beijing

SQL 通配符

在搜索數據庫中的數據時,SQL 通配符可以替代一個或多個字符。

SQL 通配符必須與 LIKE 運算符一起使用。

在 SQL 中,可使用以下通配符:

通配符描述 % 替代一個或多個字符 _ 僅替代一個字符 [charlist] 字符列中的任何單一字符

[^charlist]

或者

[!charlist]

不在字符列中的任何單一字符

原始的表 (用在例子中的):

Persons 表:

IdLastNameFirstNameAddressCity 1 Adams John Oxford Street London 2 Bush George Fifth Avenue New York 3 Carter Thomas Changan Street Beijing

使用 % 通配符

例子 1

現在,我們希望從上面的 "Persons" 表中選取居住在以 "Ne" 開始的城市裡的人:

我們可以使用下面的 SELECT 語句:

SELECT * FROM Persons
WHERE City LIKE 'Ne%'

結果集:

IdLastNameFirstNameAddressCity 2 Bush George Fifth Avenue New York

例子 2

接下來,我們希望從 "Persons" 表中選取居住在包含 "lond" 的城市裡的人:

我們可以使用下面的 SELECT 語句:

SELECT * FROM Persons
WHERE City LIKE '%lond%'

結果集:

IdLastNameFirstNameAddressCity 1 Adams John Oxford Street London

使用 _ 通配符

例子 1

現在,我們希望從上面的 "Persons" 表中選取名字的第一個字符之後是 "eorge" 的人:

我們可以使用下面的 SELECT 語句:

SELECT * FROM Persons
WHERE FirstName LIKE '_eorge'

結果集:

IdLastNameFirstNameAddressCity 2 Bush George Fifth Avenue New York

例子 2

接下來,我們希望從 "Persons" 表中選取的這條記錄的姓氏以 "C" 開頭,然後是一個任意字符,然後是 "r",然後是任意字符,然後是 "er":

我們可以使用下面的 SELECT 語句:

SELECT * FROM Persons
WHERE LastName LIKE 'C_r_er'

結果集:

IdLastNameFirstNameAddressCity 3 Carter Thomas Changan Street Beijing

使用 [charlist] 通配符

例子 1

現在,我們希望從上面的 "Persons" 表中選取居住的城市以 "A" 或 "L" 或 "N" 開頭的人:

我們可以使用下面的 SELECT 語句:

SELECT * FROM Persons
WHERE City LIKE '[ALN]%'

結果集:

IdLastNameFirstNameAddressCity 1 Adams John Oxford Street London 2 Bush George Fifth Avenue New York

例子 2

現在,我們希望從上面的 "Persons" 表中選取居住的城市不以"A" 或 "L" 或 "N" 開頭的人:

我們可以使用下面的 SELECT 語句:

SELECT * FROM Persons
WHERE City LIKE '[!ALN]%'

結果集:

IdLastNameFirstNameAddressCity 3 Carter Thomas Changan Street Beijing

BETWEEN 操作符在 WHERE 子句中使用,作用是選取介於兩個值之間的數據范圍。

BETWEEN 操作符

操作符 BETWEEN ... AND 會選取介於兩個值之間的數據范圍。這些值可以是數值、文本或者日期。

SQL BETWEEN 語法

SELECT column_name(s)
FROM table_name
WHERE column_name
BETWEEN value1 AND value2

原始的表 (在實例中使用:)

Persons 表:

IdLastNameFirstNameAddressCity 1 Adams John Oxford Street London 2 Bush George Fifth Avenue New York 3 Carter Thomas Changan Street Beijing 4 Gates Bill Xuanwumen 10 Beijing

BETWEEN 操作符實例

如需以字母順序顯示介於 "Adams"(包括)和 "Carter"(不包括)之間的人,請使用下面的 SQL:

SELECT * FROM Persons
WHERE LastName
BETWEEN 'Adams' AND 'Carter'

結果集:

IdLastNameFirstNameAddressCity 1 Adams John Oxford Street London 2 Bush George Fifth Avenue New York

重要事項:不同的數據庫對 BETWEEN...AND 操作符的處理方式是有差異的。某些數據庫會列出介於 "Adams" 和 "Carter" 之間的人,但不包括 "Adams" 和 "Carter" ;某些數據庫會列出介於 "Adams" 和 "Carter" 之間並包括 "Adams" 和 "Carter" 的人;而另一些數據庫會列出介於 "Adams" 和 "Carter" 之間的人,包括 "Adams" ,但不包括 "Carter" 。

所以,請檢查你的數據庫是如何處理 BETWEEN....AND 操作符的!

實例 2

如需使用上面的例子顯示范圍之外的人,請使用 NOT 操作符:

SELECT * FROM Persons
WHERE LastName
NOT BETWEEN 'Adams' AND 'Carter'

結果集:

IdLastNameFirstNameAddressCity 3 Carter Thomas Changan Street Beijing 4 Gates Bill Xuanwumen 10 Beijing

 

SQL join 用於根據兩個或多個表中的列之間的關系,從這些表中查詢數據。

Join 和 Key

有時為了得到完整的結果,我們需要從兩個或更多的表中獲取結果。我們就需要執行 join。

數據庫中的表可通過鍵將彼此聯系起來。主鍵(Primary Key)是一個列,在這個列中的每一行的值都是唯一的。在表中,每個主鍵的值都是唯一的。這樣做的目的是在不重復每個表中的所有數據的情況下,把表間的數據交叉捆綁在一起。

請看 "Persons" 表:

Id_PLastNameFirstNameAddressCity 1 Adams John Oxford Street London 2 Bush George Fifth Avenue New York 3 Carter Thomas Changan Street Beijing

請注意,"Id_P" 列是 Persons 表中的的主鍵。這意味著沒有兩行能夠擁有相同的 Id_P。即使兩個人的姓名完全相同,Id_P 也可以區分他們。

接下來請看 "Orders" 表:

Id_OOrderNoId_P 1 77895 3 2 44678 3 3 22456 1 4 24562 1 5 34764 65

請注意,"Id_O" 列是 Orders 表中的的主鍵,同時,"Orders" 表中的 "Id_P" 列用於引用 "Persons" 表中的人,而無需使用他們的確切姓名。

請留意,"Id_P" 列把上面的兩個表聯系了起來。

引用兩個表

我們可以通過引用兩個表的方式,從兩個表中獲取數據:

誰訂購了產品,並且他們訂購了什麼產品?

SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons, Orders
WHERE Persons.Id_P = Orders.Id_P 

結果集:

LastNameFirstNameOrderNo Adams John 22456 Adams John 24562 Carter Thomas 77895 Carter Thomas 44678

SQL JOIN - 使用 Join

除了上面的方法,我們也可以使用關鍵詞 JOIN 來從兩個表中獲取數據。

如果我們希望列出所有人的定購,可以使用下面的 SELECT 語句:

SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons
INNER JOIN Orders
ON Persons.Id_P = Orders.Id_P
ORDER BY Persons.LastName

結果集:

LastNameFirstNameOrderNo Adams John 22456 Adams John 24562 Carter Thomas 77895 Carter Thomas 44678

不同的 SQL JOIN

除了我們在上面的例子中使用的 INNER JOIN(內連接),我們還可以使用其他幾種連接。

下面列出了您可以使用的 JOIN 類型,以及它們之間的差異。

  • JOIN: 如果表中有至少一個匹配,則返回行
  • LEFT JOIN: 即使右表中沒有匹配,也從左表返回所有的行
  • RIGHT JOIN: 即使左表中沒有匹配,也從右表返回所有的行
    • SQL UNION 操作符

      UNION 操作符用於合並兩個或多個 SELECT 語句的結果集。

      請注意,UNION 內部的 SELECT 語句必須擁有相同數量的列。列也必須擁有相似的數據類型。同時,每條 SELECT 語句中的列的順序必須相同。

      SQL UNION 語法

      SELECT column_name(s) FROM table_name1
      UNION
      SELECT column_name(s) FROM table_name2
      

      注釋:默認地,UNION 操作符選取不同的值。如果允許重復的值,請使用 UNION ALL。

      SQL UNION ALL 語法

      SELECT column_name(s) FROM table_name1
      UNION ALL
      SELECT column_name(s) FROM table_name2
      

      另外,UNION 結果集中的列名總是等於 UNION 中第一個 SELECT 語句中的列名。

      下面的例子中使用的原始表:

      Employees_China:

      E_IDE_Name 01 Zhang, Hua 02 Wang, Wei 03 Carter, Thomas 04 Yang, Ming

      Employees_USA:

      E_IDE_Name 01 Adams, John 02 Bush, George 03 Carter, Thomas 04 Gates, Bill

      使用 UNION 命令

      實例

      列出所有在中國和美國的不同的雇員名:

      SELECT E_Name FROM Employees_China
      UNION
      SELECT E_Name FROM Employees_USA
      

      結果

      E_Name Zhang, Hua Wang, Wei Carter, Thomas Yang, Ming Adams, John Bush, George Gates, Bill

      注釋:這個命令無法列出在中國和美國的所有雇員。在上面的例子中,我們有兩個名字相同的雇員,他們當中只有一個人被列出來了。UNION 命令只會選取不同的值。

      UNION ALL

      UNION ALL 命令和 UNION 命令幾乎是等效的,不過 UNION ALL 命令會列出所有的值。

      SQL Statement 1
      UNION ALL
      SQL Statement 2
      

      使用 UNION ALL 命令

      實例:

      列出在中國和美國的所有的雇員:

      SELECT E_Name FROM Employees_China
      UNION ALL
      SELECT E_Name FROM Employees_USA
      

      結果

      E_Name Zhang, Hua Wang, Wei Carter, Thomas Yang, Ming Adams, John Bush, George Carter, Thomas Gates, Bill
  • FULL JOIN: 只要其中一個表中存在匹配,就返回行

SQL SELECT INTO 語句可用於創建表的備份復件。

SELECT INTO 語句

SELECT INTO 語句從一個表中選取數據,然後把數據插入另一個表中。

SELECT INTO 語句常用於創建表的備份復件或者用於對記錄進行存檔。

SQL SELECT INTO 語法

您可以把所有的列插入新表:

SELECT *
INTO new_table_name [IN externaldatabase] 
FROM old_tablename

或者只把希望的列插入新表:

SELECT column_name(s)
INTO new_table_name [IN externaldatabase] 
FROM old_tablename

SQL SELECT INTO 實例 - 制作備份復件

下面的例子會制作 "Persons" 表的備份復件:

SELECT *
INTO Persons_backup
FROM Persons

IN 子句可用於向另一個數據庫中拷貝表:

SELECT *
INTO Persons IN 'Backup.mdb'
FROM Persons

如果我們希望拷貝某些域,可以在 SELECT 語句後列出這些域:

SELECT LastName,FirstName
INTO Persons_backup
FROM Persons

SQL SELECT INTO 實例 - 帶有 WHERE 子句

我們也可以添加 WHERE 子句。

下面的例子通過從 "Persons" 表中提取居住在 "Beijing" 的人的信息,創建了一個帶有兩個列的名為 "Persons_backup" 的表:

SELECT LastName,Firstname
INTO Persons_backup
FROM Persons
WHERE City='Beijing'

SQL SELECT INTO 實例 - 被連接的表

從一個以上的表中選取數據也是可以做到的。

下面的例子會創建一個名為 "Persons_Order_Backup" 的新表,其中包含了從 Persons 和 Orders 兩個表中取得的信息:

SELECT Persons.LastName,Orders.OrderNo
INTO Persons_Order_Backup
FROM Persons
INNER JOIN Orders
ON Persons.Id_P=Orders.Id_P

 

SQL CREATE DATABASE 語句

  • SQL Select Into

CREATE DATABASE 語句

CREATE DATABASE 用於創建數據庫。

SQL CREATE DATABASE 語法

CREATE DATABASE database_name

SQL CREATE DATABASE 實例

現在我們希望創建一個名為 "my_db" 的數據庫。

我們使用下面的 CREATE DATABASE 語句:

CREATE DATABASE my_db

可以通過 CREATE TABLE 來添加數據庫表。

 

SQL CREATE TABLE 語句

  • SQL Create DB

CREATE TABLE 語句

CREATE TABLE 語句用於創建數據庫中的表。

SQL CREATE TABLE 語法

CREATE TABLE 表名稱
(
列名稱1 數據類型,
列名稱2 數據類型,
列名稱3 數據類型,
....
)

數據類型(data_type)規定了列可容納何種數據類型。下面的表格包含了SQL中最常用的數據類型:

數據類型描述
  • integer(size)
  • int(size)
  • smallint(size)
  • tinyint(size)
僅容納整數。在括號內規定數字的最大位數。
  • decimal(size,d)
  • numeric(size,d)

容納帶有小數的數字。

"size" 規定數字的最大位數。"d" 規定小數點右側的最大位數。

char(size)

容納固定長度的字符串(可容納字母、數字以及特殊字符)。

在括號中規定字符串的長度。

varchar(size)

容納可變長度的字符串(可容納字母、數字以及特殊的字符)。

在括號中規定字符串的最大長度。

date(yyyymmdd) 容納日期。

SQL CREATE TABLE 實例

本例演示如何創建名為 "Person" 的表。

該表包含 5 個列,列名分別是:"Id_P"、"LastName"、"FirstName"、"Address" 以及 "City":

CREATE TABLE Persons
(
Id_P int,
LastName varchar(255),
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)

Id_P 列的數據類型是 int,包含整數。其余 4 列的數據類型是 varchar,最大長度為 255 個字符。

空的 "Persons" 表類似這樣:

Id_PLastNameFirstNameAddressCity          

可使用 INSERT INTO 語句向空表寫入數據。

SQL 約束

約束用於限制加入表的數據的類型。

可以在創建表時規定約束(通過 CREATE TABLE 語句),或者在表創建之後也可以(通過 ALTER TABLE 語句)。

我們將主要探討以下幾種約束:

  • NOT NULL
  • UNIQUE
  • PRIMARY KEY
  • FOREIGN KEY
  • CHECK
  • DEFAULT

注釋:在下面的章節,我們會詳細講解每一種約束。

SQL NOT NULL 約束

NOT NULL 約束強制列不接受 NULL 值。

NOT NULL 約束強制字段始終包含值。這意味著,如果不向字段添加值,就無法插入新記錄或者更新記錄。

下面的 SQL 語句強制 "Id_P" 列和 "LastName" 列不接受 NULL 值:

CREATE TABLE Persons
(
Id_P int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)

SQL UNIQUE 約束

UNIQUE 約束唯一標識數據庫表中的每條記錄。

UNIQUE 和 PRIMARY KEY 約束均為列或列集合提供了唯一性的保證。

PRIMARY KEY 擁有自動定義的 UNIQUE 約束。

請注意,每個表可以有多個 UNIQUE 約束,但是每個表只能有一個 PRIMARY KEY 約束。

SQL UNIQUE Constraint on CREATE TABLE

下面的 SQL 在 "Persons" 表創建時在 "Id_P" 列創建 UNIQUE 約束:

MySQL:

CREATE TABLE Persons
(
Id_P int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
UNIQUE (Id_P)
)

SQL Server / Oracle / MS Access:

CREATE TABLE Persons
(
Id_P int NOT NULL UNIQUE,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)

如果需要命名 UNIQUE 約束,以及為多個列定義 UNIQUE 約束,請使用下面的 SQL 語法:

MySQL / SQL Server / Oracle / MS Access:

CREATE TABLE Persons
(
Id_P int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
CONSTRAINT uc_PersonID UNIQUE (Id_P,LastName)
)

SQL UNIQUE Constraint on ALTER TABLE

當表已被創建時,如需在 "Id_P" 列創建 UNIQUE 約束,請使用下列 SQL:

MySQL / SQL Server / Oracle / MS Access:

ALTER TABLE Persons
ADD UNIQUE (Id_P)

如需命名 UNIQUE 約束,並定義多個列的 UNIQUE 約束,請使用下面的 SQL 語法:

MySQL / SQL Server / Oracle / MS Access:

ALTER TABLE Persons
ADD CONSTRAINT uc_PersonID UNIQUE (Id_P,LastName)

撤銷 UNIQUE 約束

如需撤銷 UNIQUE 約束,請使用下面的 SQL:

MySQL:

ALTER TABLE Persons
DROP INDEX uc_PersonID

SQL Server / Oracle / MS Access:

ALTER TABLE Persons
DROP CONSTRAINT uc_PersonID

SQL PRIMARY KEY 約束

PRIMARY KEY 約束唯一標識數據庫表中的每條記錄。

主鍵必須包含唯一的值。

主鍵列不能包含 NULL 值。

每個表都應該有一個主鍵,並且每個表只能有一個主鍵。

SQL PRIMARY KEY Constraint on CREATE TABLE

下面的 SQL 在 "Persons" 表創建時在 "Id_P" 列創建 PRIMARY KEY 約束:

MySQL:

CREATE TABLE Persons
(
Id_P int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
PRIMARY KEY (Id_P)
)

SQL Server / Oracle / MS Access:

CREATE TABLE Persons
(
Id_P int NOT NULL PRIMARY KEY,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)

如果需要命名 PRIMARY KEY 約束,以及為多個列定義 PRIMARY KEY 約束,請使用下面的 SQL 語法:

MySQL / SQL Server / Oracle / MS Access:

CREATE TABLE Persons
(
Id_P int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
CONSTRAINT pk_PersonID PRIMARY KEY (Id_P,LastName)
)

SQL PRIMARY KEY Constraint on ALTER TABLE

如果在表已存在的情況下為 "Id_P" 列創建 PRIMARY KEY 約束,請使用下面的 SQL:

MySQL / SQL Server / Oracle / MS Access:

ALTER TABLE Persons
ADD PRIMARY KEY (Id_P)

如果需要命名 PRIMARY KEY 約束,以及為多個列定義 PRIMARY KEY 約束,請使用下面的 SQL 語法:

MySQL / SQL Server / Oracle / MS Access:

ALTER TABLE Persons
ADD CONSTRAINT pk_PersonID PRIMARY KEY (Id_P,LastName)

注釋:如果您使用 ALTER TABLE 語句添加主鍵,必須把主鍵列聲明為不包含 NULL 值(在表首次創建時)。

撤銷 PRIMARY KEY 約束

如需撤銷 PRIMARY KEY 約束,請使用下面的 SQL:

MySQL:

ALTER TABLE Persons
DROP PRIMARY KEY

SQL Server / Oracle / MS Access:

ALTER TABLE Persons
DROP CONSTRAINT pk_PersonID
 

SQL CHECK 約束

CHECK 約束用於限制列中的值的范圍。

如果對單個列定義 CHECK 約束,那麼該列只允許特定的值。

如果對一個表定義 CHECK 約束,那麼此約束會在特定的列中對值進行限制。

SQL CHECK Constraint on CREATE TABLE

下面的 SQL 在 "Persons" 表創建時為 "Id_P" 列創建 CHECK 約束。CHECK 約束規定 "Id_P" 列必須只包含大於 0 的整數。

My SQL:

CREATE TABLE Persons
(
Id_P int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
CHECK (Id_P>0)
)

SQL Server / Oracle / MS Access:

CREATE TABLE Persons
(
Id_P int NOT NULL CHECK (Id_P>0),
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)

如果需要命名 CHECK 約束,以及為多個列定義 CHECK 約束,請使用下面的 SQL 語法:

MySQL / SQL Server / Oracle / MS Access:

CREATE TABLE Persons
(
Id_P int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
CONSTRAINT chk_Person CHECK (Id_P>0 AND City='Sandnes')
)

SQL CHECK Constraint on ALTER TABLE

如果在表已存在的情況下為 "Id_P" 列創建 CHECK 約束,請使用下面的 SQL:

MySQL / SQL Server / Oracle / MS Access:

ALTER TABLE Persons
ADD CHECK (Id_P>0)

如果需要命名 CHECK 約束,以及為多個列定義 CHECK 約束,請使用下面的 SQL 語法:

MySQL / SQL Server / Oracle / MS Access:

ALTER TABLE Persons
ADD CONSTRAINT chk_Person CHECK (Id_P>0 AND City='Sandnes')

撤銷 CHECK 約束

如需撤銷 CHECK 約束,請使用下面的 SQL:

SQL Server / Oracle / MS Access:

ALTER TABLE Persons
DROP CONSTRAINT chk_Person

MySQL:

ALTER TABLE Persons
DROP CHECK chk_Person
 
 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved