国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

SQL 語(yǔ)句及關(guān)鍵字的用法

2019-11-17 02:06:19
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

SQL 語(yǔ)句及關(guān)鍵字的用法

一、SELECT

復(fù)制代碼
select [ALL|DISTINCT] select_list[into new table]FROM table_source[where serch_conditaion][GROUP BY group_by_exPRession][Having serch_conditaion][Order by order_expression[ASC|DESC]]--從上面的語(yǔ)句可以看出SELECT 查詢語(yǔ)句共有5個(gè)子句 其中SELECT/FROM 為必選語(yǔ)句--SELECT 子句:用來(lái)指定由查詢返回的列--ALL|DISTINCT:用來(lái)指定對(duì)查詢結(jié)果集,相同行的處理方式,ALL-為所有 DISTINCT:保留一條記錄--select_list:用來(lái)顯示要顯示的目標(biāo)列,全部可以用 * 代替,不是全部每個(gè)列字段用,分割--into new table:用來(lái)創(chuàng)建一個(gè)新的臨時(shí)表--FROM table_source:指定查詢的數(shù)據(jù)源--where serch_conditaion:用來(lái)限定返回行的搜索條件--GROUP BY group_by_expression]:用來(lái)指定查到結(jié)果的分組條件--Having serch_conditaion:用來(lái)指定組成或聚合的搜索條件--Order by order_expression[ASC|DESC]:用來(lái)指定結(jié)果集的排序方式
復(fù)制代碼

二、PIVOT 行轉(zhuǎn)列

注意:PIVOT、UNPIVOT是SQL Server 2005的語(yǔ)法,使用需修改數(shù)據(jù)庫(kù)兼容級(jí)別在數(shù)據(jù)庫(kù)屬性->選項(xiàng)->兼容級(jí)別改為 90

PIVOT用于將列值旋轉(zhuǎn)為列名(即行轉(zhuǎn)列),在SQL Server2000可以用聚合函數(shù)配合CASE語(yǔ)句實(shí)現(xiàn)

PIVOT的一般語(yǔ)法是:PIVOT(聚合函數(shù)(列) FOR 列 in (…) )AS P

完整語(yǔ)法:

table_source --數(shù)據(jù)源

PIVOT(

聚合函數(shù)(value_column) --統(tǒng)計(jì)轉(zhuǎn)化行值的聚合函數(shù)值

FOR pivot_column --需要轉(zhuǎn)化的行列名

IN(<column_list>) --行值得結(jié)合

)

典型實(shí)例:

復(fù)制代碼
1、建立表格ifobject_id('tb')isnotnulldroptabletbgocreate table tb (姓名varchar(10),課程varchar(10),分?jǐn)?shù)int)insert into tb values ('張三','語(yǔ)文',74)insert into tb values ('張三','數(shù)學(xué)',83)insert into tb values ('張三','物理',93)insertintotbvalues ('李四','語(yǔ)文',74)insert into tb values ('李四','數(shù)學(xué)',84)insert into tb values ('李四','物理',94)goselect * from tbgo姓名       課程       分?jǐn)?shù)---------- ---------- -----------張三       語(yǔ)文        74張三       數(shù)學(xué)        83張三       物理        93李四       語(yǔ)文        74李四       數(shù)學(xué)        84李四       物理        94 2、使用SQL Server 2000靜態(tài)SQL--cselect姓名, max(case 課程 when '語(yǔ)文' then 分?jǐn)?shù) else 0 end)語(yǔ)文, max(case 課程 when '數(shù)學(xué)' then 分?jǐn)?shù) else 0 end)數(shù)學(xué), max(case 課程 when '物理' then 分?jǐn)?shù) else 0 end)物理from tbgroup by 姓名姓名       語(yǔ)文        數(shù)學(xué)        物理---------- ----------- ----------- -----------李四        74          84          94張三        74          83          93 3、使用SQL Server 2005靜態(tài)SQLselect*fromtb pivot(max(分?jǐn)?shù))for課程in(語(yǔ)文,數(shù)學(xué),物理))a
復(fù)制代碼

