我是做Unity客戶端的。半路出家,所以基礎薄弱。特記錄一些SQl語句的基礎知識,比較淺薄。只是爲了加深記憶,所謂眼過千遍不如手過一遍麼! 也是爲了以後對數據酷這塊知識的更多擴充。所以,見笑了。對了,爲了方便認知,單詞全部爲小寫
One. 簡單查詢!
1.select語句
select [all:默認值爲全部| distinct:消除重複][top n] 表達式列表 [as 可自定義別名]
from 表明或者視圖名
[where 條件表達式]
[group by 列名] [having 搜索表達式]
[order by 列名[asc:升序 | desc:降序]]
內容 | _________________________________作用_________________________________ |
---|---|
select | 用於指定輸出的內容 |
from | 用於指定要檢索的數據的來源表或來源試圖 |
where | 指定對記錄的過濾條件 |
group by | 指定對檢索到的記錄進行分組的條件 |
having | 用於在分組的基礎上指定選取某些組的條件,必須和group by 同時使用 |
order by | 用於對檢索到的記錄進行排序 |
2.聚集函數
聚集函數的主要功能是對錶在指定列名表達式的指上進行縱向統計和計算,也成爲聚合函數
*。在Select查詢語句中常用的有:
表達式 | 作用 |
---|---|
count | 統計列中選取的項目個數或查詢輸出的行數 |
sum | 計算指定的數值型列名表達式的總和 |
avg | 計算指定的數值型列名表達式的平均值 |
max | 求出指定的數值,字符,或者日期型列名表達式的最大值 |
min | 求出指定的數值,字符,或者日期型列名表達式的最小值 |
eg:
1. 統計“信息管理”專業的學生總人數
select count(*) as '人數' from Students where professional='信息管理'
2. 計算課程爲“090110A”課程成績的最高分,最低分和平均分。
select max(degree) as '最高分' , min(degree) as '最低分' , avg(degree) as '平均分' from Elective where cno='090110A'
3.範圍查詢
where中可以使用Between 和and 判定某個表達式值是否在某個區域範圍之間。初值和終值用 and 分開。
eg:
1. 查詢生日在1988-09-01至1990-06-30之間的學生的學號,姓名,性別和出生年月
select sno, sname, sex, birthday from Students where convert(char(10), birthday, 120) Between '1988-09-01 and '1990-06-30'
注:convert() 函數是把日期轉換爲新數據類型的通用函數。他的第三個參數 120 表示轉化之後的格式。
Style ID | Style 格式 |
---|---|
100 或者 0 | mon dd yyyy hh:miAM (或者 PM) |
102 | mm/dd/yy |
103 | dd/mm/yy |
104 | dd.mm.yy |
… | … (更多請百度) |
4.模糊查詢
有時候查詢的條件並不是很精確。可以使用模糊查詢。 使用 like 關鍵詞來實現模糊查詢。
注:模糊表達式可以是完整的字符串,也可以是加入了一下通配符。
通配符 | 含義 |
---|---|
% | 代表0或多個字符 |
_ | 代表1個字符 |
[] | 代表指定範圍或集合中的1個字符 |
[^] | 代表不在指定範圍或集合中的一個字符 |
在sql server 2005 中將 一個漢字看做爲一個字符,而不是兩個 |
eg:
1. 查詢姓“李”的學生的姓名和聯繫方式
select sname, telephone, email from Students where sname like '李%'
2. 查詢姓“李”或者姓 “陳”的學生的姓名和聯繫方式
select sname, telephone, email from Students where sname like '[李、陳]%'
3. 查詢除了姓“李”或者姓 “陳”的學生的姓名和聯繫方式
select sname, telephone, email from Students where sname like '[^李、陳]%'
5.排序查詢
asc 爲升序, desc爲降序。 默認爲升序asc。
eg:
1. 查詢選修課編號爲090112A的學生的學號和成績,並降序排序
select sno, degree from Elective where cno='090112A' order br degree desc
6.分組查詢
使用 group by 子句可以根據某列的值對查詢結果進行分組,然後再進行統計的彙總。如果未對查詢結果分組,聚集函數將作用整個查詢結果。如果對插敘結果分組,聚集函數將分別作用於每個組,從而細化了聚集函數的作用對象。
eg:
1. 查詢每門課程的的平均成績
select cno as '課程編號', avg(degree) as '平均成績' from Elective group by cno
注:使用 group by 子句後,select 子句的列名列表中只能出現分組列或聚集函數
如果分組後,還要求按一定的條件對這些組進行篩選,則要使用having 子句指定篩選條件。 having 子句是作爲group by 子句的條件出現的。所以有 having 必須要有 group by,並且在 gruop by 之後
eg:
1. 查詢成績大於80分的學生號和平均成績,計算平均成績只計算及格的。
只將及格成績計算在內可以使用where子句直接過濾。但平均成績需要用聚集函數 avg計算,因此不能使用where子句過濾。 只能使用 having 子句來過濾平均分高於80分的記錄
select sno as '學號', avg(degree) as '平均成績' from Elective where degree>=60 group by sno having avg(degree) > 80
where 和 having 的 區別是作用的對象不一樣,where子句作用於表或試圖,從中選擇滿足條件的數據行。而 having 子句作用於 組,從中選擇滿足條件的組。
7.TOP查詢
TOP查詢僅在結果集中從前向後列出指定數量的數據行。
語法: TOP (Expression) [Percent] [With ties]
參數 | 意義 |
---|---|
Expression | 爲表達式或數字,即從前向後返回的數據行數 |
Percent | 百分比,表示結果集中只輸出查詢結果的前百分之Expression條的記錄 |
With ties | 指定從基礎結果集中返回附加的行,這些行包含於出現在最後的 order by 列中的值相同的值。必須於 order by 一起使用,基本結果要根據 order by 子句指定的排序列和排序方式排序。例如,若基本結果集中第n(Expression 的值)行後的m行記錄的排序列數據都相同,則這些記錄均在結果集中輸出,即輸出的結果集的前 n+m 行記錄 |
eg:
1. 查詢年齡最小的學生的姓名,性別和生日。
select TOP(1)sname, sex, birthday from Students order by birthday desc
8.其他處理
eg:
1. 空值處理
select * from Students where telephone IS NULL
2. 保存查詢結果去新建表中
select * INTO Students_Computer from Students where professional='計算機應用'
2. 更新表中一個字段的值爲隨機範圍值
UPDATE loaction SET strength=round(rand()*500) where id > 0
3. 一個循環插入的SQL腳本
DELIMITER ;;
CREATE PROCEDURE test_insert()
BEGIN
DECLARE y TINYINT DEFAULT 1;
WHILE y<10
DO
insert into package_gift (name) values ("nihao");
SET y=y+1;
END WHILE ;
commit;
END;;
CALL test_insert();