查詢select: 1。單表查詢 2。多表查詢 3。嵌套查詢
分類
1)單表查詢
2)多表查詢
A.連接查詢
B.子查詢
①一般子查詢 ②相關(guān)子查詢
***************************************
SQL查詢語句《一》:單表查詢
1.查詢?nèi)坑涗洠簊elect * from table_name
2.查詢指定字段記錄:select 字段列表 from table_name
3.過濾相同記錄:select Distinct 字段列表 from table_name
<SELECT語句中使用ALL或DISTINCT選項(xiàng)來顯示表中符合條件的所有行或刪除其中重復(fù)的數(shù)據(jù)行,默認(rèn)為ALL。
使用DISTINCT選項(xiàng)時(shí),對(duì)于所有重復(fù)的數(shù)據(jù)行在SELECT返回的結(jié)果集合中只保留一行。
使用distinct會(huì)減慢查詢速度,數(shù)量大的查詢更明顯>
4.帶表達(dá)式的查詢:select s_name,year(s_birthday) as year from table_name
5.指定查詢結(jié)果的查詢
select top n * from table_name <n值在0--429494967295間>
select top n PERCENT * from table_name <n值在0--100間>
(返回前/后n行,前/后n%的數(shù)據(jù))
6.指定查詢路徑的查詢:
select * from database_name.dbo.table_name
形式:數(shù)據(jù)庫名.數(shù)據(jù)庫表擁有者.表名
(可以跨越數(shù)據(jù)庫和使用者進(jìn)行查詢)
7.存儲(chǔ)查詢結(jié)果到另一個(gè)表
select 字段列表 into 新表名 from 表名
select sno,cno,degree into scorekkk from score
select sno,cno,degree into tempdb.#scorekkklll from score
<#為虛擬表,可一跨數(shù)據(jù)庫創(chuàng)建!>
8.更改列表名顯示的查詢
select 字段名1 as ''A'',字段名2 as ''B'' from 表名
select "A"=字段名1,"B"=字段名2 from 表名
select 字段名1"A",字段名2"B" from 表名
9.條件查詢<Where子句>
select 字段名列表 from 表名 where 條件表達(dá)式
條件表達(dá)式運(yùn)算符:
比較運(yùn)算符(=,<,<=,>,>=,!<,!>,!=,<>)
邏輯運(yùn)算符(or,and,not)
范圍說明(between and,not between and)
可選值列表(in,not in)
模式匹配(like,not like)
是否為空值(is null,is not null)
<注:字符型字段必須用單引號(hào),數(shù)字型字段則不用;like和not like適合字符型字段查詢。>
like 子句與通配符一起使用,
Like "字符串",字符串含通配符或空格
%,一個(gè)或多個(gè)任意字符;
_,一個(gè)任意字符;
[],方括號(hào)中的任意一個(gè)字符;
[^],任意一個(gè)在括號(hào)中沒有的字符。
11.排序查詢<Order by子句>
select 字段名列表 from 表名 [where 條件表達(dá)式] order by 字段名表達(dá)式 desc/asc
select * from Sclass order by cno asc,degree desc
<使用ORDER BY子句對(duì)查詢返回的結(jié)果按一列或多列排序。ORDER BY子句的語法格式為:ORDER BY {column_name [ASC|DESC]} [,…n] 其中ASC表示升序,為默認(rèn)值,DESC為降序。ORDER BY不能按ntext、text和image的數(shù)據(jù)類型進(jìn)行排序。>
12.分組查詢<Group by子句>
select 字段名列表 from 表名 [where 條件表達(dá)式] group by 字段名
select 字段名列表 from 表名 [where 條件表達(dá)式] group by 字段名 Having <篩選表達(dá)式>
select cno,avg(degree) as chengji from score group by cno
select cno,avg(degree) as chengji from score group by cno Having avg(degree)>80
<字段名列表中包含聚合函數(shù)時(shí),則計(jì)算每組的匯總值。
如果使用Group by子句,字段名列表中任一非聚合表達(dá)式內(nèi)的所有列都必需包含在 Group by列表中,或者Group by表達(dá)式必須與選擇列表表達(dá)式完全匹配。> 篩選查詢<Having子句> <Having子句對(duì)Group by子句分組后的結(jié)果進(jìn)行篩選,看其是否滿足條件。 故此Having只能配合group by子句使用。>
當(dāng)Where子句,Group by子句,Having子句同時(shí)使用時(shí),其順序如下:
①執(zhí)行Where子句,從表中選取行;
②由Group By分組;
③執(zhí)行Having子句選取滿足的分組條件。
聚合函數(shù):使用聚合函數(shù),實(shí)現(xiàn)數(shù)據(jù)統(tǒng)計(jì)。
AVG:計(jì)算平均數(shù)
Count(*):統(tǒng)計(jì)查詢輸出的記錄總數(shù)
Count():統(tǒng)計(jì)指定列中選擇的記錄總數(shù)
Max:最大值
Min:最小值
Sum:計(jì)算總和
Stdev:計(jì)算統(tǒng)計(jì)標(biāo)準(zhǔn)偏差
Var:統(tǒng)計(jì)方差
13.匯總查詢<Compute子句>
(1).compute:
Select 字段名列表 From 表名 [where 條件表達(dá)式] Compute 匯總表達(dá)式
Select cno,sno,degree From score Compute avg(degree)
<compute子句生成的匯總結(jié)果附加在結(jié)果集的后面,匯總表達(dá)式須用到聚合函數(shù)>
(2).compute by:
Select 字段名列表 from 表名
[where 條件表達(dá)式] order by 字段名 compute 匯總表達(dá)式 by 分類字段名
Select sno,cno,degree From sclass Order by cno compute Avg(degree) by cno
Select sno,cno,degree From score Order by cno Asc,degree Desc
compute avg(degree) by cno
<compute by子句根據(jù)by后的字段名進(jìn)行分組,必須與order by子句一起使用,分類字段名必須與order by后的字段名一致。>
***************************************
簡單的Transact-SQL查詢只包括選擇列表、FROM子句和WHERE子句。它們分別說明所查詢列、查詢的表或視圖、以及搜索條件
等。
完整的Select 語句用法:
SELECT 字段列名
[INTO 新表名]
FROM 表 | 視圖名
[WHERE 查詢限定條件]
[GROUP BY 分組表達(dá)式]
[HAVING 分組條件]
[ORDER BY 次序表達(dá)式[ASC | DESC]]
(2)FROM子句
FROM子句指定SELECT語句查詢及與查詢相關(guān)的表或視圖。在FROM子句中最多可指定256個(gè)表或視圖,它們之間用逗號(hào)分隔。在FROM子句同時(shí)指定多個(gè)表或視圖時(shí),如果選擇列表中存在同名列,這時(shí)應(yīng)使用對(duì)象名限定這些列所屬的表或視圖。
例如在usertable和citytable表中同時(shí)存在cityid列,在查詢兩個(gè)表中的cityid時(shí)應(yīng)使用下面語句格式加以限定:
SELECT username,citytable.cityid
FROM usertable,citytable
WHERE usertable.cityid=citytable.cityid
在FROM子句中可用以下兩種格式為表或視圖指定別名:
表名 as 別名
表名 別名
例如上面語句可用表的別名格式表示為:
SELECT username,b.cityid
FROM usertable a,citytable b
WHERE a.cityid=b.cityid
SELECT不僅能從表或視圖中檢索數(shù)據(jù),它還能夠從其它查詢語句所返回的結(jié)果集合中查詢數(shù)據(jù)。
例如:
SELECT a.au_fname+a.au_lname
FROM authors a,titleauthor ta
(SELECT title_id,title
FROM titles
WHERE ytd_sales>10000
) AS t
WHERE a.au_id=ta.au_id
AND ta.title_id=t.title_id
此例中,將SELECT返回的結(jié)果集合給予一別名t,然后再從中檢索數(shù)據(jù)。
WHERE子句可包括各種條件運(yùn)算符:
比較運(yùn)算符(大小比較):>、>=、=、<、<=、<>、!>、!<
范圍運(yùn)算符(表達(dá)式值是否在指定的范圍):BETWEEN…AND… NOT BETWEEN…AND…
列表運(yùn)算符(判斷表達(dá)式是否為列表中的指定項(xiàng)):IN (項(xiàng)1,項(xiàng)2……) NOT IN (項(xiàng)1,項(xiàng)2……)
模式匹配符(判斷值是否與指定的字符通配格式相符):LIKE、NOT LIKE
空值判斷符(判斷表達(dá)式是否為空):IS NULL、NOT IS NULL
邏輯運(yùn)算符(用于多條件的邏輯連接):NOT、AND、OR
1、范圍運(yùn)算符例:age BETWEEN 10 AND 30相當(dāng)于age>=10 AND age<=30
2、列表運(yùn)算符例:country IN (''Germany'',''China'')
3、模式匹配符例:常用于模糊查找,它判斷列值是否與指定的字符串格式相匹配??捎糜赾har、varchar、text、ntext、datetime和smalldatetime等類型查詢。
可使用以下通配字符:
百分號(hào)%:可匹配任意類型和長度的字符,如果是中文,請(qǐng)使用兩個(gè)百分號(hào)即%%。
下劃線_:匹配單個(gè)任意字符,它常用來限制表達(dá)式的字符長度。
方括號(hào)[]:指定一個(gè)字符、字符串或范圍,要求所匹配對(duì)象為它們中的任一個(gè)。
[^]:其取值也[] 相同,但它要求所匹配對(duì)象為指定字符以外的任一個(gè)字符。
例如:
限制以Publishing結(jié)尾,使用LIKE ''%Publishing''
限制以A開頭:LIKE ''[A]%''
限制以A開頭外:LIKE ''[^A]%''
4、空值判斷符例WHERE age IS NULL
5、邏輯運(yùn)算符:優(yōu)先級(jí)為NOT、AND、OR