最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SQL?Server數(shù)據(jù)庫(kù)之表的高級(jí)查詢(xún)

 更新時(shí)間:2023年08月08日 11:20:04   作者:吃飽了想撐死  
這篇文章主要給大家介紹了關(guān)于SQL?Server數(shù)據(jù)庫(kù)之表的高級(jí)查詢(xún)的相關(guān)資料,高級(jí)查詢(xún)?cè)跀?shù)據(jù)庫(kù)中用得是最頻繁的,也是應(yīng)用最廣泛的,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下

前言

高級(jí)子查詢(xún)是對(duì)查詢(xún)更靈活的運(yùn)用,學(xué)會(huì)了高級(jí)查詢(xún)將對(duì)數(shù)據(jù)庫(kù)使用有很大的幫助。

一、子查詢(xún)

1、子查詢(xún)簡(jiǎn)介

在SQL語(yǔ)言中,一個(gè)select-from-where語(yǔ)句稱(chēng)為一個(gè)查詢(xún)塊。如果一個(gè)select語(yǔ)句嵌套在另一個(gè)select、insert、update或delete語(yǔ)句中,則稱(chēng)之為子查詢(xún)或內(nèi)層查詢(xún)。

包含子查詢(xún)的語(yǔ)句則稱(chēng)為主查詢(xún)或父查詢(xún),一個(gè)子查詢(xún)可以嵌套在另一個(gè)子查詢(xún)中,這樣就可以形成:父查詢(xún)->子查詢(xún)->子查詢(xún)......

where子句中的子查詢(xún)通常有如下幾種形式:

      where <列名> (not)   in   (子查詢(xún))  

      where <列名> (>=)    <=  (子查詢(xún))   

      where <列名>    exists    (子查詢(xún))

下面分別介紹上述幾種形式的子查詢(xún)。

2、嵌套子查詢(xún)

嵌套子查詢(xún)指在內(nèi)層查詢(xún)中不關(guān)聯(lián)外層查詢(xún)的子查詢(xún),在where下面的這種子查詢(xún),要么返回一個(gè)單值,要么返回一個(gè)值的列表,嵌套子查詢(xún)的信息傳遞是單項(xiàng)的,子查詢(xún)只向外傳遞信息。

形式如下:

       select *from 表 

       where 列名  (not)  in 

       ( select * from ...)

例如:select *from 表

          where sno in(子查詢(xún))

子查詢(xún) 求sno 張三、sno李四...

現(xiàn)在有學(xué)生表如下:

查詢(xún)與李晨是同一個(gè)系的學(xué)生 

基本思路:查找結(jié)果是學(xué)生信息,條件是在where中尋找相同的系,子查詢(xún)條件是和李晨相同的系,則在子查詢(xún)中查詢(xún)所有和李晨相同系的系名即可

select * from student
where dept in 
(select dept from student
where sname = '李晨'
)

查找考試成績(jī)大于等于90歲的學(xué)生的學(xué)號(hào)和姓名

基本思路:

方法1:首先應(yīng)從sc表中找出所有成績(jī)大于等于90的學(xué)生學(xué)號(hào),然后再根據(jù)這些學(xué)號(hào)在student表中查找出對(duì)應(yīng)的學(xué)生學(xué)號(hào)和姓名,此方法不連接表

方法2:直接連接sc表 設(shè)置條件為grade>=90

select sno ,sname from student
where sno in
(select sno from sc
where grade>=90
)

3、相關(guān)子查詢(xún)

相關(guān)子查詢(xún)與嵌套子查詢(xún)的主要區(qū)別在于信息傳遞,嵌套子查詢(xún)的信息傳遞是單向的,子查詢(xún)向外傳遞信息。相關(guān)子查詢(xún)的信息傳遞是雙向的,子查詢(xún)給外層查詢(xún)傳遞信息,外層查詢(xún)也向子查詢(xún)傳遞信息。 

相關(guān)子查詢(xún)的執(zhí)行過(guò)程可分為3個(gè)步驟:

1、從外層查詢(xún)獲取一條記錄,并將該記錄信息傳遞給內(nèi)層查詢(xún)

2、內(nèi)層查詢(xún)根據(jù)外層查詢(xún)傳遞的值執(zhí)行查詢(xún)操作

3、內(nèi)層查詢(xún)將執(zhí)行結(jié)果傳回給外層查詢(xún),外層查詢(xún)利用返回值完成對(duì)當(dāng)前記錄的處理

SC表如下:

