SQL是一個非過程化的語言,由於它一次處理一個記錄,對數據提供自動導航。SQL容許用戶在高層的數據結構上工做,而不對單個記錄進行操做,可操做記錄集,全部SQL語句接受集合做爲輸入,返回集合做爲輸出。SQL的集合特性容許一條SQL語句的結果做爲另外一條SQL語句的輸入。sql
集中全部的行在一塊兒,它包含了指定列的數據及容許聚合函數來計算一個列或者多個列。數據庫
SELECT MAX(salary), dept FROM employee GROUP BY dept
容許你爲每一組指定條件,換句話說,能夠根據你指定的條件來選擇行。若是使用它,應該處在GROUP BY子句以後。markdown
SELECT dept, avg(salary) FROM emplyee GROUP BY dept HAVING avg(salary) > 20000
ASC = Ascending order —-這個是缺省的
DESC =Descending order
多列進行排序,列於列之間加上逗號。數據結構
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
生成同時匹配表A和表B的recordspa
生成表A和表B裏的記錄全集,包括兩邊都匹配的記錄。若是有一邊沒有匹配的,缺失的這一邊爲nullcode
生成表A的全部記錄,包括在表B裏匹配的記錄。若是沒有匹配的,右邊將是null對象
有篇很好的文章用韋恩圖講解join語句http://blog.jobbole.com/40443/,如圖
blog
索引容許DBMS更快地訪問數據,當查詢以列爲索引的時候搜索行,這樣查詢會快不少。排序
對於一我的買多件物品的只顯示一行便可
SELECT DISTINCT SELLERID,OWNERLASTNAME, OWNERFIRSTNAME FORM ANTIQUES,ANTIQUEOWNERS WHERE SELLERID = OWNERID ORDERBY OWNERLASTNAME,OWNERID
顯示多個查詢的結果,組合他們的輸出,使用UNION關鍵字。
SELECT buyerid FROM antiqueowners UNION SELECT ownerid FROM orders
使用UNION會進行自動複製排除,而且列數據類型匹配才能查詢
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 的時候,你不能同時使用聚合函數和其它函數;
- 有一些方法能夠將普通函數封裝在聚合函數中;