- 目錄
- 前言:
- 1、結構化查詢語言(Structured Query Language)簡稱SQL。
- 2、基本SELECT語句語法
- 3、多表鏈接
- 4、笛卡爾積
- 5、ANSI SQL ANSI SQL:1999標準的連接語法
- 6、單行函數和分組函數的區別:
- 7、分組函數
- 8、SQL語句的執行順序:
- 9、子查詢:
- 10、Data Manipulation Language ,簡稱DML,主要用來實現對 數據庫表中的數據進行操作
- 11、多行子查詢
- 總結:
目錄
前言:
最近由于工作需要,把數據庫的知識復習了一遍。以下是自己總結的一些個人認為比較重要的知識點(有些是個人不太熟的知識點就記下來當筆記吧),如有不足或錯誤,請大家及時指出。
1、結構化查詢語言(Structured Query Language)簡稱SQL。
2、基本SELECT語句語法
SELECT [DISTINCT]{ |column|expression [alias],...} FROM table;
3、多表鏈接
連接是在多個表之間通過 定的連接條件 連接是在多個表之間通過一定的連接條件,使表之間發生關聯,進而能從多個表之間獲取數據。
- N個表相連時,至少需要N-1個連接條件
4、笛卡爾積
第一個表中的所有行和第二個表中的所有行都發生連接。
笛卡爾積的寫法
SQL> SELECT emp.empno, emp.ename, emp.deptno,
2 dept.deptno, dept.loc
3 FROM emp, d t ep ;
5、ANSI SQL ANSI SQL:1999標準的連接語法
SELECT table1.column, table2.column
FROM table1
[CROSS JOIN table2] |
[NATURAL JOIN table2] |
[JOIN table2 USING ( USING (column name column_name)] |
[JOIN table2
ON(table1.column_name = table2.column_name)] |
[LEFT|RIGHT|FULL OUTER JOIN [LEFT|RIGHT|FULL OUTER JOIN table2
ON (table1.column_name = table2.column_name)];
6、單行函數和分組函數的區別:
7、分組函數
– 分組函數是對表中一組記錄進行操作,每組只返回一個結果,即首先要對表記錄進行分組,然后再進行操作匯總, 每組返回一個結果,分組時可能是整個表分為一組,也可能根據條件分成多組。
- 分組函數常用到以下五個函數:
? MIN
? MAX
? SUM
? AVG
? COUNT
- 常用的語法格式:
SELECT [column,] group_function(column)
FROM tab el
[WHERE condition]
[GROUP BY column]
[HAVING group_function(column)expression
[ORDER BY column| group_function(column)expression];
- 一些錯誤案例:
8、SQL語句的執行順序:
- SELECT語句執行過程:
– 1.通過FROM子句中找到需要查詢的表 子句中找到需要查詢的表;
– 2.通過WHERE子句進行非分組函數篩選判斷;
– 3.通過GROUP BY子句完成分組操作;
– 4.通過HAVING子句完成組函數篩選判斷;
– 5.通過SELECT子句選擇顯示的列或表達式及組函數;
– 6.通過ORDER BY子句進行排序操作。
- 案例
9、子查詢:
子查詢語法:
SELECT select_list
FROM table
WHERE expr operator
(SELECT select_list
FROM table);
? 括號內的查詢叫做子查詢,也叫內部查詢,先于主查詢執行。
? 子查詢的結果被主查詢(外部查詢)使用
? expr operator包括比較運算符。
–單行運算符:>、=、>=、<、<>、<=
–多行運算符: IN、ANY、ALL
? 子查詢可以嵌于以下SQL子句中:
–WHERE子句
–HAVING子句
–FROM子句
? 子查詢使用指導
–子查詢要用括號括起來
–將子查詢放在比較運算符的右邊
–對于單行子查詢要使用單行運算符 (單行子查詢是針對子查詢的返回值只有一個)
–對于多行查詢要使用多行運算符
錯誤案例(子查詢中使用分組函數返回多個結果):
10、Data Manipulation Language ,簡稱DML,主要用來實現對 數據庫表中的數據進行操作
- 索引( INDEX ):
– 是對數據庫表中一個或多個列的值進行排序的一種數據庫對象。
– 在數據庫中,通過索引可以加速對表的查詢速度;
索引缺點
? 占用空間;
? 降低DML的操作速度;
適合創建索引情況
? 表數據量很大
? 要查詢的結果集在2%-4%左右
? 經常用來做WHERE條件中的列或者多表連接的列
? 查詢列的數據范圍分布很廣
? 查詢列中包含大量的NULL值,因為空值不包含在索引中
不適合創建索引情況
? 數據量很小的表
? 在查詢中不常用來作為查詢條件的列
? 頻繁更新的表
? 索引列作為表達式的一部分被使用時,比如常查詢的條件是SALARY*12 SALARY*12,此時在SALARY列上創建索引是沒有效果的
? 查詢條件中有單行函數時,用不上索引。
11、多行子查詢
–子查詢返回記錄的條數 可以是一條或多條。
–和多行子查詢進行比較時,需要使用多行操作符,多行操作符包括:
? IN
? ANY
? ALL
–IN操作符和以前介紹的功能一致,判斷是否與子查詢 的任意一個返回值相同。(單行子查詢操作符不能接子查詢中含有分組函數執行語句的情況)
ANY的使用
– ANY:表示和子查詢的任意一行結果進行比較,有一個滿足 條件即可。
? < ANY:表示小于子查詢結果集中的任意 表示小于子查詢結果集中的任意一個 ,即小于最 大值就可以。
? > ANY:表示大于子查詢結果集 個 中的任意一 ,即大于最小值就可以。
? = ANY:表示等于子查詢結果中的任意一個,即等于誰都 可以,相當于IN。
? ALL的使用
– ALL:表示和子查詢的所有行結果進行比較,每一行必須都 滿足條件。
? < ALL:表示小于子查詢結果集中的所有行 表示小于子查詢結果集中的所有行,即小于最小 值。
? > ALL:表示大于子查詢結果集 行 中的所有 ,即大于最大 值。
? = ALL :表示等于子查詢結果集中的所有行,即等于所有值,通常無意義。
總結:
SQL這塊需要掌握以下這些知識點:
- 掌握單表查詢、多表查詢、分組、子查詢等查詢方法,能寫出相對復雜的查詢語句,重點中的重點。
- 掌握Oracle數據庫常用的單行函數及分組函數。
- 掌握插入數據、修改數據、刪除數據語句。
總結成一句話就是能夠利用SQL進行數據分析就OK了。
除此之外還需要了解一些相關的數據庫概念。這里就不一一列舉了。如果各位網友看完之后想練下手,(含有各種版本數據庫的建表數據和對應的案例練習題以及答案)
請參考:https://blog.csdn.net/qq_16633405/article/details/78483269