由于內(nèi)層查詢(xún)和外層查詢(xún)使用的是同一張表,而且內(nèi)、外層查詢(xún)都需要從對(duì)方處獲取信息,因此需要為表取別名以區(qū)分是外層查詢(xún)的表還是內(nèi)層查詢(xún)的表

查詢(xún)每門(mén)課程中考試成績(jī)低于該門(mén)課程的平均成績(jī)的學(xué)生的課程號(hào)、學(xué)號(hào)和成績(jī)

分析:要的東西是:課程號(hào)、學(xué)號(hào)和成績(jī),條件是考試成績(jī)低于--課程平均成績(jī)

則子查詢(xún)?yōu)椋赫n程平均成績(jī)

select cno,sno,grade from sc sc1
where grade <
( select avg(grade) from sc sc2
  where sc1.cno = sc2.cno
)

二、查詢(xún)運(yùn)算

SQL支持對(duì)查詢(xún)結(jié)果再進(jìn)行并、交、差運(yùn)算。每個(gè)運(yùn)算都有屬于自己的關(guān)鍵字。

1、并運(yùn)算

并運(yùn)算可將兩個(gè)或多個(gè)查詢(xún)語(yǔ)句的結(jié)果集 合并為一個(gè)結(jié)果集,并運(yùn)算關(guān)鍵字為:union,可以讓兩個(gè)表或多個(gè)表以行的形式合并,之前的join on是以列的形式合并。

如示意圖所示:

并運(yùn)算的語(yǔ)法格式如下:

      select 語(yǔ)句1

      union

      select 語(yǔ)句2

      ......

規(guī)定:兩個(gè)語(yǔ)句的列數(shù)必須相同,列數(shù)的數(shù)據(jù)類(lèi)型必須相同或兼容

union all 保留重復(fù)的數(shù)據(jù)行,union 不保留重復(fù)數(shù)據(jù)行

course表和course2表如下:

合并course表和course2表

select *from course
union
select *from course2

由于限定列數(shù)和類(lèi)型相同,所以對(duì)表的要求很高

2、交運(yùn)算

 交運(yùn)算是返回同時(shí)在兩個(gè)集合中出現(xiàn)的記錄,即返回兩個(gè)查詢(xún)結(jié)果列值相同的記錄,其關(guān)鍵詞為:intersect

course表和course2表如下:

查詢(xún)同時(shí)出現(xiàn)在course表和course2表中的記錄

select *from course
intersect
select *from course2

3、差運(yùn)算

差運(yùn)算是返回一個(gè)表中有但另一個(gè)表中沒(méi)有的記錄,實(shí)現(xiàn)差運(yùn)算的關(guān)鍵詞為:except

course表和course2表如下:

查詢(xún)?cè)赾ourse1表中有但在course2表中沒(méi)有的記錄

select *from course
except
select *from course2

 查詢(xún)?cè)赾ourse2表中有但在course1表中沒(méi)有的記錄

select *from course2
except
select *from course

三、函數(shù)的使用

在使用SQL語(yǔ)句編程時(shí),經(jīng)常需要按照指定的條件進(jìn)行控制轉(zhuǎn)移或重復(fù)執(zhí)行某些操作,這個(gè)過(guò)程可以通過(guò)流程控制語(yǔ)句來(lái)實(shí)現(xiàn)!

流程控制語(yǔ)句用于控制程序的流程,一般分為三類(lèi):順序,分支和循環(huán)。SQL Server也提供了對(duì)這三種流程控制的支持?。?!

1、if分支語(yǔ)句

if~else語(yǔ)句用于構(gòu)造分支選擇結(jié)構(gòu),是最基本的選擇結(jié)構(gòu),可以利用if~else語(yǔ)句對(duì)一個(gè)條件進(jìn)行測(cè)試,并根據(jù)測(cè)試結(jié)果執(zhí)行相應(yīng)的操作!??!

聲明一個(gè)整形變量@grade,給該變量賦值為88,并判斷如果@grade大于等于90,則顯示“優(yōu)”,如果@grade在80~89之間則顯示“良”,如果小于80則顯示其他

declare @grade int
set @grade = 88
if @grade>=90
	print '優(yōu)'
else if @grade between 80 and 89
    print '良'
else
	print '其他'

2、while語(yǔ)句

while語(yǔ)句用于設(shè)置重復(fù)執(zhí)行的語(yǔ)句塊,例如遍歷某個(gè)重復(fù)代碼。如果嵌套了兩個(gè)或多個(gè)while循環(huán),則內(nèi)層的break將會(huì)退出到下一個(gè)外層循環(huán)。

