文章目錄
數據查詢
基本查詢
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