SQL筆記

SQL是一個非過程化的語言,由於它一次處理一個記錄,對數據提供自動導航。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子句以後。markdown

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的recordspa

  • FULL OUTER JOIN

生成表A和表B裏的記錄全集,包括兩邊都匹配的記錄。若是有一邊沒有匹配的,缺失的這一邊爲nullcode

  • left outer join

生成表A的全部記錄,包括在表B裏匹配的記錄。若是沒有匹配的,右邊將是null對象

有篇很好的文章用韋恩圖講解join語句http://blog.jobbole.com/40443/,如圖
這裏寫圖片描述blog

索引

索引容許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 保留兩個子查詢都有的結果並去重
相關文章
相關標籤/搜索