用while循環(huán)實(shí)現(xiàn)計(jì)算5000減1、減2、減3、......一直減到50的結(jié)果,并顯示最終結(jié)果

declare @i int,@sum int
set @i=1
set @sum=5000
while @i<=50
begin
set @sum = @sum-@i
set @i = @i+1
end
print @sum

3、case語(yǔ)句

case表達(dá)式是一種多分支表達(dá)式,它可以根據(jù)條件列表的值返回多個(gè)可能的結(jié)果表達(dá)式中的一個(gè)。

case表達(dá)式可用在任何允許使用表達(dá)式的地方,但它不是一個(gè)完整的SQL語(yǔ)句,因此不能單獨(dú)執(zhí)行,只能作為可以單獨(dú)執(zhí)行的語(yǔ)句的一部分來(lái)使用。

學(xué)生表如下:

查詢(xún)學(xué)生表的考試情況,列出學(xué)號(hào)、姓名和成績(jī),同時(shí)對(duì)成績(jī)進(jìn)行如下處理:

如果成績(jī)大于等于90分,則在查詢(xún)結(jié)果中顯示“優(yōu)”;

如果成績(jī)?cè)?0到89分之間,則在查詢(xún)結(jié)果中顯示“良”;

如果成績(jī)?cè)?0到79分之間,則在查詢(xún)結(jié)果中顯示“中”;

如果成績(jī)?cè)?0到69分之間,則在查詢(xún)結(jié)果中顯示“及格”;

如果成績(jī)?cè)?0分以下,則查詢(xún)結(jié)果中顯示“不及格。

select id,name,grade,
case
	when grade >=90 then '優(yōu)'
	when grade between 80 and 89 then '良'
	when grade between 70 and 79 then '中'
	when grade between 60 and 69 then '及格'
	when grade <60 then '不及格'
end as 成績(jī)
from student

四、總結(jié)

本章主要介紹了SQK Server 查詢(xún)語(yǔ)句的高級(jí)使用,以及一系列輔助查詢(xún)的小知識(shí)點(diǎn)。首先介紹了子查詢(xún)的嵌套子查詢(xún),只返回一個(gè)值或一個(gè)列表,并且傳遞由內(nèi)到外是單項(xiàng)的,相關(guān)子查詢(xún)是內(nèi)外相互影響,是雙向的。子查詢(xún)大概有三種形式,要么in ,要么比值符號(hào),要么exists存在的意思。

往后介紹了并運(yùn)算union:兩個(gè)表合在一起去掉重復(fù)的,交運(yùn)算intersect:兩張表重復(fù)的部分,差運(yùn)算except:一張表有另一張表沒(méi)有的部分。最后介紹了幾種函數(shù)語(yǔ)句的使用。

總體只介紹了這些東西的基本語(yǔ)法,并沒(méi)有很深入的探討,先打好基礎(chǔ)了解大概,以后遇到真正的問(wèn)題能夠更快更好的學(xué)習(xí),慢慢加深數(shù)據(jù)庫(kù)的知識(shí),可以積少成多,一步一步的走下去!??!

