SQL是一個非過程化的語言,因爲它一次處理一個記錄,對數據提供自動導航。SQL允許用戶在高層的數據結構上工作,而不對單個記錄進行操作,可操作記錄集,所有SQL語句接受集合作爲輸入,返回集合作爲輸出。SQL的集合特性允許一條SQL語句的結果作爲另一條SQL語句的輸入。
- DML(Data Manipulation Language)數據操作語言,用於檢索或者修改數據
- DDL(Data Definition Language)數據定義語言,用於定義數據的結構, 比如 創建、修改或者刪除數據庫對象。
- DCL(Data Control Language)數據控制語言,用於定義數據庫用戶的權限
DML
- SELECT
- INSERT
- UPDATA
- DELETE
DDL
- CREATE TABLE
- ALTER TABLE
- DROP TABLE
- DROP INDEX
DCL
- ALTER PASSWORD
- GRANT
- REVOKE
- CREATE SYNONYM
SELECT語句
GROUP BY
集中所有的行在一起,它包含了指定列的數據及允許聚合函數來計算一個列或者多個列。
SELECT MAX(salary), dept FROM employee GROUP BY dept
HAVING
允許你爲每一組指定條件,換句話說,可以根據你指定的條件來選擇行。如果使用它,應該處在GROUP BY子句之後。
SELECT dept, avg(salary) FROM emplyee GROUP BY dept HAVING avg(salary) > 20000
ORDER BY
ASC = Ascending order —-這個是缺省的
DESC =Descending order
多列進行排序,列於列之間加上逗號。
組合條件和布爾運算符
- AND/OR
- IN/BETWEEN 相對應 NOT IN / NOT BETWEEN
JOIN子句
join允許你從兩個表或者更多的表連接進行數據檢索,而只需要用一個SELECT語句
SELECT customer_info.firstname, customer_info.lastname,purchase.itme FROM customer_info INNER JOIN purchase ON
customer_info.customer_number = purchase.customer_number
- INNER JOIN
生成同時匹配表A和表B的record
- FULL OUTER JOIN
生成表A和表B裏的記錄全集,包括兩邊都匹配的記錄。如果有一邊沒有匹配的,缺失的這一邊爲null
- left outer join
生成表A的所有記錄,包括在表B裏匹配的記錄。如果沒有匹配的,右邊將是null
有篇很好的文章用韋恩圖講解join語句http://blog.jobbole.com/40443/,如圖
索引
索引允許DBMS更快地訪問數據,當查詢以列爲索引的時候搜索行,這樣查詢會快很多。
DISTINCT和排除複製
對於一個人買多件物品的只顯示一行即可
SELECT DISTINCT SELLERID,OWNERLASTNAME, OWNERFIRSTNAME FORM ANTIQUES,ANTIQUEOWNERS WHERE SELLERID = OWNERID
ORDERBY OWNERLASTNAME,OWNERID
EXISTS 和 ALL
UNION 和 外部連接
顯示多個查詢的結果,組合他們的輸出,使用UNION關鍵字。
SELECT buyerid FROM antiqueowners UNION SELECT ownerid FROM orders
使用UNION會進行自動複製排除,並且列數據類型匹配才能查詢
SQL語句的執行順序
FROM - WHERE - GROUP BY - HAVING - SELECT - DISTINCT - UNION - ORDER BY
SELECT A.x + A.y AS z
FROM A
WHERE z = 10 -- z 在此處不可用,因爲SELECT是最後執行的語句!
SELECT語句規則:
- 你僅能夠使用那些能通過表引用而得來的字段;
- 如果你有 GROUP BY 語句,你只能夠使用 GROUP BY 語句後面的字段或者聚合函數;
- 當你的語句中沒有 GROUP BY 的時候,可以使用開窗函數代替聚合函數;
- 當你的語句中沒有 GROUP BY 的時候,你不能同時使用聚合函數和其它函數;
- 有一些方法可以將普通函數封裝在聚合函數中;
集合運算( set operation)
- DISTINCT 在映射之後對數據進行去重
- UNION將兩個子查詢拼接起來並去重
- UNION ALL將兩個子查詢拼接起來但不去重
- EXCEPT 將第二個子查詢的結果中從第一個子查詢中去掉
- INTERSECT 保留兩個子查詢都有的結果並去重