1. 程式人生 > >SQL基礎學習(必備) (整理)

SQL基礎學習(必備) (整理)

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 - 刪除索引

·        本章講解SELECT 和SELECT * 語句。

·        SQL SELECT 語句

·        SELECT 語句用於從表中選取資料。

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

·        SQL SELECT 語法

·         SELECT 列名稱 FROM 表名稱

·        以及:

·         SELECT * FROM 表名稱

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

SQL SELECT 例項

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

SELECT LastName,FirstName FROM Persons

"Persons" 表:

Id

LastName

FirstName

Address

City

1

Adams

John

Oxford Street

London

2

Bush

George

Fifth Avenue

New York

3

Carter

Thomas

Changan Street

Beijing

結果:

LastName

FirstName

Adams

John

Bush

George

Carter

Thomas

SQL SELECT * 例項

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

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

SELECT * FROM Persons

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

結果:

Id

LastName

FirstName

Address

City

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 教程

本章講解 SELECT DISTINCT 語句。

SQL SELECT DISTINCT 語句

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

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

語法:

SELECT DISTINCT 列名稱 FROM 表名稱

使用 DISTINCT 關鍵詞

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

SELECT Company FROM Orders

"Orders"表:

Company

OrderNumber

IBM

3532

W3School

2356

Apple

4698

W3School

6953

結果:

Company

IBM

W3School

Apple

W3School

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

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

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" 表

LastName

FirstName

Address

City

Year

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

結果:

LastName

FirstName

Address

City

Year

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'

AND 和 OR 運算子用於基於一個以上的條件對記錄進行過濾。

AND 和 OR 運算子

AND 和 OR 可在 WHERE 子語句中把兩個或多個條件結合起來。

如果第一個條件和第二個條件都成立,則 AND 運算子顯示一條記錄。

如果第一個條件和第二個條件中只要有一個成立,則 OR 運算子顯示一條記錄。

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

LastName

FirstName

Address

City

Adams

John

Oxford Street

London

Bush

George

Fifth Avenue

New York

Carter

Thomas

Changan Street

Beijing

Carter

William

Xuanwumen 10

Beijing

AND 運算子例項

使用 AND 來顯示所有姓為 "Carter" 並且名為 "Thomas" 的人:

SELECT * FROM Persons WHERE FirstName='Thomas' AND LastName='Carter'

結果:

LastName

FirstName

Address

City

Carter

Thomas

Changan Street

Beijing

OR 運算子例項

使用 OR 來顯示所有姓為 "Carter" 或者名為 "Thomas" 的人:

SELECT * FROM Persons WHERE firstname='Thomas' OR lastname='Carter'

結果:

LastName

FirstName

Address

City

Carter

Thomas

Changan Street

Beijing

Carter

William

Xuanwumen 10

Beijing

結合 AND 和 OR 運算子

我們也可以把 AND 和 OR 結合起來(使用圓括號來組成複雜的表示式):

SELECT * FROM Persons WHERE (FirstName='Thomas' OR FirstName='William')
AND LastName='Carter'

結果:

LastName

FirstName

Address

City

Carter

Thomas

Changan Street

Beijing

Carter

William

Xuanwumen 10

Beijing

ORDER BY 語句用於對結果集進行排序。

ORDER BY 語句

ORDER BY語句用於根據指定的列對結果集進行排序。

ORDER BY語句預設按照升序對記錄進行排序。

如果您希望按照降序對記錄進行排序,可以使用 DESC 關鍵字。

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

Orders 表:

Company

OrderNumber

IBM

3532

W3School

2356

Apple

4698

W3School

6953

例項 1

以字母順序顯示公司名稱:

SELECT Company, OrderNumber FROM Orders ORDER BY Company

結果:

Company

OrderNumber

Apple

4698

IBM

3532

W3School

6953

W3School

2356

例項 2

以字母順序顯示公司名稱(Company),並以數字順序顯示順序號(OrderNumber):

SELECT Company, OrderNumber FROM Orders ORDER BY Company, OrderNumber

結果:

Company

OrderNumber

Apple

4698

IBM

3532

W3School

2356

W3School

6953

例項 3

以逆字母順序顯示公司名稱:

