1. 程式人生 > >T-SQL查詢語句

T-SQL查詢語句

select t-sql 多表查詢 表達式 楊書凡

SQL語言中最主要、最核心的部分是它的查詢功能。查詢語句用來對已經存在於數據庫的數據按照特定的組合、條件表達式或次序進行檢索,使用SELECT語句來完成。

使用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查詢語句