眾所周知在SQL的世界中共有九種SQL語句,而在這些語句中最複雜的就屬我們的Select語句了,它是我們資料庫中用的最多的語句,於是乎如果我們把Select語句掌握了那我們的SQL語言就至少掌握了一半多了。那麼就請跟隨我們介紹來學習Select語句吧。
在我們找東西時最先採取的戰略是知道他放哪兒了,想到了放哪兒那就很好找了,相同的道理在進行資料檢索時,我們必須知道需要的資料放在哪兒了。當然了我們的Select語句可以有多個查詢字句組成也可進行Select語句的嵌套。
首先讓我們來認識下Select語句可用於哪些檢索:
SQL 可用於的查詢 |
全部的行和列; |
全部的行和特定的列 |
限定的範圍的行 |
隱藏有重複值的行 |
與一組值匹配的行 |
根據未知值檢索的行 |
根據多個搜尋條件檢索的行 |
接下來我們開始認識Select語句的基本結構:
Select[ALL | Distinct] select_list [INTO [new_table_name]] From {table_name |view_name} [[,{table_name2 | view_name2} […,{table_name16} ]] [Where search_conditions] [Group Bygroup_by_list] [Having search_conditons] [Order
By order_list [ASC|Desc]]
這是經過簡化後的Select結構,並不是SQL語句中的標準結構,上面簡化的是我們經常使用的結構。但那麼多的英文名字讓我們怎麼理解呢?不用著急,讓我來一一解讀。
Select語句——字句
Select字句指定了需要同多查詢返回表的列,它的文法為:Select [ALL|DISTINCT] [TOP n] <select_list> |
ALL |
指明查詢結構中可以顯示值相同的列,它是系統預設的 |
ALL和Distinct的區別 在於all可以顯示相同 的值,而且它是系統 預設的但是distinct不 會顯示相同的值,遇到相同的列時 只顯示其中之一即可。 |
DISTINCT |
指明查詢結果中如果有值相同的列,則只顯示其中的一列。 對Distinct選項來說,Null值被認為是相同的值; |
TOP n [PERCENT] |
制定返回查詢結果的前n行資料,如果percent關鍵字指定的話, 則返回查詢結果的前百分之n行資料 |
select_list |
表示需要查詢的欄位的列表,欄位名稱之間用逗號分隔這個列 表中既可以包含資料來源表或視圖中的欄位名稱,換可以包含其它運算式。如用*,則系統將返回資料表中的所有欄位 |
當然我們還有其它的子句,下面我們按照分類來介紹每個子句。
INTO子句:
INTO子句:用於把查詢結果存放到一個建立的表中 |
文法為:INTO new_table |
new_table制定了建立表的名稱,新表的列由 SELECT字句中指定的列構成 |
新表中的資料行是由WHERE字句指定的如果 SELECT字句中制定了計算資料行,在新表中對應 的列則不是計算資料行,而是一個實際儲存在表中的列其中的資料由執行SELECT_INTO文法運算。 |
UNION子句:
UNION子句:將兩個或兩個以上的查詢結果合并為一個結果集。它與使用串連查詢合并兩個表的列是不同的, 使用UNION操作符合并查詢結果需要遵循兩個基本規則:列的樹木和順序在所有查詢中必須是一致的;資料 類型必須相容
|
文法: Select 語句 UNION [ALL] Select 語句 |
注意: ①使用union子句獲得的結果集的欄位名稱與union運算子之前的select語句結果集中的欄位 名相同,union運算子之後的select與語句的結果集的欄位名將被忽略; ②在預設情況下,union運算子將從最終集中重複資料刪除的記錄。如果希望最終結果既保留所 有的記錄,則必須使用all關鍵字; ③在使用union運算子時,單獨的select語句中不能包含其自己的order by或compute子句, 只能在最後一個select語句的後面使用一個order by或compute子句,此時,該子句將適用 於最終的組合結果集; ④若需要對查詢結果進行分組以及在分組後對結果使用having子句進行過濾,則必須在單 獨的select語句中指定group by和having子句。 |
WHERE子句:
WHERE子句:指定需要檢索的條件,以限制返回的資料行 |
查詢條件 |
比較子:<、<=、>、>=、=、>、!=、!<、!> |
範圍說明:Between A and B、Not Between A and B |
可選值列表:IN、Not In |
模式比對:LIKE,NOT Like |
是否空值:IS NULL,IS Not Null |
上述條件的邏輯組合:AND,OR,NOT |
HAVING子句:指明分組搜尋條件,常與Group By子句一起使用。Text、Ntext、Image資料類型不能用於HAVING子句。其文法為:HAVING <search_condition>
FROM子句;
FROM子句:指定需要進行資料查詢的表 |
文法為:FROM {<table_source>} [,…n] |
table_source:指明SELECT語句要用到的表、視圖等資料來源,該列表中的資料表明和試圖名之間使用逗號分隔。 |
From子句還可以指定資料表或視圖之間聯結的類型,這些類型將決定於on子句中指定的串連條件。 |
GROUP BY子句:
GROUP BY子句:指定查詢結果的分組條件 |
文法為: GROUP BY [ALL] <group_by_expression> [,…n] [WITH {CUBE | ROLLUP}] |
group_by_expression:指明分組條件。通常是一個 列名,但不能是列的別名。資料類型為TEXT、 NTEXT、IMAGE或BIT類型的列不能作為分組條件 |
CUBE:除了返回由GROUP BY子句指明的列外, 換返回按組統計的行。返回的結果先按分組的第一 個條件列排序顯示,以此類推。統計行包括了 GROUP BY子句指定的列的各種組合的資料統計。 |
ROLLUP:與CUBE不同的是,此選項對GROUP BY子句中的列順序敏感,它只返回第一個分組條 件指定的列的統計行,改編列的順序會使返回的 結果行數發生變化。 |
ORDER BY子句:
ORDER BY子句:指定查詢結果的相片順序 |
文法為: ORDER BY {order_by_ expression [ASC | DESC] } [,…n] |
order_by_expression:指定排序的規則order_by_expression 可以是表或視圖的列的名稱或別名,如果SELECT語句中沒有 使用DISTINCT選項或UNION 操作符,那麼ORDER BY子句中 可以包含select list中沒有出現的列名或別名。ORDER BY子句 中也不能使用TEXT、NTEXT和IMAGE資料類型。 |
ASC:指明查詢結果按升序排序這是系統預設值。 |
DESC:指明查詢結果按降序排列。 |
COMPUTE子句:
COMPUTE子句:在查詢結果末尾產生一個摘要資料行 |
文法: Compute { {AVG | COUNT | MAX | MIN | SUM} (expression)} [,…n] [BY expression [,…n]] |
expression:指定需要統計的列的名稱,此列需要包含於 SELECT列表中,且不能用別名。COMPUTE子句也不能 使用TEXT、NTEXT、和IMAGE資料類型。 |
BY expression:在查詢結果中產生分類統計的行。如果 使用此選項,則必須同時使用ORDER BY子句。 Expression是對應的ORDER BY子句中的 order_by_expression的子集或全集。 |
AVG | COUNT | MAX | MIN | SUM:以上參數與對應的函 數有相同的含義,這些函數均會忽略NULL值且DISTINCT 選項不能在此使用。 |
對Select語句的應用無非就是對它的子句、函數和幾種查詢的應用,在此我們主要介紹了select語句的子句,在下片部落格中主要介紹SQL查詢命令,有不對的地方還請指出。