SELECT Company, OrderNumber FROM Orders ORDER BY Company DESC

結果:

Company

OrderNumber

W3School

6953

W3School

2356

IBM

3532

Apple

4698

例項 4

以逆字母順序顯示公司名稱,並以數字順序顯示順序號:

SELECT Company, OrderNumber FROM Orders ORDER BY Company DESC, OrderNumber ASC

結果:

Company

OrderNumber

W3School

2356

W3School

6953

IBM

3532

Apple

4698

注意:在以上的結果中有兩個相等的公司名稱 (W3School)。只有這一次,在第一列中有相同的值時,第二列是以升序排列的。如果第一列中有些值為 nulls 時,情況也是這樣的。

ORDER BY 語句用於對結果集進行排序。

ORDER BY 語句

ORDER BY語句用於根據指定的列對結果集進行排序。

ORDER BY語句預設按照升序對記錄進行排序。

如果您希望按照降序對記錄進行排序,可以使用 DESC 關鍵字。

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

Orders 表:

Company

OrderNumber

IBM

3532

W3School

2356

Apple

4698

W3School

6953

例項 1

以字母順序顯示公司名稱:

SELECT Company, OrderNumber FROM Orders ORDER BY Company

結果:

Company

OrderNumber

Apple

4698

IBM

3532

W3School

6953

W3School

2356

例項 2

以字母順序顯示公司名稱(Company),並以數字順序顯示順序號(OrderNumber):

SELECT Company, OrderNumber FROM Orders ORDER BY Company, OrderNumber

結果:

Company

OrderNumber

Apple

4698

IBM

3532

W3School

2356

W3School

6953

例項 3

以逆字母順序顯示公司名稱:

SELECT Company, OrderNumber FROM Orders ORDER BY Company DESC

結果:

Company

OrderNumber

W3School

6953

W3School

2356

IBM

3532

Apple

4698

例項 4

以逆字母順序顯示公司名稱,並以數字順序顯示順序號:

SELECT Company, OrderNumber FROM Orders ORDER BY Company DESC, OrderNumber ASC

結果:

Company

OrderNumber

W3School

2356

W3School

6953

IBM

3532

Apple

4698

注意:在以上的結果中有兩個相等的公司名稱 (W3School)。只有這一次,在第一列中有相同的值時,第二列是以升序排列的。如果第一列中有些值為 nulls 時,情況也是這樣的。

INSERT INTO 語句

INSERTINTO 語句用於向表格中插入新的行。

語法

INSERT INTO 表名稱 VALUES (值1, 值2,....)

我們也可以指定所要插入資料的列:

INSERT INTO table_name (列1, 列2,...) VALUES (值1, 值2,....)

插入新的行

"Persons" 表:

LastName

FirstName

Address

City

Carter

Thomas

Changan Street

Beijing

SQL 語句:

INSERT INTO Persons VALUES ('Gates', 'Bill', 'Xuanwumen 10', 'Beijing')

結果:

LastName

FirstName

Address

City

Carter

Thomas

Changan Street

Beijing

Gates

Bill

Xuanwumen 10

Beijing

在指定的列中插入資料

"Persons" 表:

LastName

FirstName

Address

City

Carter

Thomas

Changan Street

Beijing

Gates

Bill

Xuanwumen 10

Beijing

SQL 語句:

INSERT INTO Persons (LastName, Address) VALUES ('Wilson', 'Champs-Elysees')

結果:

LastName

FirstName

Address

City

Carter

Thomas

Changan Street

Beijing

Gates

Bill

Xuanwumen 10

Beijing

Wilson

Champs-Elysees

DELETE 語句

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

語法

DELETE FROM 表名稱 WHERE 列名稱 = 值

Person:

LastName

FirstName

Address

City

Gates

Bill

Xuanwumen 10

Beijing

Wilson

Fred

Zhongshan 23

Nanjing

刪除某行

"FredWilson" 會被刪除:

DELETE FROM Person WHERE LastName = 'Wilson' 

結果:

LastName

FirstName

Address

City

Gates

Bill

Xuanwumen 10

Beijing

刪除所有行

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

DELETE FROM table_name

或者:

DELETE * FROM table_name