SQL 必知必會(總結)

c85e 10年前發布 | 36K 次閱讀 5.2.1版本發布

一.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 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!