1. SELECT文法結構
T-SQL中查詢基本格式是有SELECT子句、FROM子句、WHERE子句組成的查詢塊:
select 列名 from 表名 where 查詢限定條件
其中
* select 指定了想要檢視哪些列的資料
* from 指定這些資料來自于哪些表
* where 指定了想要檢視哪些行
SELECT語句的文法如下:
1
2
3
4
5
6
7
<code>select</code> <code>列名 </code><code>//SELECT</code><code>子句:指定查詢清單字段,列名格式為“表.字段1,表.字段2”,如果查單個表,可簡寫為“字段1,字段2”</code>
<code>[into 新表名] </code><code>//INTO</code><code>子句:可選,将查詢結果存放在一個新表中</code>
<code>from 表名 </code><code>//FROM</code><code>子句:指定查詢資料的表名稱</code>
<code>[where 查詢限定條件] </code><code>//WHERE</code><code>子句:可選,查詢條件,由字段組成的條件表達式或邏輯表達式</code>
<code>[group by 分組條件] </code><code>//GROUP</code> <code>BY子句:可選,指定查詢結果的分組條件,通常是一個列名,但不能是列的别名</code>
<code>[having 分組查詢限定條件] </code><code>//HAVING</code><code>子句:指定分組搜尋條件,通常與GROUP BY子句一起使用</code>
<code>[order by 排序規則esc|desc] </code><code>//ORDER</code> <code>BY子句:指定查詢結果的排序方式,預設為升序ESC;DESC表示</code>
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 季度
使用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子句來實作,寫法如下
from A inner join B on A.name=B.name
2. 外連接配接
外連接配接是對内連接配接的擴充,除了将兩個表中資料重複部分連接配接起來,還可以要求顯示左側或右側全部的資料
(1)左外連接配接(LEFT JOIN)
左外連接配接的結果集包括左表的所有行
案例:在表A和表B中使用左外連接配接查詢學生姓名、學校、職業
from A left join B on A.name=B.name
(2)右外連接配接(RIGHT JOIN)
右外連接配接是左外連接配接的反向連接配接,其結果集包括右側所有行
案例:在表A和表B中使用右外連接配接查詢學生姓名、學校、職業
from A right join B on A.name=B.name
(3)全連接配接(FULL JOIN)
全連接配接右成完整外連接配接,包括左表和右表中的所有行
案例:在表A和表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
本文轉自 楊書凡 51CTO部落格,原文連結:http://blog.51cto.com/yangshufan/2044662,如需轉載請自行聯系原作者