1. 程式人生 > >SQList3 and SQL入門學習筆記

SQList3 and SQL入門學習筆記

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 資料庫程式都擁有它們自己的私有擴充套件!

資料庫表

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

下面的例子是一個名為 "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

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

SQL 語句

預設情況下,不會出現紅框中的表頭,需要之前設定,命令為:

.header on

如果想檢視這些表的結構:

select * fromsqlite_master where type="table";

SQLite 資料庫引擎支援下列三種 DDL 語句:

CREATE

ALTER TABLE
DROP

SQLite 資料庫中的資料一般由以下幾種常用的資料型別組成:

NULL -
空值
INTEGER -
有符號整數
REAL -
浮點數
TEXT -
文字字串
BLOB -
二進位制資料,如圖片、聲音等等

SQLite
也可以接受其他資料型別。

修改表 ALTER TABLE
 ALTERTABLE Teachers ADD COLUMN Sex text
SQLite
僅僅支援 ALTERTABLE 語句的一部分功能,我們可以用 ALTER TABLE 語句來更改一個表的名字,也可向表中增加一個欄位(列),但是我們不能刪除一個已經存在的欄位,或者更改一個已經存在的欄位的名稱、資料型別、限定符等等。改變表名 - ALTERTABLE 舊錶名 RENAME TO 新表名增加一列 - ALTERTABLE 表名 ADD COLUMN 列名資料型別限定符

刪除表 DROP TABLE刪除一個表很簡單,只要給出表名即可刪除表 - DROPTABLE 表名

您需要在資料庫上執行的大部分工作都由 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 - 刪除索引

本章講解 SELECT 和 SELECT * 語句。

SQLSELECT 語句

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

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

SQL SELECT 語法

SELECT 列名稱 FROM 表名稱

以及:

SELECT * FROM 表名稱

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

SQLSELECT 例項

如需獲取名為 "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

SQLSELECT * 例項

現在我們希望從 "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

本章講解 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" 列中僅選取唯一不同的值,我們需要使用 SELECT DISTINCT 語句:

SELECT DISTINCT Company FROM Orders

結果:

Company

IBM

W3School

Apple

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 WHEREFirstName='Thomas' AND LastName='Carter'

結果:

LastName

FirstName

Address

City

Carter

Thomas

Changan Street

Beijing

OR 運算子例項

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

SELECT * FROM Persons WHEREfirstname='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 時,情況也是這樣的。

INSERT INTO 語句

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

語法

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

Update 語句

Update 語句用於修改表中的資料。

語法:

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

Person:

LastName

FirstName

Address

City

Gates

Bill

Xuanwumen 10

Beijing

Wilson

Champs-Elysees

更新某一行中的一個列

我們為 lastname 是 "Wilson" 的人新增 firstname:

UPDATE Person SET FirstName = 'Fred' WHERELastName = 'Wilson'

結果:

LastName

FirstName

Address

City

Gates

Bill

Xuanwumen 10

Beijing

Wilson

Fred

Champs-Elysees

更新某一行中的若干列

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

UPDATE Person SET Address = 'Zhongshan 23',City = 'Nanjing'

WHERE LastName = 'Wilson'

結果:

LastName

FirstName

Address

City

Gates

Bill

Xuanwumen 10

Beijing

Wilson

Fred

Zhongshan 23

Nanjing

DELETE 語句

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

語法

DELETE FROM 表名稱 WHERE 列名稱 = 值

Person:

LastName

FirstName

Address

City

Gates

Bill

Xuanwumen 10

Beijing

Wilson

Fred

Zhongshan 23

Nanjing

刪除某行

"Fred Wilson" 會被刪除:

DELETE FROM Person WHERE LastName = 'Wilson'

結果:

LastName

FirstName

Address

City

Gates

Bill

Xuanwumen 10

Beijing

刪除所有行

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

DELETE FROM table_name

或者:

DELETE * FROM table_name