三、

UNPIVOT用于將列明轉(zhuǎn)為列值(即列轉(zhuǎn)行),在SQL Server 2000可以用UNION來(lái)實(shí)現(xiàn)

完整語(yǔ)法:

table_source --數(shù)據(jù)源 轉(zhuǎn)化后的表結(jié)構(gòu)查詢 例如:select 姓名,課程,分?jǐn)?shù) from tb1

UNPIVOT(

value_column --列值(本身列名的值 如:語(yǔ)文 列 值 83 ) 例如:分?jǐn)?shù)

FOR pivot_column --列名 (集合列轉(zhuǎn)成行后的名字 例如:課程)

IN(<column_list>) --集合參數(shù)(例如:[語(yǔ)文],[數(shù)學(xué)],[物理])

)

示例:

復(fù)制代碼
create table tb(姓名varchar(10),語(yǔ)文int,數(shù)學(xué)int,物理int)insert into tb values('張三',74,83,93)insert into tb values('李四',74,84,94)goselect  *from tbgo姓名       語(yǔ)文        數(shù)學(xué)        物理---------- ----------- ----------- -----------張三       74          83          93李四        74          84          94 2、使用SQL Server 2000靜態(tài)SQL--SQL SERVER 2000靜態(tài)SQL。select*from( select 姓名,課程='語(yǔ)文',分?jǐn)?shù)=語(yǔ)文 from tb union all select姓名,課程='數(shù)學(xué)',分?jǐn)?shù)=數(shù)學(xué) from tb union all select姓名,課程='物理',分?jǐn)?shù)=物理 from tb) torder b y 姓名,case 課程 when '語(yǔ)文' then 1 when '數(shù)學(xué)' then 2 when '物理' then 3 end姓名       課程 分?jǐn)?shù)---------- ---- -----------李四       語(yǔ)文 74李四       數(shù)學(xué) 84李四       物理 94張三       語(yǔ)文 74張三       數(shù)學(xué) 83張三       物理 932、使用SQL Server 2005靜態(tài)SQL--SQL SERVER 2005動(dòng)態(tài)SQLselect 姓名,課程,分?jǐn)?shù) from tb unpivot ( 分?jǐn)?shù) for 課程 in([語(yǔ)文],[數(shù)學(xué)],[物理])) t
復(fù)制代碼

四、merge 用于2張表更新的常用關(guān)鍵字

基本語(yǔ)法:

MERGE  table         --要匹配的目標(biāo)表 ausing  scourtb       --查詢的源數(shù)據(jù)或者元數(shù)據(jù)表名 bon  conditaion        --元數(shù)據(jù)與目標(biāo)表的匹配條件 whenmatchedthen     --匹配成功  updateseta.字段=X  --一般匹配成功都是執(zhí)行更新whennotmatchedthen --匹配不成功 insert(A字段)values(對(duì)應(yīng)的值); --執(zhí)行插入 向目標(biāo)表插入元數(shù)據(jù)的新數(shù)據(jù)WHEN NOT MATCHED BY SOURCE THENDELETE; -- 目標(biāo)表有,源表沒有,目標(biāo)表該數(shù)據(jù)刪除.
示例:
復(fù)制代碼
create table employee(empid integer,fname nvarchar(20),lname nvarchar(20))insert into employeeselect 2021110,'小','張' insert into employeeselect 2021110,'小','李'  create table test(id integer,num integer) insert into testselect 2021110,2 insert into testselect 2,2  期望結(jié)果語(yǔ)句:select * from  employee2021110,'大','張'2021110,'大','李'2,'大','大'
復(fù)制代碼

SQL語(yǔ)句實(shí)現(xiàn):

