1. 程式人生 > >資料庫視屏總結(三)——連線與查詢

資料庫視屏總結(三)——連線與查詢

資料庫視訊第七章主要講解了連線和查詢兩大部分,首先連線包括基本連線、內連線、左外連線、右外連線、全連線、交叉連線、自連線。查詢包括:聯合查詢、使用子查詢、XML查詢、for xml查詢、exists關鍵字查詢、交查詢intersect

基本連線

使用原則:
1、每個目標列錢都要加上基表名稱
2、FROM字句應包括所有使用的基表
3、where字句應定義一個同等連線
舉例將班級資訊和學生資訊相連線
select A.姓名,a.性別,a.出生年月,a.學號,b.班級名,a.家庭住址
from 學生資訊 A,班級資訊 B
where a.所屬班級=b.班級編號

內連線

語法格式
Select 查詢的目標列
From table1 inner join table2 [on join+條件]
[where條件]
[order by 條件]
舉例:
select a.班級名,a.班級人數,b.姓名,b.聯絡方式
from 班級資訊 A inner join 輔導員資訊 b
on a.輔導員=b.輔導員編號

左外連線

內連線消除與另一個表的任何行不匹配的行,而外連結會返回FROM字句中提到的至少一個表或檢視中的所有行,只有這些行符合任何搜尋條件
在外連結有主從之分,如果符合條件,則直接返回到查詢結果中,如果主表中的行在從表中沒有找到匹配的行,主表的行任然保留,並返回到查詢結果中

右外連線

Select A.班級名,a.班級人數,b.姓名,b.聯絡方式
From 輔導員資訊B RIGHT OUTER join 班級資訊a
On A.輔導員=B.輔導員編號
左右外連線的互換:只需要把RIGHT改成LEFT,把right或者是left的左右兩側的表互換即可

全連線

select a.班級名,a.班級人數,B.姓名,b.家庭住址
from 學生資訊 b full outer join 班級資訊 a
on a.班級編號=b.所屬班級

交叉連線

它返回被連線的兩個表所有資料行的笛卡爾積,返回到結果集合中的資料行數等於第一個表中符合查詢條件的資料行數乘以第二個表中符合查詢條件的資料行數

語法格式:
Select 列名
From table1 cross join table2
Where 條件進行篩選

舉例
select a.班級名,a.班級人數,b.姓名
from 班級資訊 A cross join 學生資訊 B

自連線

在一個表上進行連線
舉例:

select A.班級名,a.班級人數,b.班級名 
from 班級資訊 A ,班級資訊 B
where a.班級人數=b.班級人數 and a.班級編號<>b.班級編號

聯合查詢

將多個查詢結果聯合到一個表中
語法格式:
Select 列名
From
Union all
Select

注意:使用UNION查詢時,連線的連個結果集必須在其目標列表總有相同數目的表示式,且資料內容儘量保持一致
舉例:

select a.課程編號, A.成績,b.姓名
from 成績資訊 A ,學生資訊 b
where a. 學生編號=B.學號 
union 
select '',sum(成績),'合計'
from 成績資訊 A ,學生資訊 b
where a. 學生編號=B.學號 
union
select '',avg(成績),'平均'
from 成績資訊 A ,學生資訊 b
where a. 學生編號=B.學號 
 order by 成績
使用子查詢
查詢成績小於平均分的查詢:
select a.課程編號, A.成績,b.姓名
from 成績資訊 A ,學生資訊 b
where a. 學生編號=B.學號 
and a.成績<(
select avg(成績) from 成績資訊 A,學生資訊 B
where a. 學生編號=B.學號
)

查詢效果如下:

這裡寫圖片描述

舉例:
select a.課程編號, A.成績,b.姓名
from 成績資訊 A ,學生資訊 b
where a. 學生編號=B.學號
and b.學號 in(
select 學號 from 班級資訊 A,學生資訊 B
where a.班級編號=B.所屬班級 and b.所屬班級=’125’)

XML查詢

目的:獲取某項的某個節點的一個數據
舉例:

create table student
(
s_id int,
s_data xml
)
insert into student values(
'1',
'<學生資訊><姓名>範志慧</姓名><性別></性別><班級>電腦科學與技術1班</班級>
<職位>班長</職位></學生資訊>'
)
select * from student
declare @data xml
set @data = (select s_data  from student where s_id=1)

select @data.query('學生資訊/姓名')姓名,@data.query('學生資訊/性別')性別,@data.query('學生資訊/班級')班級

結果如下:
這裡寫圖片描述

For xml 字句

通過FOR XML字句並制定模式可以將從資料庫系統的表中檢索出來的資料自動錶示成XML格式。有以下四種模式:RAW 模式、AUTO模式、EXPLICIT模式和PATH模式
raw模式:

select A.班級名,a.班級人數,B.姓名,B.聯絡方式
from 班級資訊 A ,輔導員資訊 B
where A.輔導員=b.輔導員編號
for xml raw

效果如下:
這裡寫圖片描述

auto模式:

select A.班級名,a.班級人數,B.姓名,B.聯絡方式
from 班級資訊 A ,輔導員資訊 B
where A.輔導員=b.輔導員編號
for xml auto

效果如下:
這裡寫圖片描述

EXISTS關鍵字查詢

判斷使用者名稱是否有記錄:

declare @username varchar(20)
declare @pwd varchar(20)
set @username='123456'
set @pwd='美麗'
 if exists(select * from 學生資訊 where 學號=@username and 姓名=@pwd)
 print'登入成功'
 else
 print'登入失敗'

交查詢INTERSECT

intersect前不允許加order by

舉例使用交查詢

select a.成績,b.姓名  from 成績資訊 A ,學生資訊 B
 where A.學生編號=b.學號 and a.課程編號=2 and a.考試編號='0801' 

 intersect
 select  a.成績,a.姓名 from 
 (
 select top 1 a.成績,b.姓名  from 成績資訊 A ,學生資訊 B
 where A.學生編號=b.學號 and a.考試編號='0801' order by a.成績
 ) a