SQL單表查詢

SQL數據查詢

1 select語法

select  all|distinct <目標****表達式> 【列】

from <表名或視圖名>select語句)as  <別名>

where<條件表達式>【行】
--只有符合having條件的組纔可以輸出
group by <列名1> HAVEING<條件表達式>

with  {CUBE|ROLLUP}

order by<列名2>[ASC|DESC]

目標列表達式可以爲列名,算數表達式,函數,字符串等。

where子句作用於基本表或者視圖,從中選擇滿足條件的元組

having子句從group後的組中選擇滿足條件的組

總結一下自己的理解:

select相當於關係代數中的映射,是對列的操作,除了top 5 * 以外

where相當於關係代數裏的選擇操作,是對行的操作,where後邊不可以使用聚集函數,having處和select處纔可以使用聚集函數

group 是按指定列的值分組,比如,把學號相同的記錄分爲一個組,where篩選掉不需要參加分組的記錄,

having時對分組後的記錄進行篩選

order by 列名 ASC DESC默認升序

順序:where-----group-----having

2 查詢條件where

比較:

= 、>=、<=、<>

確定範圍

between and (閉區間) not between and

確定集合

IN NOT IN

字符匹配

like not like

_匹配一個任意字符,包括一個漢字

%匹配0至多個任意字符

[]:指定範圍內的任意單個字符,例如 LIKE’[CK]’,表示CK中的一個字符

[^ ] 和正則表達式一樣的。

數據庫字符集爲ASCII 時一個漢字需要兩個_,當字符集爲GBK時只需要一個_

轉義匹配,如果查詢含有_的字符串 ,在前邊加一個反斜槓 \

[not] like<匹配串> [escape換碼字符’]

空值匹配

is null

is not nul

多重條件匹配

and , or , not

限制結果返回行數top

--選擇前五行
select top 5 stu_no  學號,stu_name 姓名
FROM Student;

--3~5行記錄---嵌套查詢
select TOP 3* FROM student
where stu_no NOT IN (SELECT TOP 2 stu_no FROM student)

--集合的差 except
SELECT TOP 5 * FROM student
EXCEPT
SELECT TOP 2 * FROM student


---注意select * 代表選擇所有列,即一行記錄的所有屬性,此時的select對行和列都進行了篩選,只是
行只能選擇顯示幾行。

3 聚集函數

聚集函數只能用於select子句和group子句的having子句中

COUNT(*) 統計元組個數
COUNT([distinct|all]<列名>) 統計一列中值的個數
SUM([distinct|all]<列名>) 統計一列值的總和,must數值型
AVG([distinct|all]<列名>) 統計一列值的平均值,must數值型
MAX([distinct|all]<列名>) 求一列中的最大值
MIN([distinct|all]<列名>) 求一列中的最小值

avg(),count()在統計時,會忽略爲null的值。比如
在統計某學生選了多少門選課時,應該用count(cou_no),而不能用count(grade)
因爲如果他缺考,成績爲null的話,這們選課就count()不到。
count(stu_no)統計學生人數時,也不會去掉相同學號的記錄,就是說,count()不是集合操作,它只是數數符合條件的記錄有幾條。count(distinct stu_no)

4 字符串函數

CHARINDEX

用來尋找一個指定的字符串在另一個字符串中的起始位置

LEN

MySQL中爲length

返回傳遞給它的字符串長度。

SELECT LEN(‘SQL SERVER課程’) ,返回12,空格也算哦

LOWER

把傳遞給它的字符串轉換爲小寫

UPPER

把傳遞給它的字符串轉換爲大寫

LTRIM

清除字符左邊的空格,右邊的不清除。

5 日期函數

在這裏插入圖片描述

在這裏插入圖片描述

6 數學函數

在這裏插入圖片描述

7 系統函數

在這裏插入圖片描述
注意CONVERT轉換數據類型
MySQL·使用CAST

8例題:一組變一行

在這裏插入圖片描述

列用CASE語句表示,相當於把group後的一組數據變爲一行數據

MAX使用原因,比如一個同學同一門課程考過兩次(補考),也就是說符合學號和課程號的記錄可能有多條,系統不知道選哪一條給我們看(二義性),或者使用MIN()也可以。

9 case用法

select  Stu_no 學號,Cou_no 課程號,grade 成績,case 
											when  grade>=90 then '優秀'
											when  grade>=80 then '良好'
											when  grade>=70 then '中等'
											when  grade>=60 then '及格'
											when grade is null then '缺考'
											else '不及格'
											end as '等級'
FROM SC

--注意case的用法。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章