小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

SQL查詢語句基礎(chǔ)

 加菲 2005-11-23
SQL查詢語句基礎(chǔ)
作者:佚名    文章來源:本站原創(chuàng)    點擊數(shù): 1888    更新時間:2004-2-23

DataTrans-1500服務(wù)器是用SQL Server服務(wù)器作數(shù)據(jù)的底層管理,當(dāng)用戶對DataTrans-1500服務(wù)器進(jìn)行查詢時,服務(wù)器通過search.command命令文件以及.from檢索途徑對象來構(gòu)造SQL查詢語句,通過此SQL 查詢語句來對SQL Server服務(wù)器發(fā)起檢索。

DataTrans-1500服務(wù)器的系統(tǒng)管理員,了解、掌握SQL查詢語句的語法,能更好的作好二次開發(fā)。鑒于DataTrans-1500服務(wù)器系統(tǒng)管理員所作的二次開發(fā)只與查詢語句有關(guān),本章只介紹SQL查詢語句中與SELECT語句有關(guān)的一些基礎(chǔ)知識,以方便廣大不熟悉SQL查詢語言的DataTrans-1500服務(wù)器系統(tǒng)管理員。有關(guān)SQL語言更詳細(xì)的知識請查閱有關(guān)手冊。

SQL (Struct Query Language)即結(jié)構(gòu)化查詢語言,它是使用關(guān)系模型的數(shù)據(jù)庫應(yīng)用語言,由IBM在70年代開發(fā)出來。現(xiàn)在SQL結(jié)構(gòu)化查詢語言已經(jīng)成為一個工業(yè)標(biāo)準(zhǔn),幾乎所有的數(shù)據(jù)庫都支持它的查詢,SQL Server更是如此。

SQL Server服務(wù)器中,用SELECT語句實現(xiàn)數(shù)據(jù)庫的查詢操作。同時,它可以使用各種子句對查詢結(jié)果進(jìn)行分組統(tǒng)計、合計、排序等操作。SELECT語句還可將查詢結(jié)果生成另一個表(臨時表或永久表)。

SELECT語句的語法格式為:

SELECT [ALL|DISTINCT] select_list

