天天看點

T-SQL查詢語句

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 成績&lt;90 or 成績&gt;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(成績)&gt;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,如需轉載請自行聯系原作者