一、SQL基本教程
1. SQL SELECT 語句
SELECT 語句用於從表中選取數據,結果被存儲在一個結果表中(稱爲結果集)。
SELECT 語法
SELECT 列名稱 FROM 表名稱
以及:
SELECT * FROM 表名稱
SELECT 實例
如需獲取名爲 "LastName" 和 "FirstName" 的列的內容(從名爲 "Persons" 的數據庫表):
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 |
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 |
2. SQL SELECT DISTINCT 語句
在表中,可能會包含重複值。這並不成問題,不過,有時您也許希望僅僅列出不同(distinct)的值。
關鍵詞 DISTINCT 用於返回唯一不同的值。
SELECT DISTINCT語法
SELECT DISTINCT 列名稱 FROM 表名稱
SELECT DISTINCT實例
"Orders"表:
Company |
OrderNumber |
IBM |
3532 |
W3School |
2356 |
Apple |
4698 |
W3School |
6953 |
如需從 Company" 列中僅選取唯一不同的值,我們需要使用 SELECT DISTINCT 語句:
SELECT DISTINCT
Company FROM Orders
結果:
Company |
IBM |
W3School |
Apple |
現在,在結果集中,"W3School" 僅被列出了一次。
3. SQL WHERE 子句
如需有條件地從表中選取數據,可將 WHERE 子句添加到 SELECT 語句。
WHERE語法
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 |
4. SQL 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 |
5. SQL ORDER BY 子句
ORDER BY 語句用於根據指定的列對結果集進行排序,默認按照升序對記錄進行排序。
如果您希望按照降序對記錄進行排序,可以使用 DESC 關鍵字。
原始的表 (用在例子中的):
Orders 表:
Company |
OrderNumber |
IBM |
3532 |
W3School |
2356 |
Apple |
4698 |
W3School |
6953 |
ORDER BY實例 1
以字母順序顯示公司名稱:
SELECT Company, OrderNumber FROM Orders ORDER BY Company
結果:
Company |
OrderNumber |
Apple |
4698 |
IBM |
3532 |
W3School |
6953 |
W3School |
2356 |
ORDER BY實例 2
以字母順序顯示公司名稱(Company),並以數字順序顯示順序號(OrderNumber):
SELECT Company, OrderNumber FROM Orders ORDER BY Company, OrderNumber
結果:
Company |
OrderNumber |
Apple |
4698 |
IBM |
3532 |
W3School |
2356 |
W3School |
6953 |
ORDER BY實例 3
以逆字母順序顯示公司名稱:
SELECT Company, OrderNumber FROM Orders ORDER BY Company DESC
結果:
Company |
OrderNumber |
W3School |
6953 |
W3School |
2356 |
IBM |
3532 |
Apple |
4698 |
ORDER BY實例 4
以逆字母順序顯示公司名稱,並以數字順序顯示順序號:
SELECT Company, OrderNumber FROM Orders ORDER BY Company DESC, OrderNumber ASC
結果:
Company |
OrderNumber |
W3School |
2356 |
W3School |
6953 |
IBM |
3532 |
Apple |
4698 |
注意:在以上的結果中有兩個相等的公司名稱 (W3School)。只有這一次,在第一列中有相同的值時,第二列是以升序排列的。如果第一列中有些值爲 nulls 時,情況也是這樣的。
6. SQL INSERT INTO 語句
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 |
|
7. SQL UPDATE 語句
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' WHERE LastName = '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 |
8. SQL DELETE 語句
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