查詢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選項來顯示表中符合條件的所有行或刪除其中重復(fù)的數(shù)據(jù)行,默認為ALL,。
使用DISTINCT選項時,對于所有重復(fù)的數(shù)據(jù)行在SELECT返回的結(jié)果集合中只保留一行,。
使用distinct會減慢查詢速度,,數(shù)量大的查詢更明顯>
4.帶表達式的查詢: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ù)庫和使用者進行查詢)
7.存儲查詢結(jié)果到另一個表
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 條件表達式
條件表達式運算符:
比較運算符(=,<,<=,>,>=,!<,!>,!=,<>)
邏輯運算符(or,and,not)
范圍說明(between and,not between and)
可選值列表(in,not in)
模式匹配(like,not like)
是否為空值(is null,is not null)
<注:字符型字段必須用單引號,,數(shù)字型字段則不用,;like和not like適合字符型字段查詢。>
like 子句與通配符一起使用,,
Like "字符串",,字符串含通配符或空格
%,一個或多個任意字符,;
_,,一個任意字符;
[],,方括號中的任意一個字符,;
[^],任意一個在括號中沒有的字符,。
11.排序查詢<Order by子句>
select 字段名列表 from 表名 [where 條件表達式] order by 字段名表達式 desc/asc
select * from Sclass order by cno asc,degree desc
<使用ORDER BY子句對查詢返回的結(jié)果按一列或多列排序,。ORDER BY子句的語法格式為:ORDER BY {column_name [ASC|DESC]} [,…n] 其中ASC表示升序,為默認值,,DESC為降序,。ORDER BY不能按ntext、text和image的數(shù)據(jù)類型進行排序,。>
12.分組查詢<Group by子句>
select 字段名列表 from 表名 [where 條件表達式] group by 字段名
select 字段名列表 from 表名 [where 條件表達式] group by 字段名 Having <篩選表達式>
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ù)時,,則計算每組的匯總值。
如果使用Group by子句,,字段名列表中任一非聚合表達式內(nèi)的所有列都必需包含在 Group by列表中,,或者Group by表達式必須與選擇列表表達式完全匹配。> 篩選查詢<Having子句> <Having子句對Group by子句分組后的結(jié)果進行篩選,,看其是否滿足條件,。 故此Having只能配合group by子句使用。>
當Where子句,Group by子句,,Having子句同時使用時,,其順序如下:
①執(zhí)行Where子句,從表中選取行,;
②由Group By分組,;
③執(zhí)行Having子句選取滿足的分組條件。
聚合函數(shù):使用聚合函數(shù),,實現(xiàn)數(shù)據(jù)統(tǒng)計,。
AVG:計算平均數(shù)
Count(*):統(tǒng)計查詢輸出的記錄總數(shù)
Count():統(tǒng)計指定列中選擇的記錄總數(shù)
Max:最大值
Min:最小值
Sum:計算總和
Stdev:計算統(tǒng)計標準偏差
Var:統(tǒng)計方差
13.匯總查詢<Compute子句>
(1).compute:
Select 字段名列表 From 表名 [where 條件表達式] Compute 匯總表達式
Select cno,sno,degree From score Compute avg(degree)
<compute子句生成的匯總結(jié)果附加在結(jié)果集的后面,匯總表達式須用到聚合函數(shù)>
(2).compute by:
Select 字段名列表 from 表名
[where 條件表達式] order by 字段名 compute 匯總表達式 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后的字段名進行分組,,必須與order by子句一起使用,分類字段名必須與order by后的字段名一致,。>
***************************************
簡單的Transact-SQL查詢只包括選擇列表,、FROM子句和WHERE子句。它們分別說明所查詢列,、查詢的表或視圖,、以及搜索條件
等。
完整的Select 語句用法:
SELECT 字段列名
[INTO 新表名]
FROM 表 | 視圖名
[WHERE 查詢限定條件]
[GROUP BY 分組表達式]
[HAVING 分組條件]
[ORDER BY 次序表達式[ASC | DESC]]
(2)FROM子句
FROM子句指定SELECT語句查詢及與查詢相關(guān)的表或視圖,。在FROM子句中最多可指定256個表或視圖,,它們之間用逗號分隔。在FROM子句同時指定多個表或視圖時,,如果選擇列表中存在同名列,,這時應(yīng)使用對象名限定這些列所屬的表或視圖。
例如在usertable和citytable表中同時存在cityid列,,在查詢兩個表中的cityid時應(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子句可包括各種條件運算符:
比較運算符(大小比較):>,、>=,、=、<,、<=,、<>、!>,、!<
范圍運算符(表達式值是否在指定的范圍):BETWEEN…AND… NOT BETWEEN…AND…
列表運算符(判斷表達式是否為列表中的指定項):IN (項1,項2……) NOT IN (項1,項2……)
模式匹配符(判斷值是否與指定的字符通配格式相符):LIKE,、NOT LIKE
空值判斷符(判斷表達式是否為空):IS NULL、NOT IS NULL
邏輯運算符(用于多條件的邏輯連接):NOT、AND,、OR
1,、范圍運算符例:age BETWEEN 10 AND 30相當于age>=10 AND age<=30
2、列表運算符例:country IN (''Germany'',''China'')
3,、模式匹配符例:常用于模糊查找,,它判斷列值是否與指定的字符串格式相匹配??捎糜赾har,、varchar、text,、ntext,、datetime和smalldatetime等類型查詢。
可使用以下通配字符:
百分號%:可匹配任意類型和長度的字符,,如果是中文,,請使用兩個百分號即%%。
下劃線_:匹配單個任意字符,,它常用來限制表達式的字符長度,。
方括號[]:指定一個字符、字符串或范圍,,要求所匹配對象為它們中的任一個,。
[^]:其取值也[] 相同,但它要求所匹配對象為指定字符以外的任一個字符,。
例如:
限制以Publishing結(jié)尾,,使用LIKE ''%Publishing''
限制以A開頭:LIKE ''[A]%''
限制以A開頭外:LIKE ''[^A]%''
4、空值判斷符例WHERE age IS NULL
5,、邏輯運算符:優(yōu)先級為NOT,、AND、OR