[INTO [new_table_name>

[FROM{table_name|view_name}[(optimizer_hints)]

<,{table_name2|view_name2}[(optimizer_hints)]

[…,{table_name16|view_name16}[(optimizer_hints)>]

[WHERE clouse]

[GROUP BY clause]

[HAVING clause]

[ORDER BY clause]

[COMPUTE clause]

[FOR browse]

以上格式中,“[]”括的項表示可選項,大寫的詞為關(guān)鍵字,小寫的詞表示不確定的實體名稱。除第一行外,每一行為一個子句,在SELECT中子句可以省略,但在列出時,必須按照以上順序。

 

11.1簡單查詢語句

簡單的SQL查詢只包括SELECT子句、FROM子句和WHERE子句,它們分別說明查詢列、要查詢的表和搜索條件。

例如:

SELECT keys,fields

FROM keys

WHERE frm in (‘200*a’)

以上SELECT語句查詢keys表中frm字段為‘200*a’的記錄的keys和fields字段。

其查詢結(jié)果可能為:

keys marc_id
-----------------------------------------------------------------
王德樹 0000000001
賀鳴 0000000001
郭宏雨 0000000002
郭宏雨 0000000002

(4 row(s) affected)


 

11.1.1 SELECT 條件列表

1> 顯示keys表中所有列的內(nèi)容
SELECT * FROM keys

將對keys表中每個字段的值進(jìn)行顯示。

2> 按順序顯示指定列
SELECT marc_id,fileds,keys FROM keys

在SELECT 列表中指定列名來選擇不同的列,個列之間用逗號分開,結(jié)果的顯示順序為SELECT列表中字段的排列順序。

3> 更改列標(biāo)題
SELECT keys ,記錄號=marc_id FROM keys

或 SELECT keys,marc_id 記錄號 FROM keys

或 SELECT keys,marc_id as 記錄號 FROM keys

執(zhí)行結(jié)果為:

keys 記錄號
-----------------------------------------------------------------
王德樹 0000000001
賀鳴 0000000001
郭宏雨 0000000002
郭宏雨 0000000002

(4 row(s) affected)


在SELECT語句中可以為選擇列指定列標(biāo)題,其格式為:

列標(biāo)題=列名

或:

列名 列標(biāo)題

 

4>刪除重復(fù)行

SELECT語句中可以使用ALL|DISTINCT選項來顯示所有行(ALL)或刪除重復(fù)的行(DISTINCT),缺省為ALL,即不去重。

在前面的例子中將查語句換為:

SELECT DISTINCT keys,marc_id FROM keys

查詢結(jié)果為:

keys marc_id
-----------------------------------------------------------------
王德樹 0000000001
賀鳴 0000000001
郭宏雨 0000000002


(3 row(s) affected)


 

11.1.2 FROM子句

FROM子句指定SELECT語句查詢及與查詢相關(guān)的表或視圖。在FROM子句中最多可指定16個表或視圖,它們相互之間用逗號分開,如果這些表屬于不同的數(shù)據(jù)庫,可用‘數(shù)據(jù)庫.所有者名稱.對象’格式加以限定。在缺省情況下,F(xiàn)ROM子句不指定數(shù)據(jù)庫名稱,查詢的數(shù)據(jù)庫為當(dāng)前數(shù)據(jù)庫。

 

11.1.3 WHERE子句

SELECT 語句中的WHERE子句用來指定查詢條件。

WHERE子句中包含各種查詢條件,如下表:

運算符分類
 運算符
 意義
 
比較運算符
 > >= < <= = <> !> !<
 大小比較
 
BETWEEN…AND…
 
NOT BETWEEN…AND…
 
IN
 
NOT IN
 
LIKE
 
NOT LIKE
 
IS NULL
 
NOT IS NULL
 
AND
 
OR
 
NOT
 

在DataTrans-1500服務(wù)器的檢索途徑對象配置文件中,經(jīng)常用到的條件運算符是:列表運算符IN和模式匹配符LIKE。

列表運算符IN
列表運算符的格式為:
表達(dá)式 [NOT] IN (列表項1,列表項2,列表項3…)
它要求查詢時表達(dá)式的值(不)在列表內(nèi)。例如:
SELECT keys FROM keys WHERE frm IN (‘200*a’,’201*b’)
表示要查詢的keys來源必須在(‘200*a’,’201*b’)中,即frm字段值為’200*a’或’201*b’。

 

模式匹配符 LIKE
模式匹配符[NOT] LIKE 常用于模糊查詢,它判斷列值是否與指定的字符串格式匹配。在SQL Server中可使用的匹配符有以下幾種:

百分號(%):可匹配任意類型和長度的字符。

下劃線(_):匹配單個任意字符。

方括號[]:指定一個字符、字符串或范圍,要求所匹配對象為它們中的任何一個。

[^]:與[]取值相同,但要求所匹配的對象為指定范圍以外的任何一個字符。

例如下面的語句利用通配符%來查找以“王”開頭的字符串:

SELECT keys FROM keys WHERE keys LIKE ‘趙%’

查詢結(jié)果為:

keys

-----------------------------------------------------------------
趙寶山

趙成和

趙并林

(3 row(s) affected)


 

11.2 用GROUP BY子句進(jìn)行統(tǒng)計

GROUP BY 子句的語法格式為:

GROUP BY [ALL] aggregate_free_expression
[, aggregate_free_expression]

在SELECT 語句中,GROUP BY子句和集合函數(shù)對數(shù)據(jù)庫進(jìn)行分組統(tǒng)計,在查詢結(jié)果中,每一組統(tǒng)計出一個結(jié)果。例如:

select fields as keystring,

COUNT(fields) as hitcount

from keys where

( keys like ‘%德‘ )

and

frm like ‘200*a‘

GROUP BY fields

執(zhí)行的結(jié)果為:

keystring hitcount

李祖德 1
桑關(guān)德 1
張京德 1
張沖德 1

 

(4 row(s) affected)

 

在上面的例子中,GROUP BY子句和集合函數(shù)COUNT按照fields字段對keys表進(jìn)行分組統(tǒng)計。集合函數(shù)COUNT對每一組的行數(shù)進(jìn)行計算,分組的標(biāo)準(zhǔn)是GROUP BY中定義的字段 fields。

 

 

11.3 INTO子句用查詢結(jié)果創(chuàng)建新表

SELECT語句中使用INTO選項可以將查詢結(jié)果寫進(jìn)新表,新表結(jié)構(gòu)與SELECT語句選擇列表中的字段相同。例如:

select fields as keystring,

COUNT(fields) as hitcount

into #temp/*into*/

from englishbooks..keys where

( keys like ‘%魯迅%‘ )

and

frm like ‘24_*a‘

and (

( marc_id >= ‘0000000001‘ and marc_id <= ‘9999999999‘ )

)

GROUP BY fields

通過子句into #temp SQL Server將SELECT查詢結(jié)果和COUNT的統(tǒng)計結(jié)果寫入臨時表temp中,臨時表temp結(jié)構(gòu)包含keystring和hitcount兩個字段。在以后用到這些信息時,就可以從temp表中讀取。

 

11.4 使用UNION運算符實現(xiàn)多查詢聯(lián)合

UNION運算符可以將兩個或兩個以上的查詢結(jié)果合并成一個結(jié)果集合顯示。UNION運算符的語法格式為:

查詢1 [UNION [ALL] 查詢n]…
[ORDER BY 子句]
[COMPUTE 子句]

查詢1的格式為:

SELECT select_list
[INTO子句]
[FROM子句]
[WHERE子句]
[GROUP BY 子句]
[HAVING 子句]

查詢n 的格式為:

SELECT select_list
[FROM子句]
[WHERE子句]
[GROUP BY 子句]
[HAVING 子句]

查詢1與查詢不同之處在于查詢1多了一個用來指定新表的INTO子句,通過UNION子句句查詢n的結(jié)果也將寫進(jìn)查詢中INTO運算符定義的新表中。

在使用UNION子句時,應(yīng)保證每個查詢語句的選擇列表中有相同數(shù)量的表達(dá)式,并且每個查詢選擇列表中的對應(yīng)表達(dá)式應(yīng)具有相同或可以自動轉(zhuǎn)換成相同的數(shù)據(jù)類型。

缺省情況下,UNION運算符將刪除不同查詢語句中行值相同的行,如果要保留這些相同的行,應(yīng)使用ALL選項。

 

 

11.5 .from文件和search.command文件構(gòu)造SQL查詢語句

在DataTrans-1500服務(wù)器的檢索途徑對象.from文件中的每個section小節(jié)都是一個用來構(gòu)造SQL查詢語句的模板。而且每個小節(jié)都有一個/*into*/,/*into*/是INTO子句的插入標(biāo)志。在進(jìn)行多庫或多途徑查詢時,最后只有一個結(jié)果集,DataTrans-1500服務(wù)器只插入了一個INTO子句。之所以為.from文件的每個section小節(jié)都加了一個/*into*/標(biāo)志,是因為無法確定哪個小節(jié)首先被匹配,每個小節(jié)都有可能是第一個被匹配的。而最后的結(jié)果是,只有第一個被匹配的小節(jié)中的/*into*/標(biāo)志是起作用的。

 

要在/*into*/處插入的INTO運算符被定義在search.command文件中的union-into-phrase字段中。下面一段源文件在search.command中對titlenumber結(jié)果集的定義:

<recordset name=titlenumber

definition = "_TITLE varchar(255), _HITCOUNT int"

union-into-phrase = "into #temp"

segment-phrase = "and ( %@segment(\"[%[defaultsqldb]%/%[keys]%/%[recordid]%]\")%)"

after-union = "select top 50000 keystring, SUM (hitcount) as hitnumber into %temptablename% from #temp group by keystring order by keystring drop table #temp create clustered index keyindex on %temptablename% (keystring)"

statis = "select COUNT(*) as totalkey , SUM(hitnumber) as totalrec from %temptablename%"

catch-key-parameter-name = "recordset,word,link,match,from,fromtitle"

order-phrase = "order by keystring"

>

 

在DataTrans-1500服務(wù)器中對所有庫發(fā)起一次全途徑檢索,由search.command文件和若干個.from文件構(gòu)造的SQL查詢語句如下所示。

/*******************************************************/

/* 首次檢索 key + count (多檢索詞) */

select fields as keystring,

COUNT(fields) as hitcount

into #temp/*into*/

from englishbooks..keys where

( keys like ‘%‘ )

and

frm like ‘24_*a‘

and (

( marc_id >= ‘0000000001‘ and marc_id <= ‘9999999999‘ )

)

GROUP BY fields

 

 

 

UNION ALL

/*******************************************************/

/* 首次檢索 key + count (多檢索詞) */

select top 50000 fields as keystring,

COUNT(fields) as hitcount

/*into*/

from 出版社..keys where

( keys like ‘%‘ )

and

frm = ‘101*a‘

GROUP BY fields

 

 

 

 

 

UNION ALL

/*******************************************************/

/* 首次檢索 key + count (多檢索詞) */

select top 50000 fields as keystring,

COUNT(fields) as hitcount

/*into*/

from dt1500sqldb2..keys where

( keys like ‘%‘ )

and

frm in (‘200*a‘)

and (

( marc_id >= ‘0000000001‘ and marc_id <= ‘9999999999‘ )

)

GROUP BY fields

 

 

 

 

 

UNION ALL

/*******************************************************/

/* 首次檢索 key + count (多檢索詞) */

select fields as keystring,

COUNT(fields) as hitcount

/*into*/

from dt1500sqldb1..keys where

( keys like ‘%‘ )

and

frm in (‘200*a‘)

and (

( marc_id >= ‘0000001393‘ and marc_id <= ‘0000001395‘ )

)

GROUP BY fields

 

 

 

 

 

UNION ALL

/*******************************************************/

/* 首次檢索 key + count (多檢索詞) */

select top 50000 fields as keystring,

COUNT(fields) as hitcount

/*into*/

from xidan..keys where

( keys like ‘%‘ )

and

frm = ‘200*a‘

and (

1=2

)

GROUP BY fields

 

 

 

 

select top 50000 keystring, SUM (hitcount) as hitnumber into recordset..srch00a567801 from #temp group by keystring order by keystring drop table #temp create clustered index keyindex on recordset..srch00a567801 (keystring)

 

 

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多