復(fù)制代碼
merge into  employee a   using  test b   on   b.id = a.empid    when matched then     update set a.fname= '大'   when not matched then   insert values (id,'大','大');  end   exec test_mergeselect * from employee /*empid       fname                lname----------- -------------------- --------------------2021110     大                    張2021110     大                    李2           大                    大 (3 行受影響)
復(fù)制代碼

五、sql STUFF用法

1、作用

刪除指定長(zhǎng)度的字符,并在指定的起點(diǎn)處插入另一組字符。

2、語(yǔ)法

STUFF ( character_expression , start , length ,character_expression )

3、示例

以下示例在第一個(gè)字符串 abcdef 中刪除從第 2 個(gè)位置(字符 b)開始的三個(gè)字符,然后在刪除的起始位置插入第二個(gè)字符串,從而創(chuàng)建并返回一個(gè)字符串

SELECT STUFF('abcdef', 2, 3, 'ijklmn')GO

下面是結(jié)果集

aijklmnef

4、參數(shù)character_expression

一個(gè)字符數(shù)據(jù)表達(dá)式。character_expression 可以是常量、變量,也可以是字符列或二進(jìn)制數(shù)據(jù)列。

start

一個(gè)整數(shù)值,指定刪除和插入的開始位置。如果 start 或 length 為負(fù),則返回空字符串。如果 start 比第一個(gè) character_expression長(zhǎng),則返回空字符串。start 可以是 bigint 類型。

length

一個(gè)整數(shù),指定要?jiǎng)h除的字符數(shù)。如果 length 比第一個(gè) character_expression長(zhǎng),則最多刪除到最后一個(gè) character_expression 中的最后一個(gè)字符。length 可以是 bigint 類型。

5、返回類型如果 character_expression 是受支持的字符數(shù)據(jù)類型,則返回字符數(shù)據(jù)。如果 character_expression 是一個(gè)受支持的 binary 數(shù)據(jù)類型,則返回二進(jìn)制數(shù)據(jù)。

6、備注如果結(jié)果值大于返回類型支持的最大值,則產(chǎn)生錯(cuò)誤。

六、sql for xml path用法

一.FOR XML PATH 簡(jiǎn)單介紹

那么還是首先來(lái)介紹一下FOR XML PATH ,假設(shè)現(xiàn)在有一張興趣愛好表(hobby)用來(lái)存放興趣愛好,表結(jié)構(gòu)如下:

接下來(lái)我們來(lái)看應(yīng)用FOR XML PATH的查詢結(jié)果語(yǔ)句如下:

SELECT*FROM@hobbyFORXMLPATH

結(jié)果:

復(fù)制代碼復(fù)制代碼復(fù)制代碼<row><hobbyID>1</hobbyID><hName>爬山</hName></row><row><hobbyID>2</hobbyID><hName>游泳</hName></row><row><hobbyID>3</hobbyID><hName>美食</hName></row>復(fù)制代碼復(fù)制代碼復(fù)制代碼

由此可見FOR XML PATH 可以將查詢結(jié)果根據(jù)行輸出成XML各式!

那么,如何改變XML行節(jié)點(diǎn)的名稱呢?代碼如下:

SELECT*FROM@hobbyFORXMLPATH('MyHobby')

結(jié)果一定也可想而知了吧?沒錯(cuò)原來(lái)的行節(jié)點(diǎn)<row> 變成了我們?cè)赑ATH后面括號(hào)()中,自定義的名稱<MyHobby>,結(jié)果如下:

復(fù)制代碼復(fù)制代碼復(fù)制代碼<MyHobby><hobbyID>1</hobbyID><hName>爬山</hName></MyHobby><MyHobby><hobbyID>2</hobbyID><hName>游泳</hName></MyHobby>
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 商城县| 娄底市| 壶关县| 鄯善县| 乌海市| 新龙县| 新河县| 朝阳区| 合肥市| 永川市| 白河县| 诸暨市| 临海市| 绥棱县| 阳谷县| 安阳市| 巴彦县| 汉沽区| 天长市| 石门县| 商丘市| 读书| 博兴县| 遂宁市| 高台县| 抚顺县| 滨州市| 永城市| 望都县| 泸水县| 泸州市| 通许县| 沿河| 习水县| 广宁县| 新沂市| 神农架林区| 滦平县| 新泰市| 新建县| 平顶山市|