SQL Server 的表數據簡單操作(表數據查詢)



--表數據查詢--
--數據的基本查詢--

--數據簡單的查詢--
select * | 字段名[,字段名2, ...] from 數據表名 [where 條件表達式]

例:
use 商品管理數據庫
go
select * from 商品信息表
select 商品編號,商品名稱,產地 from 商品信息表
selelct * from 商品信息表 where 產地='遼寧沈陽'
理解例子

 --關鍵字輔助查詢--

--1)distinct關鍵字 (用來消除查詢結果中的重復行,使用時緊跟在select命令后)--
select distinct * | 字段名[,字段名2, ...] from 數據表名 [where 條件表達式]

例:
use 商品管理數據庫
go
select distinct 產地 from 商品信息表
理解例子

 --2)top關鍵字 (用來查找結果中前n條或前n%條記錄,用法:top n | n percent,使用時緊跟在select命令后)--

select top n | n percent * | 字段名[,字段名2, ...] from 數據表名 [where 條件表達式]

例:
use 商品管理數據庫
go
select top 3 * from 商品信息表 --查詢結果的前3條記錄
select top 30 percent * from 商品信息表 --查詢結果的30%條記錄

--3)between...and...關鍵字 (用來查找結果在一定范圍內的記錄,使用時放於where后面,作為篩選條件)--
字段名[not] between 低值 and 高值 --加"not"表示對滿足between...and...關鍵字的查找結果取反值

例:
use 商品管理數據庫
go
selelct * from 庫存信息表 where 庫存數量 between 100 and 200 --查詢"庫存信息表"中"庫存數量"在100到200之間的記錄

--4)in 關鍵字 (用來查找結果為指定值的記錄,使用時放於where后面,作為篩選條件)--
字段名[not] int (值1,值2,值3,...) --加"not"表示對滿足in關鍵字的查找結果取反值

例:
use 商品管理數據庫
go
selelct * from 庫存信息表 where 庫存數量 in(100,200) --查詢"庫存信息表"中"庫存數量"為100或者200的記錄

--5)like 關鍵字 (用來實現表示一定范圍的模糊查詢,主要用於字符型字段,使用時放於where后面,作為篩選條件)--
字段名 [not] like '<字符表達式>' --加"not"表示對滿足like關鍵字的查找結果取反值

例:
use 商品管理數據庫
go
select * from 客戶信息表 where 客戶姓名 like '_小%' --查詢"客戶信息表"中"客戶姓名"滿足篩選條件'_小%'的記錄

--6)in null 關鍵字 (用來查詢字段中是否包含空值,使用時放在where后面,作為條件篩選)--
字段名 is null --is不可以用"="代替,null也不能用"0"或空格等代替

例:
use 商品管理數據庫
go
selelct * from 客戶信息表 where 郵箱 is null

--數據的統計查詢--
-- 聚合函數查詢--
count( * | 字段名) --統計數據表中的數據總數
sum( 表達式 | 字段名) --計算表達式或字段名中數據的,表達式或字段名的數據類型要求是數值型
avg( 表達式 | 字段名) --計算表達式或字段名中數據的平均值,表達式或字段名的數據類型要求是數值型
max( 表達式 | 字段名) --求出表達式或字段名中數據的最大值,表達式或字段名的數據類型可以是數值型字符型日期時間型
min( 表達式 | 字段名) --求出表達式或字段名中數據的最小值,表達式或字段名的數據類型可以是數值型字符型日期時間型
--為查詢結果重命名的3種方法:--
原字段名 '新字段名'
原字段名 as '新字段名'
'新字段名'=原字段名

例:
use 商品管理數據庫
go
select COUNT(*),SUM(進貨數量),AVG(進貨金額),MAX(進貨金額),MIN(進貨金額) from 進貨信息表
select COUNT(*)as'總記錄',SUM(進貨數量)as'進貨數量和',AVG(進貨金額) '進貨金額平均數',MAX(進貨金額) '進貨金額最大值','進貨金額最小值'=MIN(進貨金額) from 進貨信息表

