T-SQL查詢語句
使用SELECT查詢數據
1. SELECT語法結構
T-SQL中查詢基本格式是有SELECT子句、FROM子句、WHERE子句組成的查詢塊:
select 列名 from 表名 where 查詢限定條件
其中
* select 指定了想要查看哪些列的數據
* from 指定這些數據來自於哪些表
* where 指定了想要查看哪些行
SELECT語句的語法如下:
select 列名 //SELECT子句:指定查詢列表字段,列名格式為“表.字段1,表.字段2”,如果查單個表,可簡寫為“字段1,字段2” [into 新表名] //INTO子句:可選,將查詢結果存放在一個新表中 from 表名 //FROM子句:指定查詢數據的表名稱 [where 查詢限定條件] //WHERE子句:可選,查詢條件,由字段組成的條件表達式或邏輯表達式 [group by 分組條件] //GROUP BY子句:可選,指定查詢結果的分組條件,通常是一個列名,但不能是列的別名 [having 分組查詢限定條件] //HAVING子句:指定分組搜索條件,通常與GROUP BY子句一起使用 [order by 排序規則esc|desc] //ORDER BY子句:指定查詢結果的排序方式,默認為升序ESC;DESC表示
2. 表達式
表達式是符號和運算符的一種組合,並且可以對它求值得到單個數據值
(1)條件表達式
常量:單個指定數據值的符號(字母、數字、符號)
列名:表中列的名稱
一元運算符:僅有一個操作數的運算符(+正數、-負數)
二元運算符:將兩個操作數組合執行操作的運算符,可以是算數運算符、賦值運算符、位運算符、比較運算符、邏輯運算符、字符串串聯運算符、一元運算符
在查詢LIKE運算符的SQL語句需要使用以下的通配符運算符:
例如:要求查找“員工信息表”中電話號碼前兩位數為“13”,可以編寫如下約束表達式
(2)邏輯表達式
3. 查詢舉例
(1)查詢student表中成績為90-100的學生所有信息
select * from student where 成績 between 90 and 100
(2)查詢student表中成績低於90或高於95分學生信息
select * from student where 成績<90 or 成績>95
(3)查詢student表中成績為89、90、91分的學生信息
select * from student where 成績 in (89,90,91)
(4)查詢student表中所有姓劉的學生信息
select * from student where 姓名 like ‘劉%'
(5)查詢student表中前5行的數據
select top 5 * from student
(6)查詢student表中所有學生信息,按照成績從高到低顯示查詢結果
select * from student order by 成績 desc
4. 分組查詢
分組查詢就是將表中的數據按照一定的條件分類組合,在根據需要得到統計信息,通過group by子句可以實現
在group by子句查詢中,select指定的列名要麽是group by子句中指定的列,要麽是聚合函數。聚合函數用於對一組值進行計算,並返回單個值,如求總和、最大值、最小值、平均值等。T-SQL中常見的聚合函數有SUM()、AVG()、MAX()、MIN()、COUNT()等
(1)查詢student表中所有學生的總成績,列表名顯示為“總成績”
select SUM(成績)as 總成績 from student
(2))查詢student表中所有學生的平均成績
select AVG(成績)as 平均成績 from student
(3)查詢student表中所有學生的最高分和最低分
select MAX(成績)as 最高分 MIN(成績)as 最低分 from student
(4)查詢student表中所有行數
select COUNT(*)as 總行數 from student
(5)查詢student表中每個班級的總成績
select SUM(成績)as 總成績 from student group by 班級
(6)查詢student表中總成績大於200的班級
select SUM(成績)as 總成績 from student group by 班級 having SUM(成績)>200
(7)將student表中2班的學生信息保存到表student_new中
select * into student_new from student where 班級=2
5. 子查詢
子查詢就是查詢中又嵌套的查詢
案例1:查詢student表中的最高分或最低分是哪個學生
select 姓名,成績
from student
where 成績=(select MAX(成績) from student) or 成績=(select MIN(成績) from student)
案例2:查詢每個季度的生產數量,百分比
select 季度,sum(生產數量) AS 每個季度的生產數量,
str((sum(生產數量)/(select sum(生產數量) from 生產表))*100)+'%' AS 百分比
from 生產表
group by 季度
order by 季度
6. 合並兩個結果集
使用T-SQL實現多表查詢
前面的查詢都是單表的查詢。如果一個查詢需要對多個表進行操作,就稱為連接查詢,就是通過各個表之間共同列的關聯性來查詢數據。
1. 內連接(INNER JOIN)
內連接(INNER JOIN)是最常用的一種連接方式,只顯示兩個表中數據的集合部分
案例:在表A和表B中使用內連接查詢學生姓名、學校、職業
* 實現方式一:在where子句中指定連接條件,寫法如下
select A.name 姓名A,A.school 學校A,B.name 姓名B,B.job 職業B
from A,B
where A.name=B.name
* 實現方式二:在from子句中使用inner join …on子句來實現,寫法如下
select A.name 姓名A,A.school 學校A,B.name 姓名B,B.job 職業B
from A inner join B on A.name=B.name
2. 外連接
外連接是對內連接的擴充,除了將兩個表中數據重復部分連接起來,還可以要求顯示左側或右側全部的數據
(1)左外連接(LEFT JOIN)
左外連接的結果集包括左表的所有行
案例:在表A和表B中使用左外連接查詢學生姓名、學校、職業
select A.name 姓名A,A.school 學校A,B.name 姓名B,B.job 職業B
from A left join B on A.name=B.name
(2)右外連接(RIGHT JOIN)
右外連接是左外連接的反向連接,其結果集包括右側所有行
案例:在表A和表B中使用右外連接查詢學生姓名、學校、職業
select A.name 姓名A,A.school 學校A,B.name 姓名B,B.job 職業B
from A right join B on A.name=B.name
(3)全連接(FULL JOIN)
全連接右成完整外連接,包括左表和右表中的所有行
案例:在表A和表B中使用完整外連接查詢學生姓名、學校、職業
select A.name 姓名A,A.school 學校A,B.name 姓名B,B.job 職業B
from A full join B on A.name=B.name
3. 合並兩個結果集
案例:將兩個表的結果合並到一個結果顯示
SELECT 姓名,學號,班級,國籍
FROM 二班
UNION
select 姓+' '+名,學號,班級,國籍
from 一班
order by 班級 desc,學號 asc
4. 自連接
案例:查找每個員工的上司姓名
SELECT Y.員工姓名,S.員工姓名 AS 上司姓名
from 員工信息表 as Y inner join 員工信息表 as S
on Y.上司ID=S.員工ID
5. 交叉連接
交叉連接就是表之間沒有任何連接,左表與右表每一行一一組合,相當於兩個表相乘
SELECT T.教師姓名,C.課程名
from 教員基本信息表 AS T cross join 課程表 AS C
T-SQL查詢語句