SQL 必知必會(總結)
一.SQL基礎:
SELECT 列名 FROM 表名 或者 SELECT * from 表名。SELECT LastName,FirstName FROM Persons
- 所有的字段!
SQL對大小寫不敏感!
3.分號是在數據庫系統中分隔每條 SQL 語句的標準方法,這樣就可以在對服務器的相同請求中執行一條以上的語句! - SQL distinct:在表中,可能會包含重復值。這并不成問題,不過,有時您也許希望僅僅列出不同(distinct)的值。關鍵詞 DISTINCT 用于返回唯一不同的值。
Select distinct Company from 表名
5.SQL where: SELECT 列名 FROM 表名WHERE 列 運算符 值
請注意,我們在例子中的條件值周圍使用的是單引號。SQL 使用單引號來環繞文本值(大部分數據庫系統也接受雙引號)。如果是數值,請不要使用引號。
SELECT FROM Persons WHERE FirstName='Bush'
SELECT FROM Persons WHERE Year>1965
6.SQL AND&OR運算符:
AND 和 OR 可在 WHERE 子語句中把兩個或多個條件結合起來。如果第一個條件和第二個條件都成立,則 AND 運算符顯示一條記錄。如果第一個條件和第二個條件中只要有一個成立,則 OR 運算符顯示一條記錄。
SELECT FROM Persons WHERE FirstName='Thomas' AND LastName='Carter'
SELECT FROM Persons WHERE firstname='Thomas' OR lastname='Carter'
SELECT FROM Persons WHERE (FirstName='Thomas' OR FirstName='William')
AND LastName='Carter'
7.SQL ORDER BY子句:
ORDER BY 語句用于根據指定的列對結果集進行排序。ORDER BY 語句默認按照升序對記錄進行排序。按照降序對記錄進行排序,可以使用 DESC 關鍵字。
Select Company, OrderNumber FROM Orders ORDER BY Company, OrderNumber
SELECT FROM ORDERS ORDER BY Company 對所有字段都排序!
8.INSERT INTO 語句:
INSERT INTO 表名稱 VALUES (值1, 值2,....)
INSERT INTO table_name (列1, 列2,...) VALUES (值1, 值2,....)
INSERT INTO Persons (LastName, Address) VALUES ('Wilson', 'Champs-Elysees')
9.SQL UPDATE語句:用于修改表的數據
UPDATE 表名稱 SET 列名稱 = 新值 WHERE 列名稱 = 某值
UPDATE Person SET Address = 'Zhongshan 23', City = 'Nanjing'
WHERE LastName = 'Wilson'
10.SQL DELETE
DELETE FROM 表名稱 WHERE 列名稱 = 值
DELETE FROM Person WHERE LastName = 'Wilson'
DELETE FROM table_name 刪除所有行
二.SQL 高級
SQL Top
TOP 子句用于規定要返回的記錄的數目。對于擁有數千條記錄的大型表來說,TOP 子句是非常有用的。 注釋:并非所有的數據庫系統都支持 TOP 子句。
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 表:
Id LastName FirstName Address City
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
結果:
Id LastName FirstName Address City
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
結果:
Id LastName FirstName Address City
1 Adams John Oxford Street London
2 Bush George Fifth Avenue New York
2.SQL LIKE 操作符
LIKE 操作符用于在 WHERE 子句中搜索列中的指定模式。
SQL LIKE 操作符語法
SELECT column_name(s) FROM table_name WHERE columnname LIKE pattern
例子 1
現在,我們希望從上面的 "Persons" 表中選取居住在以 "N" 開始的城市里的人:
我們可以使用下面的 SELECT 語句:
SELECT FROM Persons WHERE City LIKE 'N%'
提示:"%" 可用于定義通配符(模式中缺少的字母)。
例子 2
接下來,我們希望從 "Persons" 表中選取居住在以 "g" 結尾的城市里的人:
我們可以使用下面的 SELECT 語句:
SELECT FROM Persons WHERE City LIKE '%g'
例子 3
接下來,我們希望從 "Persons" 表中選取居住在包含 "lon" 的城市里的人:
我們可以使用下面的 SELECT 語句:
SELECT FROM Persons WHERE City LIKE '%lon%'
例子 4
通過使用 NOT 關鍵字,我們可以從 "Persons" 表中選取居住在不包含 "lon" 的城市里的人:
我們可以使用下面的 SELECT 語句:
SELECT FROM Persons WHERE City NOT LIKE '%lon%'
3.SQL 通配符
在搜索數據庫中的數據時,SQL 通配符可以替代一個或多個字符。
SQL 通配符必須與 LIKE 運算符一起使用。
在 SQL 中,可使用以下通配符:
通配符 描述
% 替代一個或多個字符
僅替代一個字符
[charlist] 字符列中的任何單一字符
[^charlist]
或者
[!charlist] 不在字符列中的任何單一字符
使用 _ 通配符
例子 1
現在,我們希望從上面的 "Persons" 表中選取名字的第一個字符之后是 "eorge" 的人:
我們可以使用下面的 SELECT 語句:
SELECT FROM Persons WHERE FirstName LIKE '_eorge'
例子 2
接下來,我們希望從 "Persons" 表中選取的這條記錄的姓氏以 "C" 開頭,然后是一個任意字符,然后是 "r",然后是任意字符,然后是 "er":
我們可以使用下面的 SELECT 語句:
SELECT FROM Persons WHERE LastName LIKE 'C_r_er'
使用 [charlist] 通配符
例子 1
現在,我們希望從上面的 "Persons" 表中選取居住的城市以 "A" 或 "L" 或 "N" 開頭的人:
我們可以使用下面的 SELECT 語句:
SELECT FROM Persons WHERE City LIKE '[ALN]%'
例子 2
現在,我們希望從上面的 "Persons" 表中選取居住的城市不以 "A" 或 "L" 或 "N" 開頭的人:
我們可以使用下面的 SELECT 語句:
SELECT FROM Persons WHERE City LIKE '[!ALN]%' - SQL IN 操作符
IN 操作符
IN 操作符允許我們在 WHERE 子句中規定多個值。
SQL IN 語法
SELECT column_name(s) FROM table_name WHERE column_name IN (value1,value2,...)
IN 操作符實例
現在,我們希望從上表中選取姓氏為 Adams 和 Carter 的人:
我們可以使用下面的 SELECT 語句:
SELECT FROM Persons WHERE LastName IN ('Adams','Carter')
5.SQL BETWEEN 操作符
BETWEEN 操作符
操作符 BETWEEN ... AND 會選取介于兩個值之間的數據范圍。這些值可以是數值、文本或者日期。
SQL BETWEEN 語法
SELECT column_name(s) FROM table_name WHERE column_name
BETWEEN value1 AND value2
BETWEEN 操作符實例
如需以字母順序顯示介于 "Adams"(包括)和 "Carter"(不包括)之間的人,請使用下面的 SQL:
SELECT FROM Persons WHERE LastName BETWEEN 'Adams' AND 'Carter'
結果集:
Id LastName FirstName Address City
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'
6.SQL Alias(別名)
SQL Alias
表的 SQL Alias 語法
SELECT column_name(s) FROM table_name AS alias_name
列的 SQL Alias 語法
SELECT column_name AS alias_name FROM table_name
Alias 實例: 使用表名稱別名
假設我們有兩個表分別是:"Persons" 和 "Product_Orders"。我們分別為它們指定別名 "p" 和 "po"。
現在,我們希望列出 "John Adams" 的所有定單。
我們可以使用下面的 SELECT 語句:
SELECT po.OrderID, p.LastName, p.FirstName
FROM Persons AS p, Product_Orders AS po
WHERE p.LastName='Adams' AND p.FirstName='John'
不使用別名的 SELECT 語句:
SELECT Product_Orders.OrderID, Persons.LastName, Persons.FirstName
FROM Persons, Product_Orders
WHERE Persons.LastName='Adams' AND Persons.FirstName='John'
從上面兩條 SELECT 語句您可以看到,別名使查詢程序更易閱讀和書寫。
Alias 實例: 使用一個列名別名
表 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
SQL:
SELECT LastName AS Family, FirstName AS Name FROM Persons
結果:
Family Name
Adams John
Bush George
Carter Thomas
7.SQL JOIN
SQL join 用于根據兩個或多個表中的列之間的關系,從這些表中查詢數據。
Join 和 Key
有時為了得到完整的結果,我們需要從兩個或更多的表中獲取結果。我們就需要執行 join。
數據庫中的表可通過鍵將彼此聯系起來。主鍵(Primary Key)是一個列,在這個列中的每一行的值都是唯一的。在表中,每個主鍵的值都是唯一的。這樣做的目的是在不重復每個表中的所有數據的情況下,把表間的數據交叉捆綁在一起。
請看 "Persons" 表:
Id_P LastName FirstName Address City
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_O OrderNo Id_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
結果集:
LastName FirstName OrderNo
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
結果集:
LastName FirstName OrderNo
Adams John 22456
Adams John 24562
Carter Thomas 77895
Carter Thomas 44678
不同的 SQL JOIN
除了我們在上面的例子中使用的 INNER JOIN(內連接),我們還可以使用其他幾種連接。
下面列出了您可以使用的 JOIN 類型,以及它們之間的差異。
JOIN: 如果表中有至少一個匹配,則返回行
LEFT JOIN: 即使右表中沒有匹配,也從左表返回所有的行
RIGHT JOIN: 即使左表中沒有匹配,也從右表返回所有的行
FULL JOIN: 只要其中一個表中存在匹配,就返回行 - SQL INNER JOIN 關鍵字
在表中存在至少一個匹配時,INNER JOIN 關鍵字返回行。
INNER JOIN 關鍵字語法
SELECT column_name(s) FROM table_name1 INNER JOIN table_name2
ON table_name1.column_name=table_name2.column_name
注釋:INNER JOIN 與 JOIN 是相同的。
原始的表 (用在例子中的):
"Persons" 表:
Id_P LastName FirstName Address City
1 Adams John Oxford Street London
2 Bush George Fifth Avenue New York
3 Carter Thomas Changan Street Beijing
"Orders" 表:
Id_O OrderNo Id_P
1 77895 3
2 44678 3
3 22456 1
4 24562 1
5 34764 65
內連接(INNER 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
結果集:
LastName FirstName OrderNo
Adams John 22456
Adams John 24562
Carter Thomas 77895
Carter Thomas 44678
INNER JOIN 關鍵字在表中存在至少一個匹配時返回行。如果 "Persons" 中的行在 "Orders" 中沒有匹配,就不會列出這些行。 - SQL LEFT JOIN 關鍵字
LEFT JOIN 關鍵字會從左表 (table_name1) 那里返回所有的行,即使在右表 (table_name2) 中沒有匹配的行。
LEFT JOIN 關鍵字語法
SELECT column_name(s)
FROM table_name1
LEFT JOIN table_name2
ON table_name1.column_name=table_name2.column_name
注釋:在某些數據庫中, LEFT JOIN 稱為 LEFT OUTER JOIN。
原始的表 (用在例子中的):
"Persons" 表:
Id_P LastName FirstName Address City
1 Adams John Oxford Street London
2 Bush George Fifth Avenue New York
3 Carter Thomas Changan Street Beijing
"Orders" 表:
Id_O OrderNo Id_P
1 77895 3
2 44678 3
3 22456 1
4 24562 1
5 34764 65
左連接(LEFT JOIN)實例
現在,我們希望列出所有的人,以及他們的定購 - 如果有的話。
您可以使用下面的 SELECT 語句:
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons LEFT JOIN Orders ON Persons.Id_P=Orders.Id_P
ORDER BY Persons.LastName
結果集:
LastName FirstName OrderNo
Adams John 22456
Adams John 24562
Carter Thomas 77895
Carter Thomas 44678
Bush George
LEFT JOIN 關鍵字會從左表 (Persons) 那里返回所有的行,即使在右表 (Orders) 中沒有匹配的行。 - SQL RIGHT JOIN 關鍵字
RIGHT JOIN 關鍵字會右表 (table_name2) 那里返回所有的行,即使在左表 (table_name1) 中沒有匹配的行。
RIGHT JOIN 關鍵字語法
SELECT column_name(s) FROM table_name1
RIGHT JOIN table_name2
ON table_name1.column_name=table_name2.column_name
注釋:在某些數據庫中, RIGHT JOIN 稱為 RIGHT OUTER JOIN。
原始的表 (用在例子中的):
"Persons" 表:
Id_P LastName FirstName Address City
1 Adams John Oxford Street London
2 Bush George Fifth Avenue New York
3 Carter Thomas Changan Street Beijing
"Orders" 表:
Id_O OrderNo Id_P
1 77895 3
2 44678 3
3 22456 1
4 24562 1
5 34764 65
右連接(RIGHT JOIN)實例
現在,我們希望列出所有的定單,以及定購它們的人 - 如果有的話。
您可以使用下面的 SELECT 語句:
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo FROM Persons
RIGHT JOIN Orders
ON Persons.Id_P=Orders.Id_P
ORDER BY Persons.LastName
結果集:
LastName FirstName OrderNo
Adams John 22456
Adams John 24562
Carter Thomas 77895
Carter Thomas 44678
34764
RIGHT JOIN 關鍵字會從右表 (Orders) 那里返回所有的行,即使在左表 (Persons) 中沒有匹配的行。 - SQL FULL JOIN 關鍵字
只要其中某個表存在匹配,FULL JOIN 關鍵字就會返回行。
FULL JOIN 關鍵字語法
SELECT column_name(s)
FROM table_name1
FULL JOIN table_name2
ON table_name1.column_name=table_name2.column_name
注釋:在某些數據庫中, FULL JOIN 稱為 FULL OUTER JOIN。
原始的表 (用在例子中的):
"Persons" 表:
Id_P LastName FirstName Address City
1 Adams John Oxford Street London
2 Bush George Fifth Avenue New York
3 Carter Thomas Changan Street Beijing
"Orders" 表:
Id_O OrderNo Id_P
1 77895 3
2 44678 3
3 22456 1
4 24562 1
5 34764 65
全連接(FULL JOIN)實例
現在,我們希望列出所有的人,以及他們的定單,以及所有的定單,以及定購它們的人。
您可以使用下面的 SELECT 語句:
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons
FULL JOIN Orders
ON Persons.Id_P=Orders.Id_P
ORDER BY Persons.LastName
結果集:
LastName FirstName OrderNo
Adams John 22456
Adams John 24562
Carter Thomas 77895
Carter Thomas 44678
Bush George
34764
FULL JOIN 關鍵字會從左表 (Persons) 和右表 (Orders) 那里返回所有的行。如果 "Persons" 中的行在表 "Orders" 中沒有匹配,或者如果 "Orders" 中的行在表 "Persons" 中沒有匹配,這些行同樣會列出。 - SQL SELECT INTO 語句
SQL 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 ALTER TABLE 語句
Previous Page
Next Page
ALTER TABLE 語句
ALTER TABLE 語句用于在已有的表中添加、修改或刪除列。
SQL ALTER TABLE 語法
如需在表中添加列,請使用下列語法:
ALTER TABLE table_name ADD column_name datatype
要刪除表中的列,請使用下列語法:
ALTER TABLE table_name DROP COLUMN column_name
注釋:某些數據庫系統不允許這種在數據庫表中刪除列的方式 (DROP COLUMN column_name)。
要改變表中列的數據類型,請使用下列語法:
ALTER TABLE table_name
ALTER COLUMN column_name datatype
原始的表 (用在例子中的):
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
SQL ALTER TABLE 實例
現在,我們希望在表 "Persons" 中添加一個名為 "Birthday" 的新列。
我們使用下列 SQL 語句:
ALTER TABLE Persons
ADD Birthday date
請注意,新列 "Birthday" 的類型是 date,可以存放日期。數據類型規定列中可以存放的數據的類型。
新的 "Persons" 表類似這樣:
Id LastName FirstName Address City Birthday
1 Adams John Oxford Street London
2 Bush George Fifth Avenue New York
3 Carter Thomas Changan Street Beijing
改變數據類型實例
現在我們希望改變 "Persons" 表中 "Birthday" 列的數據類型。
我們使用下列 SQL 語句:
ALTER TABLE Persons
ALTER COLUMN Birthday year
請注意,"Birthday" 列的數據類型是 year,可以存放 2 位或 4 位格式的年份。
DROP COLUMN 實例
接下來,我們刪除 "Person" 表中的 "Birthday" 列:
ALTER TABLE Person DROP COLUMN Birthday
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
三.SQL 函數 - SQL 擁有很多可用于計數和計算的內建函數。
函數的語法
內建 SQL 函數的語法是:
SELECT function(列) FROM 表
SQL AVG 函數
AVG 函數返回數值列的平均值。NULL 值不包括在計算中。
SQL AVG() 語法
SELECT AVG(column_name) FROM table_name
SQL AVG() 實例
我們擁有下面這個 "Orders" 表:
O_Id OrderDate OrderPrice Customer
1 2008/12/29 1000 Bush
2 2008/11/23 1600 Carter
3 2008/10/05 700 Bush
4 2008/09/28 300 Bush
5 2008/08/06 2000 Adams
6 2008/07/21 100 Carter
例子 1
現在,我們希望計算 "OrderPrice" 字段的平均值。
我們使用如下 SQL 語句:
SELECT AVG(OrderPrice) AS OrderAverage FROM Orders
結果集類似這樣:
OrderAverage
950
例子 2
現在,我們希望找到 OrderPrice 值高于 OrderPrice 平均值的客戶。
我們使用如下 SQL 語句:
SELECT Customer FROM Orders WHERE OrderPrice>(SELECT AVG(OrderPrice) FROM Orders)
結果集類似這樣:
Customer
Bush
Carter
Adams - SQL MAX() 函數
MAX() 函數
MAX 函數返回一列中的最大值。NULL 值不包括在計算中。
SQL MAX() 語法
SELECT MAX(column_name) FROM table_name
注釋:MIN 和 MAX 也可用于文本列,以獲得按字母順序排列的最高或最低值。
SQL MAX() 實例
我們擁有下面這個 "Orders" 表:
O_Id OrderDate OrderPrice Customer
1 2008/12/29 1000 Bush
2 2008/11/23 1600 Carter
3 2008/10/05 700 Bush
4 2008/09/28 300 Bush
5 2008/08/06 2000 Adams
6 2008/07/21 100 Carter
現在,我們希望查找 "OrderPrice" 列的最大值。我們使用如下 SQL 語句:
SELECT MAX(OrderPrice) AS LargestOrderPrice FROM Orders
結果集類似這樣:
LargestOrderPrice
2000 - SQL SUM() 函數
SUM 函數返回數值列的總數(總額)。
SELECT SUM(column_name) FROM table_name
SQL SUM() 實例
我們擁有下面這個 "Orders" 表:
O_Id OrderDate OrderPrice Customer
1 2008/12/29 1000 Bush
2 2008/11/23 1600 Carter
3 2008/10/05 700 Bush
4 2008/09/28 300 Bush
5 2008/08/06 2000 Adams
6 2008/07/21 100 Carter
現在,我們希望查找 "OrderPrice" 字段的總數。
SELECT SUM(OrderPrice) AS OrderTotal FROM Orders
結果集類似這樣:
OrderTotal
5700
5.合計函數 (比如 SUM) 常常需要添加 GROUP BY 語句。
GROUP BY 語句用于結合合計函數,根據一個或多個列對結果集進行分組。
SQL GROUP BY 語法
SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name
SQL GROUP BY 實例
我們擁有下面這個 "Orders" 表:
O_Id OrderDate OrderPrice Customer
1 2008/12/29 1000 Bush
2 2008/11/23 1600 Carter
3 2008/10/05 700 Bush
4 2008/09/28 300 Bush
5 2008/08/06 2000 Adams
6 2008/07/21 100 Carter
現在,我們希望查找每個客戶的總金額(總訂單)。
我們想要使用 GROUP BY 語句對客戶進行組合。
我們使用下列 SQL 語句:
SELECT Customer,SUM(OrderPrice) FROM Orders GROUP BY Customer
結果集類似這樣:
Customer SUM(OrderPrice)
Bush 2000
Carter 1700
Adams 2000
讓我們看一下如果省略 GROUP BY 會出現什么情況:
SELECT Customer,SUM(OrderPrice) FROM Orders
結果集類似這樣:
Customer SUM(OrderPrice)
Bush 5700
Carter 5700
Bush 5700
Bush 5700
Adams 5700
Carter 5700
上面的結果集不是我們需要的。
那么為什么不能使用上面這條 SELECT 語句呢?解釋如下:上面的 SELECT 語句指定了兩列(Customer 和 SUM(OrderPrice))。"SUM(OrderPrice)" 返回一個單獨的值("OrderPrice" 列的總計),而 "Customer" 返回 6 個值(每個值對應 "Orders" 表中的每一行)。因此,我們得不到正確的結果。不過,您已經看到了,GROUP BY 語句解決了這個問題。
GROUP BY 一個以上的列
我們也可以對一個以上的列應用 GROUP BY 語句,就像這樣:
SELECT Customer,OrderDate,SUM(OrderPrice) FROM OrdersGROUP BY Customer,OrderDate
四.SQL總結
1.SQL 指的是?
您的回答:Structured Query Language
6.通過 SQL,您如何從 "Persons" 表中選取 "FirstName" 列?
您的回答:EXTRACT FirstName FROM Persons
正確答案:SELECT FirstName FROM Persons
8.通過 SQL,您如何從 "Persons" 表中選取 "FirstName" 列的值等于"Peter" 的所有記錄?
您的回答:SELECT FROM Persons WHERE FirstName='Peter'
9.通過 SQL,您如何從 "Persons" 表中選取 "FirstName" 列的值以 "a" 開頭的所有記錄?
您的回答:SELECT FROM Persons WHERE FirstName='%a%'
正確答案:SELECT FROM Persons WHERE FirstName LIKE 'a%'
select from PC_Model where ModuleID LIKE 'S%'
11.通過 SQL,您如何在表 Persons 中選擇 FirstName 等于 Thomas 而 LastName 等于 Carter 的所有記錄?
您的回答:SELECT FROM Persons WHERE FirstName='Thomas' AND LastName='Carter'
12.通過 SQL,您如何按字母順序選取 Persons 表中 LastName 介于 Adams 和 Carter 的所有記錄?
您的回答:SELECT FROM Persons WHERE LastName BETWEEN 'Adams' AND 'Carter'
13.哪條 SQL 語句可返回唯一不同的值?
您的回答:SELECT DISTINCT
15.通過 SQL,您如何根據 "FirstName" 列降序地從 "Persons" 表返回所有記錄?
您的回答:SELECT FROM Persons ORDER BY FirstName DESC
16.通過 SQL,您如何向 "Persons" 表插入新的記錄?
您的回答:INSERT INTO Persons VALUES ('Jimmy', 'Jackson')
17.通過 SQL,您如何向 "Persons" 表中的 "LastName" 列插入 "Wilson" ?
您的回答:INSERT INTO Persons (LastName) VALUES ('Wilson')
18.您如何把 "Persons" 表中 "LastName" 列的 "Gates" 改為 "Wilson" ?
您的回答:UPDATE Persons SET LastName='Wilson' WHERE LastName='Gates'
19.通過SQL,您如何在 "Persons" 表中刪除 "FirstName" 等于 "Fred" 的紀錄?
您的回答:DELETE FROM Persons WHERE FirstName = 'Fred'
20.通過 SQL,您如何返回 "Persons" 表中記錄的數目?
您的回答:SELECT COUNT() FROM Persons
本文由用戶 c85e 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!