SQL語(yǔ)言中最主要、最核心的部分是它的查詢功能。查詢語(yǔ)言用來(lái)對(duì)已經(jīng)存在于數(shù)據(jù)庫(kù)中的數(shù)據(jù)按照特定的組合、條件表達(dá)式或次序進(jìn)行檢索,其基本格式是由SELECT子句、FROM子句和WHERE子句組成的查詢塊:
SELECT<列名表> FROM<表或視圖名> WHERE<查詢限定條件>
也就是說(shuō),SELECT指定了想要看哪些列數(shù)據(jù),F(xiàn)ROM指定這些數(shù)據(jù)來(lái)自哪些表或視圖,WHERE指定了想看哪些行。在SQL語(yǔ)言中除了查詢以外,許多其他功能也都離不開SELECT語(yǔ)句,如創(chuàng)建視圖,實(shí)際上是利用查詢語(yǔ)句來(lái)實(shí)現(xiàn)的;又如插入數(shù)據(jù)時(shí),有很多時(shí)候是從另外一張或多張表中選擇符合條件的數(shù)據(jù)。所以,掌握查詢語(yǔ)句是掌握SQL語(yǔ)言的關(guān)鍵。
以下是SQL Server中的SELECT語(yǔ)句的完整用法。
SELECT select_list [INTO new_table_] FROM table_source [WHERE search_condition] [GROUP BY group_by_expression] [HAVING search_condition] [ORDER BY order_expression [ASC | DESC]]
下面簡(jiǎn)單介紹一下常用的SQL查詢語(yǔ)法。
(1)檢索表中所有列,這是最簡(jiǎn)單的一種方法,其格式為:
SELECT * FROM TABLE_NAME
(2)檢索表中特定列,其格式為:
SELECT COLUMN_NAME FROM TABLE_NAME
在查找多列內(nèi)容時(shí),用‘,’將各字段分開。
(3)用單引號(hào)加入字符串,其格式為:
SELECT COLUMN_NAME 'STRING LITERAL' FROM TABLE_NAME
(4)改變列標(biāo)題。在默認(rèn)情況下,顯示的查詢結(jié)果中的列標(biāo)題是列名,但用戶可以改變列標(biāo)題。共有以下兩種方法:
方法1 采用“列標(biāo)題=列名”的格式
SELECT COLUMN_HEADING=COLUMN_NAME FROM TABLE_NAME
方法2 采用“列名列標(biāo)題”的格式
SELECT COLUMN_NAME COLUMN_HEADING FROM TABLE_NAME
(5)算術(shù)運(yùn)算符。在列出現(xiàn)的位置上,可以使用算術(shù)運(yùn)算符操縱列,對(duì)查詢的結(jié)果進(jìn)行計(jì)算。這些算術(shù)運(yùn)算符包括:+(加)、-(減)、*(乘)、/(除)和%(取模)。其格式為:
{CONSTANT | COLUMN_NAME | FUNCTION |(SUBQUERY)} [{ARITHMETIC_OPERAOR | BITWISE_OPERATOR | STRING_OPERATOR} …]
(6)基于比較的選擇行,其格式為:
SELECT SELECT_LIST FROM TALBE_LIST WHERE EXPRESSION COMPARISION_OPERATOR EXPRESSION
(7)基于范圍的選擇行,其格式為:
SELECT SELECT_LIST FROM TABLE_LIST WHERE EXPRESSION [NOT] BETWEEN EXPRESSION AND EXPRESSION
(8)基于列表的選擇行,其格式為:
SELECT SELECT_LIST FROM TABLE_LIST WHERE [NOT] EXPRESSION [NOT] IN( VALUE_LIST)
(9)基于字符選擇行。查找中,有時(shí)需要對(duì)字符串進(jìn)行比較。使用LIKE運(yùn)算符可以完成對(duì)字符串的模糊匹配。其格式為:
SELECT SELECT_LIST FROM TABLE_LIST WHERE EXPRESSION [NOT] LIKE 'STRING'
(10)基于多個(gè)搜索條件選擇行。在WHERE子句中,也可以使用“邏輯運(yùn)算符”連接多個(gè)條件,構(gòu)成一個(gè)更復(fù)雜的條件進(jìn)行查詢??梢允褂靡韵?種邏輯運(yùn)算符:AND(邏輯與)、OR(邏輯或)、NOT(邏輯非)。具體格式如下:
SELECT SELECT_LIST FROM TABLE_LIST WHERE [NOT] EXPRESSION {AND/OR} [NOT] EXPRESSION
(11)消除重復(fù)行??梢杂肈ISTINCT消除重復(fù)行,其格式為:
SELECT [ALL | DISTINCT] SELECT_LIST FROM TABLE_NAME WHERE SEARCH_CONDITIONS
(12)結(jié)果排序。通常用戶對(duì)查詢出來(lái)的數(shù)據(jù),希望按照某種順序顯示,以便查找。通過ORDER BY子句可以改變查詢結(jié)果的顯示順序。ORDER BY子句的格式為:
SELECT COLUMN_NAME FROM TABLE_NAME [ORDER BY COLUMN_NAME | SELECT_LIST _NUMBER | EXPRESSION [ASC | DESC]
(13)分組查詢。就是將表中數(shù)據(jù)按照一定條件分類組合,再根據(jù)需要得到統(tǒng)計(jì)信息。其格式為:
SELECT COLUMN_NAME FROM TABLE_NAME WHERE SEARCH_CONDITION [GROUP BY [ALL] AGGREGAT E_FREE_EXPRESSION]
(14)COMPUTE和COMPUTE BY??梢酝ㄟ^COMPUTE和COMPUTE BY計(jì)算出匯總數(shù)據(jù)。語(yǔ)法為:
COMPUTE ROW_AGGREGATE (COLUMN_NAME)
(15)連接查詢。在數(shù)據(jù)庫(kù)應(yīng)用中,經(jīng)常要涉及從兩個(gè)或更多的表中查詢數(shù)據(jù),這就需要使用連接查詢。其格式如下:
SELECT COLUMN_NAME FROM TABLE_NAME WHERE TABLE_NAME.COLUMN JOIN_ OPERATOR TABLE_NAME.COLUMN
上述的連接操作符(JOIN_OPERATOR)可以是:=、>、<、>=、<=、! =、< >、! >、! <、= *、* =。在ANSI中,“=”連接應(yīng)該寫成Inner Join;“* =”連接應(yīng)該寫成LEFT OUT JOIN;“= *”連接應(yīng)該寫成“RIGHT OUT JOIN”。在SQL Server中,這些寫法都可以用。但是,ANSI規(guī)定的寫法是INNER JOIN等標(biāo)志。一般而言,在任何連接中,都使用“主鍵=外鍵”的連接查詢條件。
(16)執(zhí)行子查詢。子查詢是指一條SELECT語(yǔ)句作為另一條SELECT語(yǔ)句的一部分。外層的SELECT語(yǔ)句稱為外部查詢,內(nèi)層的SELECT語(yǔ)句稱為內(nèi)部查詢(或子查詢)。子查詢分成兩種:嵌套查詢和相關(guān)子查詢。子查詢能夠?qū)⒈容^復(fù)雜的查詢分解為幾個(gè)簡(jiǎn)單的查詢。雖然使用子查詢可以產(chǎn)生在表之間使用連接操作符相同的結(jié)果,但是,其操作運(yùn)行速度較連接操作慢。
嵌套查詢的流程是:首先執(zhí)行內(nèi)部查詢,查詢出來(lái)的數(shù)據(jù)并不顯示出來(lái),而是傳遞給外層語(yǔ)句,作為該語(yǔ)句的查詢條件來(lái)使用。子查詢可以多層次嵌套。
例如查詢每個(gè)書名、ID號(hào)及擁有該書的最高百分比版權(quán)的作者ID,格式為:
SELECT TITLE_ID, AU_ID, ROYALTYPER FROM TITLEAUTHORTA WHERE ROYALTYPER = (SELECT MAX (ROYALTYPER) FROM TITLEAUTHOR WHERE TITLE_ID =TA.TITLE_ID)
(17)查詢的基礎(chǔ)上創(chuàng)建新表。SELECT INTO的作用是在查詢的基礎(chǔ)上創(chuàng)建新表。若建永久表,必須設(shè)置“SELECT INTO / BULKCOPY”;若建臨時(shí)表,必須在表前設(shè)置#(局部臨時(shí)表)或##(全局臨時(shí)表)。新表的行和列來(lái)自查詢結(jié)果。例如創(chuàng)建#PHONYTABLE臨時(shí)表,該表的數(shù)據(jù)由每個(gè)書名的前40個(gè)字符及月平均銷售量組成,格式為:
SELECT TITLE = SUBSTRING (TITLE, 1, 40), MONTHLY = YTD_SALES/12 INTO #PHONYTABLE FROM TITLES
(18)合并數(shù)據(jù)集。合并數(shù)據(jù)集(UNION)的作用是,把結(jié)果組合成一個(gè)結(jié)果集來(lái)操作兩個(gè)或更多的查詢結(jié)構(gòu)。例如:
SELECT 'ANSI', CONVERT (varchar (30), GETDATE (), 102) AS style UNION SELECT 'Japanese', CONVERT (varchar (30), GETDATE (), 111) UNION SELECT 'Europen', CONVERT (varchar (30), GETDATE (), 113)
新聞熱點(diǎn)
疑難解答