到此這篇關(guān)于SQL Server數(shù)據(jù)庫(kù)之表的高級(jí)查詢(xún)的文章就介紹到這了,更多相關(guān)SQLServer表高級(jí)查詢(xún)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • sqlserver 導(dǎo)出插入腳本代碼

    sqlserver 導(dǎo)出插入腳本代碼

    工作中經(jīng)常遇到需要將遠(yuǎn)程客戶(hù)數(shù)據(jù)庫(kù)中的數(shù)據(jù)復(fù)制到本地來(lái)測(cè)試,下載整個(gè)數(shù)據(jù)庫(kù)太大了不值得,用下面的腳本可以按指定表生成Insert腳本,將腳本復(fù)制到本地來(lái)執(zhí)行,這樣快捷了不少
    2012-01-01
  • 公網(wǎng)遠(yuǎn)程訪問(wèn)局域網(wǎng)SQL Server數(shù)據(jù)庫(kù)

    公網(wǎng)遠(yuǎn)程訪問(wèn)局域網(wǎng)SQL Server數(shù)據(jù)庫(kù)

    數(shù)據(jù)庫(kù)的重要性相信大家都有所了解,在某些場(chǎng)景下,數(shù)據(jù)庫(kù)已經(jīng)成為企業(yè)正常運(yùn)行必不可少的條件之一。與企業(yè)的其他工作一樣,數(shù)據(jù)庫(kù)也需要進(jìn)行必要的維護(hù),想詳細(xì)了解的同學(xué)可以參考這篇文章
    2023-04-04
  • 擴(kuò)展性很好的一個(gè)分頁(yè)存儲(chǔ)過(guò)程分享

    擴(kuò)展性很好的一個(gè)分頁(yè)存儲(chǔ)過(guò)程分享

    擴(kuò)展性很好的一個(gè)分頁(yè)存儲(chǔ)過(guò)程分享,需要的朋友可以參考下。
    2011-11-11
  • SQL?Server表空間碎片化回收的實(shí)現(xiàn)

    SQL?Server表空間碎片化回收的實(shí)現(xiàn)

    本文主要介紹了SQL?Server表空間碎片化回收的實(shí)現(xiàn),文中根據(jù)實(shí)例編碼詳細(xì)介紹的十分詳盡,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • SqlServer查詢(xún)和Kill進(jìn)程死鎖的語(yǔ)句

    SqlServer查詢(xún)和Kill進(jìn)程死鎖的語(yǔ)句

    這篇文章主要介紹了SqlServer查詢(xún)和Kill進(jìn)程死鎖的語(yǔ)句,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2016-08-08
  • 深入分析SQL Server 存儲(chǔ)過(guò)程

    深入分析SQL Server 存儲(chǔ)過(guò)程

    本文給大家詳細(xì)介紹了sqlserver的存儲(chǔ)過(guò)程,包括存儲(chǔ)過(guò)程的概念、優(yōu)缺點(diǎn)、系統(tǒng)存儲(chǔ)過(guò)程、用戶(hù)自定義存儲(chǔ)過(guò)程等方面的內(nèi)容了,有需要的小伙伴可以參考下。
    2015-06-06
  • SQL DML數(shù)據(jù)操作方法

    SQL DML數(shù)據(jù)操作方法

    這篇文章主要介紹了SQL DML數(shù)據(jù)操作語(yǔ)言,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2025-05-05
  • mssql SA帳號(hào)的改名和刪除

    mssql SA帳號(hào)的改名和刪除

    眾所周知,在M$sql中有個(gè)絕對(duì)是網(wǎng)絡(luò)安全中的隱患的帳號(hào)sa,系統(tǒng)管理員 (sa),默認(rèn)情況下,它指派給固定服務(wù)器角色 sysadmin,并不能進(jìn)行更改。這個(gè)sa一般情況下是既不可以更改名稱(chēng),也不可以刪除,呵呵,有點(diǎn)雞肋的味道,棄置可惜,食之無(wú)味。裝上sql2000之后,感覺(jué)怪怪的,放著這個(gè)后門(mén)在,始終都不放心,擔(dān)心有一天被人破出密碼,那偶的電腦不就完拉。可能你回說(shuō)設(shè)個(gè)強(qiáng)壯點(diǎn)的密碼,這個(gè)辦法是可行,可不是長(zhǎng)久之記,所謂斬草要除根,要是把sa給刪拉就不用擔(dān)心那些"黑客"暴力破解拉。
    2008-04-04
  • SQL 重復(fù)記錄問(wèn)題的處理方法小結(jié)

    SQL 重復(fù)記錄問(wèn)題的處理方法小結(jié)

    SQL 重復(fù)記錄問(wèn)題的處理方法小結(jié),需要的朋友可以參考下。
    2010-05-05
  • 將所有符合條件的結(jié)果拼接成一列并用逗號(hào)隔開(kāi)的一個(gè)sql語(yǔ)句

    將所有符合條件的結(jié)果拼接成一列并用逗號(hào)隔開(kāi)的一個(gè)sql語(yǔ)句

    把所有符合條件的結(jié)果拼接成一列,用逗號(hào)隔開(kāi)的一個(gè)sql語(yǔ)句。
    2010-06-06

最新評(píng)論

彰武县| 凌云县| 安义县| 景洪市| 明光市| 巴彦淖尔市| 赤城县| 合江县| 藁城市| 香港 | 堆龙德庆县| 霍山县| 泸西县| 霍城县| 阜康市| 白河县| 醴陵市| 阿克| 泸溪县| 鄂尔多斯市| 禹城市| 黔南| 汉川市| 凤翔县| 怀远县| 那曲县| 镶黄旗| 石狮市| 申扎县| 武汉市| 郓城县| 西昌市| 东乡县| 汨罗市| 富顺县| 兰西县| 枣庄市| 色达县| 长春市| 沾益县| 新蔡县|