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子句之後。

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 保留兩個子查詢都有的結果並去重
發佈了48 篇原創文章 · 獲贊 29 · 訪問量 16萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章