--查詢結果排序 (order by 語句用於實現排序操作,可以出現在from或者where語句的后面)--
order by 字段名1 [,字段名2, ...] [asc | desc] --加asc表示升序,加desc表示降序,默認升序,關鍵字asc可以省略

例:
use 商品管理數據庫
go
select*from 進貨信息表 order by 進貨數量 desc --查詢進貨信息表中的所有字段,並將進貨數量進行降序排序

--查詢結果分組小計--
--1)group by...語句 --使用時可出現在from語句或者where語句后面
group by 字段名列表 [ having 條件表達式] --"字段名列表"表示按該字段分組。通常在select語句后面加聚合函數來表示求值小計,select語句后的字段名要么放在聚合函數中要么放在group by語句中,否則出錯。having對結果做進一步的條件篩選,可加聚合函數

例:
use 商品管理數據庫
go
select 進貨日期,SUM(進貨數量)as'進貨數量和',SUM(進貨金額)as'進貨金額和' from 進貨信息表 group by 進貨日期
select 商品編號,SUM(進貨數量)as'進貨數量和' from 進貨信息表 group by 商品編號 having SUM(進貨數量)>30

--2)compute...by...語句 --使用時必須放在order...by...語句后面配合使用,表示先排序(分組),再小計
compute 聚合函數列表 by 被分組字段名 --compute...by...語句中by后面的分組字段必須與order...by...語句中by后面的排序字段相同

例:
use 商品管理數據庫
go
select * from 進貨信息表 order by 進貨日期 compute SUM(進貨數量),SUM(進貨金額)by 進貨日期

 

 

--數據的高級查詢--

--多表連接查詢--
--笛卡爾積查詢
select * from A,B --A,B為兩張表
--條件連接 (多表連接)
select 字段名列表 from 表1,表2,表3,... where 表1.的公共字段=表2.的公共字段 and 表2.的公共字段=表3.的公共字段 ... ... --select后面跟隨被查詢的字段名,有公共字段需指明是那張數據表。一定要有where條件,表與表的公共字段即為連接媒介,通常n張表的連接查詢至少有n-1個連接條件支撐

例:
use 商品管理數據庫
go
select 客戶信息表.客戶編號,客戶姓名,商品編號,銷售日期 from 客戶信息表,銷售信息表 where 客戶信息表.客戶編號=銷售信息表.客戶編號 --查詢客戶購買信息

例:
use 商品管理數據庫
go
select 客戶信息表.客戶編號,客戶姓名,商品信息表.商品編號,商品名稱,銷售金額,商品類型名 
from 客戶信息表,商品信息表,銷售信息表,商品類型表 
where 客戶信息表.客戶編號=銷售信息表.客戶編號 and 商品信息表.商品編號=銷售信息表.商品編號 and 商品信息表.商品類型編號=商品類型表.商品類型編號 --查詢客戶購買信息
理解例子

--1)內連接(條件連接的一種)

select * | 字段列表 from 數據表1 [inner] join 數據表2 on 連接條件表達式 [inner] jion 數據表3 on 連接條件表達式 ... [where 條件表達式] --實現兩張以上表連接時,按照數據表1連接數據表2,數據表2連接數據表3的順序依次相連

例:
use 商品管理數據庫
go
select 客戶信息表.客戶編號,客戶姓名,商品信息表.商品編號,商品名稱,銷售金額,商品類型名 
from 客戶信息表 
join 銷售信息表 on 銷售信息表.客戶編號=客戶信息表.客戶編號 
join 商品信息表 on 商品信息表.商品編號=銷售信息表.商品編號 
join 商品類型表 on 商品類型表.商品類型編號=商品信息表.商品類型編號 --查詢客戶購買信息
理解例子

 --外連接

