SQL語言_4 連接查詢和分組查詢
作者:田超凡
版權所有,轉載請註明原作者,仿冒侵權必究法律責任
1.數據庫的查詢機制是什麼?
查詢是針對表中已存在的數據行而言的,可以將它簡單理解爲篩選,將滿足條件的數據抽取出來。數據庫表在接受查詢請求時,可以將它理解爲“它將逐行判斷”,將滿足條件的記錄抽取出來並結合在一起形成記錄集,在記錄集中依然可以進行再次查詢。
2.T-SQL進行增、刪、改、查(查詢全部數據、查詢部分數據、模糊查詢、內部函數的使用)的語句有哪些?
增:
INSERT INTO…VALUES…..
INSERT INTO…SELECT….FROM….
SELECT….INTO…..FROM….
刪:
DELETE FROM….WHERE….
DELETE FROM...=TRUNCATE TABLE….
改:
UPDATE…SET….WHERE….
查:
查詢表中所有數據:SELECT * FROM…..
查詢表中部分數據:SELECT….FROM….WHERE…ORDER BY…
模糊查詢:
使用LIKE子句匹配字符串或字符串中的一部分
SELECT…FROM…WHERE…LIKE ‘模糊檢索條件,可以使用通配符’
使用BETWEEN在某個範圍內進行查詢
SELECT….FROM…WHERE…BETWEEN…AND…
使用IN在列舉值內進行查詢
SELECT….FROM…WHERE…IN(value1,value2,value3….)
T-SQL中的通配符:
_只能替代一個字符
%可以替代任意長度的字符串(包括長度爲0)
[]在某個範圍內
[^]不在某個範圍內
使用NOT關鍵字可以進行取反操作
SELECT…FROM…WHERE….NOT BETWEEN…AND…
SELECT…FROM…WHERE…NOT IN(value1,value2,value3…)
內部函數:
字符串函數(對字符串進行操作):
常用的有LEFT()、RIGHT()、CHARINDEX()、LEN()、REPLACE() STUFF()
日期函數(對日期時間類型的數據進行處理)
常用的有GETDATE()、DATEDIFF()、DATEPART()
數學函數(對數字數據類型的數據進行常見的數學計算)
常用的有:RAND()、FLOOR()、SQRT()
系統函數(獲取系統數據)
常用的有:CONVERT()、DATALENGTH()
3.SQL語言中的聚合函數有哪些?他們的主要作用是什麼?
SUM()求和、AVG()平均數、MAX()最大值、MIN()最小值、COUNT()計數
SUM()返回表達式中所有數值之和,忽略任何空值,僅適用於數字數據類型的列
AVG()返回表達式中所有數值的平均數,忽略任何空值,僅適用於數字數據類型的列
MAX()返回表達式中的最大值
MIN()返回表達式中的最小值
MAX()和MIN()同樣忽略任何空值,但是MAX()和MIN()可以適用於數字類型、字符類型、日期時間類型的列,在字符序列中,MAX()函數返回排序序列的最大值,MIN()函數返回排序序列的最小值。
COUNT()返回提供的組或記錄集中的計數,COUNT()函數可以適用於除了text/image/ntext類型以外的任意數據類型,在COUNT()函數中可以使用通配符*,從而返回表中所有行的計數,包括包含空值的行。當使用COUNT()函數對某列進行計數時,將忽略空值。
4.T-SQL查詢語句中可以使用哪些方式對查詢結果進行篩選和自定義顯示方式?
在查詢結果中使用列的別名:
列名AS 別名
別名=列名
列名 別名(空格分隔)
在查詢結果中合併多個列:在SELECT子句中使用”+”連接符連接列名即可。
注意:連接的列必須是相同數據類型,比如要麼都是字符串型、要麼都是數值型,不能將字符串型和數值型列進行合併,不然會報類型轉換錯誤。如果兩個列都是字符串型,則直接進行拼接。如果兩個列都是數字型,則返回數字相加後的和。
在查詢結果中插入常量列:
SELECT…常量值 AS 列名
限制返回的行數:TOP關鍵字
限制返回的行數所佔的百分比:PERCENT關鍵字
查詢空值:
IS NULL/IS NOT NULL
5.如何使用T-SQL語句對兩個表中的數據進行連接查詢?
SELECT……FROM table1 AS 別名,table2 AS 別名
WHERE 關聯的某個列(一般關聯的是主鍵和外鍵,因爲它們之間是對應的)和其他查詢條件
※通過學習本章,你需要重點掌握的知識:
1.什麼是分組查詢?有什麼作用?如何進行分組查詢?
2.分組查詢如何對查詢結果限定條件?它們的順序是怎樣的?
3.分組查詢對SELECT後面指定的列有什麼影響?
4.什麼是多表連接查詢?有什麼作用?如何進行多表連接查詢?多表連接查詢的方式有哪些?
5.如何進行內連接查詢?如何進行外連接查詢?
6.T-SQL中查詢語句(包括基礎查詢、模糊查詢、分組查詢、連接查詢)在實際運用中有哪些注意事項?
※對照下面的總結,看看有沒有掌握本章知識點:
1.
分組查詢是數據庫查詢機制中的一種查詢方式之一,分組查詢可以針對某個列或多個列中的數據進行分組,然後通過各種條件限定(包括先篩選、再分組、分組後再次篩選)對數據進行查詢。使用分組查詢可以方便對相同的數據分門別類分成多個組,並以組爲基準加以處理。方便對數據進行統計,通常和聚合函數搭配使用。
T-SQL中使用GROUP BY子句進行分組查詢,GROUP BY子句後面接的是需要對數據進行分組的列,GROUP BY子句中的列名必須在SELECT子句中存在。簡單來說,需要分組的列必須出現在查詢結果中。GROUP BY子句只能對列進行分組,後面只能接列名,可以對多個列進行分組(多個列之間使用逗號隔開)。分組查詢實質上可以理解爲將分組後的每個組當成一個列進行查詢、統計和匹配。
2.
分組查詢中限定條件的子句有以下幾種:
WHERE子句:過濾掉數據源中不符合查詢條件的數據
HAVING子句:過濾掉分組後的數據中不滿足查詢條件的數據
在進行分組查詢時,基本語法如下:
SELECT…..FROM….
WHERE….第一次篩選
GROUP BY…分組
HAVING…第二次篩選
ORDER BY…排序
其中,限制條件的子句順序如下:
WHERE——GROUP BY——HAVING
首先使用WHERE子句對數據源中的數據進行篩選(第一次篩選)
然後使用GROUP BY子句對篩選後的數據進行分組
最後使用HAVING子句對分組後的數據進行再次篩選
還可以使用ORDER BY子句進行排序,當需要對數據進行排序時,ORDER BY子句只能放在查詢語句塊的結尾
3.
在使用分組查詢時,SELECT後面指定的列是有限制的,它必須滿足下列情況之一:
- 被分組的列
- 爲每個分組返回一個值的表達式,如聚合函數計算出的列
4.
多表連接查詢是一種可以對多個數據表中的數據進行聯合查詢、可以返回多個表中的列的值,通過表之間建立的關聯列進行匹配,將滿足連接條件的數據篩選出來形成結果集的查詢方式。使用多表連接查詢可以對多個數據庫表中的數據進行查詢,大大優化了查詢過程和查詢結果,查詢效率非常高,可以在一個結果集中顯示多個表中的數據。
多表連接查詢的方式主要是建立表之間的關聯(要確保多個表之間有關聯的列)。多表連接查詢分爲內連接查詢和外連接查詢,可以從多種不同的角度對多個數據庫表中的數據進行匹配和查詢。
5.
內連接查詢:
通過INNER JOIN ON或WHERE子句進行表之間的關聯,內連接查詢中表的等級是平等的。內連接查詢將返回兩個表或兩個以上的表的組合中滿足連接條件的數據,將滿足連接條件的數據直接返回到結果集中,對於不滿足連接條件的數據則將其忽略。
外連接查詢:
和內連接查詢對應的就是外連接查詢。外連接查詢必須至少返回一個表中的所有記錄,外連接查詢中,建立連接關係的表之間存在主從之分。以主表中的每個數據行匹配從表中的每個列,將滿足連接條件的數據直接返回到結果集中,對於不滿足連接條件的數據則將其填充爲NULL值(空值)之後再返回到結果集中。
外連接查詢又可以分爲左外連接查詢(LEFT OUTER JOIN ON)和右外連接查詢(RIGHT OUTER JOIN ON)。
左外連接查詢通過使用LEFT OUTER JOIN ON或LEFT JOIN ON實現,在進行左外連接查詢時,必須返回左表中所有匹配的數據行。如果左表中的數據在右表中沒有對應的項,則將其填充爲NULL值。
右外連接查詢和左外連接查詢類似,右外連接查詢通過使用RIGHT OUTER JOIN ON或RIGHT JOIN ON實現,右外連接查詢必須返回右表中所有匹配的數據行,如果右表中的數據在左表中沒有對應的項,則將其填充爲NULL值。
5.
T-SQL中查詢語句的注意事項:
- 結果集是虛擬的表,只是一種臨時的輸出形式。
- 在使用多表連接查詢時,如果SELECT語句中指定的列在多個表中重複出現,則需要使用表的別名進行區分指定。
SELECT後面指定的列如果是在分組查詢中,則是有限制的,SELECT後面指定的列必須在GROUP BY子句中存在,或者是對每個分組返回一個值的表達式,如聚合函數計算出的列。當需要在結果集中顯示列的別名時,則可以使用三種方式指定列的別名。
- 關於ORDER BY子句進行排序時的注意事項:
ORDER BY子句一般用來基於一個或多個列中的數據進行排序,排序方式有ASC升序和DESC降序兩種,如不指定排序方式,則默認升序ASC排序。當需要對多個列進行排序時,多個列之間用逗號隔開。以ORDER BY子句後面指定的第一個列爲基準進行排序。ORDER BY子句只能出現在一個查詢語句塊的結尾。
- 使用多表連接查詢時,必須指定關聯的列,不然則會隨機匹配,查詢結果沒有任何規律並且數據絮亂,嚴重時會影響系統性能。因此在使用多表連接查詢時,一定要指定關聯的、匹配的列,滿足對應關係。
- 聚合函數只返回一個值,因此不能將聚合函數和可能返回多個值的列放在一起查詢(分組查詢統計除外)。
- 查詢語句塊中的每一個子句一般都有自己的作用和順序,一般建議嚴格按照查詢語法編寫查詢代碼,從而有效減少錯誤發生的次數。在查詢過程中可以適當對查詢語句中的代碼進行優化,從而使查詢速度更快、效率更高,更好地改善系統的性能。