欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SQL?Server數(shù)據(jù)庫之表的高級查詢

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

前言

高級子查詢是對查詢更靈活的運用,學(xué)會了高級查詢將對數(shù)據(jù)庫使用有很大的幫助。

一、子查詢

1、子查詢簡介

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

包含子查詢的語句則稱為主查詢或父查詢,一個子查詢可以嵌套在另一個子查詢中,這樣就可以形成:父查詢->子查詢->子查詢......

where子句中的子查詢通常有如下幾種形式:

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

      where <列名> (>=)    <=  (子查詢)   

      where <列名>    exists    (子查詢)

下面分別介紹上述幾種形式的子查詢。

2、嵌套子查詢

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

形式如下:

       select *from 表 

       where 列名  (not)  in 

       ( select * from ...)

例如:select *from 表

          where sno in(子查詢)

子查詢 求sno 張三、sno李四...

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

查詢與李晨是同一個系的學(xué)生 

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

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

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

基本思路:

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

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

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

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

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

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

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

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

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

SC表如下:

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

查詢每門課程中考試成績低于該門課程的平均成績的學(xué)生的課程號、學(xué)號和成績

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

則子查詢?yōu)椋赫n程平均成績

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

二、查詢運算

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

1、并運算

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

如示意圖所示:

并運算的語法格式如下:

      select 語句1

      union

      select 語句2

      ......

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

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

course表和course2表如下:

合并course表和course2表

select *from course
union
select *from course2

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

2、交運算

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

course表和course2表如下:

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

select *from course
intersect
select *from course2

3、差運算

差運算是返回一個表中有但另一個表中沒有的記錄,實現(xiàn)差運算的關(guān)鍵詞為:except

course表和course2表如下:

查詢在course1表中有但在course2表中沒有的記錄

select *from course
except
select *from course2

 查詢在course2表中有但在course1表中沒有的記錄

select *from course2
except
select *from course

三、函數(shù)的使用

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

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

1、if分支語句

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

聲明一個整形變量@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語句

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

用while循環(huán)實現(xiàn)計算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語句

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

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

學(xué)生表如下:

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

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

如果成績在80到89分之間,則在查詢結(jié)果中顯示“良”;

如果成績在70到79分之間,則在查詢結(jié)果中顯示“中”;

如果成績在60到69分之間,則在查詢結(jié)果中顯示“及格”;

如果成績在60分以下,則查詢結(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 成績
from student

四、總結(jié)

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

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

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

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

相關(guān)文章

最新評論