--1)左外連接 (即以左表為主表,用主表中的每條記錄與右表中的每條記錄連接組合,滿足條件和不滿足條件的記錄都會出現在結果中,不滿住條件的記錄用空值填補)
select 字段名列表 from 表1 left join 表2 on 表1.公共字段=表2.公共字段 --表1為主表,on關鍵字表示連接條件

例:
select*from A.學號,姓名,課程名 
from A left join B 
on A.學號=B.學號

例:
use 商品管理數據庫
go
select 客戶信息表.客戶編號,客戶姓名,商品編號,銷售日期 
from 客戶信息表 left join 銷售信息表 
on 客戶信息表.客戶編號=銷售信息表.客戶編號
理解例子

 --2)右外連接 (即以右表為主表,用主表中的每條記錄與左表中的每條記錄連接組合,滿足條件和不滿足條件的記錄都會出現在結果中,不滿住條件的記錄用空值填補)

select 字段名列表 from 表1 right join 表2 on表1.公共字段=表2.公共字段 --表2為主表,on關鍵字表示連接條件

例:
use 商品管理數據庫
go
select 客戶信息表.客戶編號,客戶姓名,商品編號,銷售日期
from 銷售信息表 right join 客戶信息表
on 客戶信息表.客戶編號=銷售信息表.客戶編號

--3)全外連接 (即將左表中所有記錄分別與右表中每一條記錄連接,滿足條件和左右表中不滿足條件的記錄都會出現在結果中,不滿住條件的記錄用空值填補)
select 字段名列表 from 表1 full join 表2 on 表1.公共字段=表2.公共字段 --左右表不分主次,相互連接,表1表2位置可以互換,on關鍵字表示連接條件

例:
use 商品管理數據庫
go
select A.學號,姓名,課程名
from A full join C
on A.學號=C.學號

--自連接 (指數據表與其自身實現連接查詢操作,也是多表連接的一種形式)
from 數據表名 表別名 [, ...] 或者 from 數據表名 as 表別名 [, ...] --表別名在使用from語句查詢數據表時使用,用as關鍵字指定表別名,可以用空格。可以為多張數據表指定別名,可以為一張數據表指定多個別名,即為一張數據表制作多個副本

例:
use 商品管理數據庫
go
select distinct a.商品編號,a.客戶編號 from 銷售信息表 a, 銷售信息表 as b where a.客戶編號=b.客戶編號 and a.商品編號 < > b.商品編號

 

--子查詢(子查詢存在於查詢語句的嵌套中)--
--in運算子查詢
select * | 字段名[,字段名2, ...] from 數據表名 where 條件表達式 in (select * | 字段名[,字段名2, ...] from 數據表名 [where 條件表達式])

例:
use 商品管理數據庫
go
select 客戶姓名,聯系電話 from 客戶信息表 where 客戶編號 in (select 客戶編號 from 銷售信息表 where 銷售日期='2012-12-11') --查詢查在2012年12月11日購買商品的客戶姓名和聯系電話

--比較子查詢 (指主查詢的where條件中使用比較運算符與子查詢構成查詢條件,程序先執行子查詢,與in運算符不同的是,比較運算符后面的子查詢得到的結果只是一個值,而非一個集合)
(常用比較運算符:=>>=<<=<>!=!>,!<)

例:
use 商品管理數據庫
go
select 商品類型編號,商品名稱 from 商品信息表 where 商品編號 in (select 商品編號 from 銷售信息表 where 銷售數量< (select AVG(銷售數量) from 銷售信息表))

--exists運算子查詢 (exists表示"存在",它后面的子查詢不產生查詢結果,而是產生一個邏輯值true或者false,當字查詢有紀錄被查找出結果為true,反之為false,只有子查詢結果為true時才顯示結果)

例:
use 商品管理數據庫
go
select 客戶姓名,聯系電話 from 客戶信息表 where exists (select * from 銷售信息表 where 客戶編號=客戶信息表.客戶編號)

 

 


 注:"--"可看成說明或者注釋文本


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM