數據庫查詢

數據查詢

基本查詢

select 目標列表表達式
from 表名 或 視圖名
where 條件表達式

eg:在“課程”表中查詢所有學生的“課程號”和“課程名稱”。

use student
go
select distinct 課程號,課程名稱
from 課程
go

注意:目標列表表達式可以是:(屬性列,字符串常量,算數表達式,函數)
distinct 目標屬性 :去掉重複行

帶有where字句的查詢

(1)比較大小
where A 比較符號 B
(2)確定範圍
範圍內:where between …and …
範圍外:where not between …and …

eg:在“課程號”表中查詢“學分”在4-6之間的課程的“課程號”和“課程名稱”。

use student
go
select 課程號,課程名稱
from 課程
where 學分>=4 and 學分<=6
go


(3)確定集合
指定集合內:where 列名 in(‘A’,‘B’,‘C’)
指定集合外:where 列名 not in(‘A’,‘B’,‘C’)
(4)字符匹配
匹配: like 匹配串
不匹配:not like 匹配串

注意:匹配符可以結合% -使用

% 表示任意的,表示0到無窮大的長度
- 表示單個字符
like 匹配的意思(後邊有匹配符號只能用like)
is 匹配的意思(爲空只能用is,不能用=)
= 等於
>< 不等於的意思

eg:在“課程”表中查詢所有“課程名稱”中包含“數據庫”字樣的課程的全部信息

use student
go
select *
from 課程
where 課程名稱 like '%數據庫%'

(5)涉及空值的查詢

use student
go
select 課程名稱,學分
from 課程
where 先修課程 is null
go

(6)多重條件的查詢
and 並且
or 或

帶有group by 字句的查詢(分組功能)

(1)簡單分組查詢
select 目標列表表達式
from 表名
where 條件表達式
group by 列名

(2)帶having 字句的分組查詢
select 目標列表表達式
from 表名
group by 列名 having 條件表達式

eg:查詢至少選修了2門課程以上的學生的學號。

use student
go
select distinct 學號
from 學生成績
group by 學號
having count(*)>=2 
go

帶有order by 子句的查詢(排序功能)

select 目標列表表達式
(into 新表名)
from 表名 或 視圖名
where 條件表達式
order by 列名 asc 或 desc

eg:在“課程”表中查詢所有“課程名稱”中包含“數據庫”字樣的課程的全部信息,將查詢結果按“課程名稱”降序排列。

use student
go
select *
from 課程
where 課程名稱 like '%數據庫%'
order by 課程名稱 DESC
go


多表查詢

連接查詢:
(1)內連接
select 列名
from 表1 inner join 表2 on 連接條件表達式

(2)外連接(左外連接+右外連接)
左外連接:
select 列名
from 表1 left join 表2 on 連接條件表達式

右外連接:
select 列名
from 表1 right join 表2 on 連接條件表達式
(3)交叉連接(笛卡爾積)
select 列名
from 表1 cross join 表2 on 連接條件表達式

子查詢(嵌套查詢功能)

集合比較運算符:

all 全部都滿足
any 滿足任何一個
between 在某個範圍內
exists 查詢結果包含一些行(結果不爲空)
in 操作數等於列表中的一個
not 取值反
some 有一些滿足

子查詢:將第一步查詢嵌入到第二步查詢的條件中(嵌套查詢)

(1)無關子查詢
(先執行子查詢語句,得到的結果傳遞給父查詢語句使用)
use 數據庫名
select 列名
from 表格
where 列名 比較運算符(select 列名
from 表格
where 列名)

eg:查詢其它系中比“管理系”的所有學生年齡都小的學生的“姓名”、“年齡”和“性別”。

use student
go
select 姓名,性別,年齡
from 學生信息
where 所在系 != '管理系' and 年齡<any(
										select 年齡 
										from 學生信息
										where 所在系 = '管理系')
go

eg:查詢“趙燕”同學選修的所有課程“課程名稱”、“學分”、“分數”,對結果按照“分數”升序排列。

use student
go
select 課程名稱,學分,分數
from 學生成績,課程
where 學生成績.課程號 = 課程.課程號 and 學號 in(
														select 學號
														from 學生信息
			where 姓名 = '趙燕')
order by 分數
go

(2)相關子查詢
(子查詢的執行依賴於父查詢,多數情況下是因爲子查詢的where 子句引用了父查詢的表)
(3)表數據維護的子查詢
插入子查詢結果
帶子查詢的刪除語句

聯合查詢

(1)集合並運算(會自動去除重複)


union

(2)集合交運算


intersect

(3)集合差運算(前—後的意思)


except

輸出結果選項

(1)輸出前n行
use 數據庫名
select top n 列名
from 表格
where 條件語句
(2)百分比輸出
use 數據庫名
select top n percent 列名
from 表格
where 條件語句
(3)查詢結果輸出到新建表中
use 數據庫名
select 列名 into 新表格
from 原表格
where 條件語句

輸出結果插入到另一個表中

select 目標列表表達式 into 新表名
from 表名
where 條件表達式

eg:將“學生信息”表中“計算機系”的學生的全部信息插入到“計算機系學生信息”表中。

use student
go
select *
into 計算機系學生信息
from 學生信息
where  所在系 = '計算機系'
go

eg:創建和“學生信息”表的表結構相同的“管理系學生信息”表,但該表中不包含任何記錄。之後用帶子查詢的INSERT將“管理系”學生的全部信息插入到“管理系學生信息”表中。

use student
go
select * into 管理系學生信息
from 學生信息
where 學號 is null 
go

use student	--調用數據庫
go
insert into 管理系學生信息
select * 
from 學生信息
where 所在系 = '管理系'
go


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章