社区应用 最新帖子 精华区 社区服务 会员列表 统计排行 社区论坛任务 迷你宠物
  • 6116阅读
  • 0回复

[原创]SQL查询语句使用

级别: 店掌柜
发帖
5692
铜板
103378
人品值
1520
贡献值
26
交易币
0
好评度
5373
信誉值
0
金币
0
所在楼道

一、简单查询 CA|W4f}  
}c9RDpjh~  
简单的Transact-SQL查询只包括选择列表、FROM子句和WHERE子句。它们分别说明所查询列、查询的 9_*3xu<7i  
~]%re9jGW  
表或视图、以及搜索条件等。 rr1,Ijh{D  
F'<XB~ &o  
例如,下面的语句查询testtable表中姓名为“张三”的nickname字段和email字段。 : [?7,/w  
D@w&[IF  
SELECT nickname,email /FTP8XHwL)  
mtFC H  
FROM testtable meB9 :w[m  
#?M[Q:  
WHERE name='张三' p/ZgzHyF  
Y]&2E/oc  
(一)选择列表 A\/DAVnI  
)@ B !  
选择列表(select_list)指出所查询列,它可以是一组列名列表、星号、表达式、变量(包括局部变 W:f)#'  
!x-9A  
量和全局变量)等构成。 @(/$;I,  
\ Ho VS  
1、选择所有列 N}z]OvnZH  
`aMnTF5:  
例如,下面语句显示testtable表中所有列的数据: 9@ h-q(-  
V?MaI .gj  
SELECT * 0^P9)<k'  
A@.ruG$  
FROM testtable ?)qm=mebY  
t P' ._0n0  
2、选择部分列并指定它们的显示次序 *Q -uE  
H5FWk  
查询结果集合中数据的排列顺序与选择列表中所指定的列名排列顺序相同。 S2I{?y&K  
V-%jSe<  
例如: o9D#d\G  
nm|"9|/  
SELECT nickname,email OlW5k`B  
5?#AS#TD'  
FROM testtable SX?hu|g_r  
`sdbo](76  
3、更改列标题 w &^Dbme  
U&+lw=  
在选择列表中,可重新指定列标题。定义格式为: )1 0aDTlr  
OJ\j6owA  
列标题=列名 a$11u.\q+  
p|>/Hz1v  
列名 列标题 pkIJbI{aS  
(:# 4{C  
如果指定的列标题不是标准的标识符格式时,应使用引号定界符,例如,下列语句使用汉字显示列 &fxyY (  
sBN4:8  
标题: ]x_14$rk  
oe_,q&e  
SELECT 昵称=nickname,电子邮件=email Q `h@-6N  
5zJ#d}%}S"  
FROM testtable [HRP&jr  
Xs4G#QsA J  
4、删除重复行 r)w]~)8  
,-1taS  
SELECT语句中使用ALL或DISTINCT选项来显示表中符合条件的所有行或删除其中重复的数据行,默认 }WNgKw  
]waCYrG<sY  
为ALL。使用DISTINCT选项时,对于所有重复的数据行在SELECT返回的结果集合中只保留一行。 oM}P Wf-  
t2-bw6U  
5、限制返回的行数 6~Zq  
~:4Mf/Ca  
使用TOP n [PERCENT]选项限制返回的数据行数,TOP n说明返回n行,而TOP n PERCENT时,说明n是 ]\=M$:,RZ  
FefS]G  
表示一百分数,指定返回的行数等于总行数的百分之几。 F>q%~  
rYA4(rYq  
例如: xe1xP@e?  
O;;vz+ j  
SELECT TOP 2 * X% M*d%n b  
`yb,z   
FROM testtable :e4[isI  
-QydUr/(o  
SELECT TOP 20 PERCENT * 5~omZ,qe  
j98>Jr\  
FROM testtable 0K^G>)l  
m}-~VYDj  
(二)FROM子句 p~u11rH  
WkY>--^  
FROM子句指定SELECT语句查询及与查询相关的表或视图。在FROM子句中最多可指定256个表或视图, 0V#eC  
0>?78QL9<  
它们之间用逗号分隔。 ld23 ^r  
;Q8rAsf 9  
在FROM子句同时指定多个表或视图时,如果选择列表中存在同名列,这时应使用对象名限定这些列 +(2mHS0_a  
<7~+ehu  
所属的表或视图。例如在usertable和citytable表中同时存在cityid列,在查询两个表中的cityid时应 2fJ2o[v  
S|v-lJ/I  
使用下面语句格式加以限定: P^ bcc  
ki_Py5  
SELECT username,citytable.cityid }~o>H a;  
$30lNZK1m8  
FROM usertable,citytable L sMS`o6  
g~=#8nJ  
WHERE usertable.cityid=citytable.cityid I'RhA\`  
ZTSNM)f  
在FROM子句中可用以下两种格式为表或视图指定别名: \c$! C8z  
>/F,Z%! &q  
表名 as 别名 }q@Jh*  
,`< [ej   
表名 别名 faaFmEC  
"(#]H;!W  
例如上面语句可用表的别名格式表示为: v.I>B3bEg  
`BHPj p>  
SELECT username,b.cityid DJhCe==$v  
IE9A _u*  
FROM usertable a,citytable b i(XqoR-x  
iY1JU -S  
WHERE a.cityid=b.cityid wp8ocZ-Gj  
Cy##+u,C  
SELECT不仅能从表或视图中检索数据,它还能够从其它查询语句所返回的结果集合中查询数据。 $nbZ+~49  
j"8|U E  
例如: t.oP]_mI  
p2~MJ LK4  
SELECT a.au_fname+a.au_lname w;Na9tR  
p} }=li>  
FROM authors a,titleauthor ta 6<<ihm+  
s|Acv4| V  
(SELECT title_id,title '|i<?]U  
5*pCb,z>q  
FROM titles J$D#)w!$j  
;M"JN:J8  
WHERE ytd_sales>10000 J Covk1  
sP5\R#  
) AS t QGnBNsAh  
@{!c [{x,T  
WHERE a.au_id=ta.au_id >*%mJX/F  
J@c)SK%2h  
AND ta.title_id=t.title_id jE</a %  
\{[Gdj`  
此例中,将SELECT返回的结果集合给予一别名t,然后再从中检索数据。 `8%2F}x}qD  
ca1A9fvo  
(三)使用WHERE子句设置查询条件 AA$-Lx(UJk  
RE(R5n28,  
WHERE子句设置查询条件,过滤掉不需要的数据行。例如下面语句查询年龄大于20的数据: u%vq<|~-  
LCRZ<?O[|  
SELECT * BK8)'9/  
e" f/  
FROM usertable ^H1B 62_  
8D U|j-I8  
WHERE age>20 Zg/ra1n  
'J&$L c  
WHERE子句可包括各种条件运算符: g2v 0!  
?_9A`LC*  
比较运算符(大小比较):>、>=、=、<、<=、<>、!>、!< iIoeG_^*Y  
@m[r0i0J"  
范围运算符(表达式值是否在指定的范围):BETWEEN…AND… 195m0'zda  
N%\!eHxy  
NOT BETWEEN…AND… h$EH|9HAb  
{WJ+6!v  
列表运算符(判断表达式是否为列表中的指定项):IN (项1,项2……) c _li.]P  
\ueo^p]_?  
NOT IN (项1,项2……) Q9 b.]W  
E1'HdOh&z  
模式匹配符(判断值是否与指定的字符通配格式相符):LIKE、NOT LIKE j ,' $i[F'  
6WQT,@ ?  
空值判断符(判断表达式是否为空):IS NULL、NOT IS NULL |P si?'4  
h7|#7 d  
逻辑运算符(用于多条件的逻辑连接):NOT、AND、OR )8:Ltn%  
 cf#2Wg)  
1、范围运算符例:age BETWEEN 10 AND 30相当于age>=10 AND age<=30 +KV`+zic+  
J?~El&  
2、列表运算符例:country IN ('Germany','China') XP"lqyAi  
=r=YV-D.  
3、模式匹配符例:常用于模糊查找,它判断列值是否与指定的字符串格式相匹配。可用于char、 l#_(suo64  
I]|X6  
varchar、text、ntext、datetime和smalldatetime等类型查询。 P"LbWZ6Nj  
6;g"`l51  
可使用以下通配字符: %(IkUD  
9"3 7va  
百分号%:可匹配任意类型和长度的字符,如果是中文,请使用两个百分号即%%。 K"O+`2$  
I65W^b4y  
下划线_:匹配单个任意字符,它常用来限制表达式的字符长度。 gUs.D_*  
ao]Dm#HiO  
方括号[]:指定一个字符、字符串或范围,要求所匹配对象为它们中的任一个。 FabzP_<b  
mX9amS&B$  
[^]:其取值也[] 相同,但它要求所匹配对象为指定字符以外的任一个字符。 GRK+/1C  
#MbkU])  
例如: F/FUKXxx  
I5l5fx  
限制以Publishing结尾,使用LIKE '%Publishing' 'a`cK;X9F  
YQWGv,47\  
限制以A开头:LIKE '[A]%' v&p|9C@  
HrH-e= j  
限制以A开头外:LIKE '[^A]%' }j^asuf~c  
?CgqHmf\\(  
4、空值判断符例WHERE age IS NULL '`#sOH  
x78`dX  
5、逻辑运算符:优先级为NOT、AND、OR *UVo>;  
"NY[&S  
(四)查询结果排序 EIqe|a+  
u:Fa1 !4JR  
使用ORDER BY子句对查询返回的结果按一列或多列排序。ORDER BY子句的语法格式为: E)l0`83~^  
iYi3x_A`  
ORDER BY {column_name [ASC|DESC]} [,…n] wJs #rkW  
7{%_6b"  
其中ASC表示升序,为默认值,DESC为降序。ORDER BY不能按ntext、text和image数据类型进行排 8X,dVX5LT  
!e5!8z  
序。 eM";P/XaX  
B8){  
例如: E-Nc|A  
Cku#[?G  
SELECT * {k4)f ad\  
fk5xIW  
FROM usertable 1 PL2[_2:  
.v?x>iV  
ORDER BY age desc,userid ASC \wR $_X&  
WZ\bm$  
另外,可以根据表达式进行排序。 A dNQS  
LO8`qq*rq  
  SJg4P4|  
% ~eIx=s  
二、联合查询 TUw+A6u:p  
-? _#Yttu  
UNION运算符可以将两个或两个以上上SELECT语句的查询结果集合合并成一个结果集合显示,即执行联 AI{Tw>hZ  
Ah5`Cnv  
合查询。UNION的语法格式为: J?]wA1  
{t<E*5N]a  
select_statement ~:`5Y"Av:  
EDQKbTaPt  
UNION [ALL] selectstatement v?Z30?_&h  
F xek#  
[UNION [ALL] selectstatement][…n] TR;"&'#k  
or~2r8  
其中selectstatement为待联合的SELECT查询语句。 }HB>Zb5  
3q'["SS  
ALL选项表示将所有行合并到结果集合中。不指定该项时,被联合查询结果集合中的重复行将只保留一 0_F6t-  
b.mcP@  
行。 Ass :  
2a=3->D&  
联合查询时,查询结果的列标题为第一个查询语句的列标题。因此,要定义列标题必须在第一个查询语 ]S@zhQ  
RLy(Wz3%  
句中定义。要对联合查询结果排序时,也必须使用第一查询语句中的列名、列标题或者列序号。 V iY-&q'  
`1}WQS  
在使用UNION 运算符时,应保证每个联合查询语句的选择列表中有相同数量的表达式,并且每个查询选 aQjs5RbP~  
CD}::7$  
择表达式应具有相同的数据类型,或是可以自动将它们转换为相同的数据类型。在自动转换时,对于数值类 6_Ps*Ed  
,%)O/{p_  
型,系统将低精度的数据类型转换为高精度的数据类型。 ,X+LJe$  
_yH{LUIj  
在包括多个查询的UNION语句中,其执行顺序是自左至右,使用括号可以改变这一执行顺序。例如: BlwAD  
+,7nsWV  
查询1 UNION (查询2 UNION 查询3) * 0vq+C  
H( L.k;B  
  ?4k/V6n@y  
kYbqb?  
  \wMqVRPoQ  
6T"4<w[  
三、连接查询 /e/%mo  
E}?n^Zf  
通过连接运算符可以实现多个表查询。连接是关系数据库模型的主要特点,也是它区别于其它类型 _}bs0 kIz  
I+08tXO  
数据库管理系统的一个标志。 pco:]3BF6  
G>siyUh  
在关系数据库管理系统中,表建立时各数据之间的关系不必确定,常把一个实体的所有信息存放在 B*0TM+  
/b&ka&|t  
一个表中。当检索数据时,通过连接操作查询出存放在多个表中的不同实体的信息。连接操作给用户带 Dj?84y  
b+=@;0p*6B  
来很大的灵活性,他们可以在任何时候增加新的数据类型。为不同实体创建新的表,尔后通过连接进行 7:[u.cd  
s#Os?Q?  
查询。 1SAO6Wh  
C{{RU7iqc&  
连接可以在SELECT 语句的FROM子句或WHERE子句中建立,似是而非在FROM子句中指出连接时有助于 EM2=g9y  
#VM+.75o1  
将连接操作与WHERE子句中的搜索条件区分开来。所以,在Transact-SQL中推荐使用这种方法。 %mqep5n(  
]>v C.iYp  
SQL-92标准所定义的FROM子句的连接语法格式为: wh Hp}r  
%#go9H(K  
FROM join_table join_type join_table p{@jM  
^(+ X|t  
[ON (join_condition)] W;Y"J_  
rY?]pMp  
其中join_table指出参与连接操作的表名,连接可以对同一个表操作,也可以对多表操作,对同一 v2Ft=_*G|  
k|hy_? *  
个表操作的连接又称做自连接。 ys/U.e|)!  
~ 3!yd0 [k  
join_type 指出连接类型,可分为三种:内连接、外连接和交叉连接。内连接(INNER JOIN)使用比 h(~@ n d{  
wH?]kV8Q  
较运算符进行表间某(些)列数据的比较操作,并列出这些表中与连接条件相匹配的数据行。根据所使用 dDu8n+(8 L  
> J.q3  
的比较方式不同,内连接又分为等值连接、自然连接和不等连接三种。 *XUJv&ZN  
'zJBp 9a%  
外连接分为左外连接(LEFT OUTER JOIN或LEFT JOIN)、右外连接(RIGHT OUTER JOIN或RIGHT JOIN) p>ba6BDJT  
4h*c{do  
和全外连接(FULL OUTER JOIN或FULL JOIN)三种。与内连接不同的是,外连接不只列出与连接条件相匹 %LM2CgH V  
|*fi!nvk@  
配的行,而是列出左表(左外连接时)、右表(右外连接时)或两个表(全外连接时)中所有符合搜索条件的 dI(1L~  
=I.uf   
数据行。 =67ab_V  
EpW89X  
交叉连接(CROSS JOIN)没有WHERE 子句,它返回连接表中所有数据行的笛卡尔积,其结果集合中的 F ,;B  
wiFA 3_\G  
数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。 @vc9L  
<lkt'iT=Sz  
连接操作中的ON (join_condition) 子句指出连接条件,它由被连接表中的列和比较运算符、逻辑 A!$;pwn0  
2%?Kc]JY9  
运算符等构成。 $x~U&a  
7+NBcZuG9  
无论哪种连接都不能对text、ntext和image数据类型列进行直接连接,但可以对这三种列进行间接 @ ^q}.u`  
(^HU|   
连接。例如: ~XeWN^l(Ov  
<)$e*HrI  
SELECT p1.pub_id,p2.pub_id,p1.pr_info XQ'$J_hC  
<`V_H~Z  
FROM pub_info AS p1 INNER JOIN pub_info AS p2 ([ jm=[E^  
<@S'vcO  
ON DATALENGTH(p1.pr_info)=DATALENGTH(p2.pr_info) mI,a2wqi  
rff_=(?i  
(一)内连接 >6KwZr BB  
aCRiW;+'  
内连接查询操作列出与连接条件匹配的数据行,它使用比较运算符比较被连接列的列值。内连接分 #Zg pm"MW  
~hxW3e  
三种: YB+My~fw{l  
2!)|B ;y  
1、等值连接:在连接条件中使用等于号(=)运算符比较被连接列的列值,其查询结果中列出被连接 g#iRkz%l)&  
+ Pc2`,pw|  
表中的所有列,包括其中的重复列。 3^Q;On|  
{_G_YL[  
2、不等连接: 在连接条件使用除等于运算符以外的其它比较运算符比较被连接的列的列值。这些 5(>ux@[qI:  
cd&sAK"  
运算符包括>、>=、<=、<、!>、!<和<>。 @ N@ !Q  
V8O-|7H$ v  
3、自然连接:在连接条件中使用等于(=)运算符比较被连接列的列值,但它使用选择列表指出查询 Eo`'6 3  
BhUGMK  
结果集合中所包括的列,并删除连接表中的重复列。 5yL\@7u`  
g [u*`]-;v  
例,下面使用等值连接列出authors和publishers表中位于同一城市的作者和出版社: :bq$ {  
*L&|4|BF2  
SELECT * TVZf@U  
+<T361eyY  
FROM authors AS a INNER JOIN publishers AS p <CcSChCg  
hRQw]  
ON a.city=p.city $ghlrV;:ct  
b:PzqMh{G  
又如使用自然连接,在选择列表中删除authors 和publishers 表中重复列(city和state): B un^EJ)  
'kSm}} y  
SELECT a.*,p.pub_id,p.pub_name,p.country s-4qK(ml-  
>l b9j>  
FROM authors AS a INNER JOIN publishers AS p W %1/: _  
|fB/hs \  
ON a.city=p.city l h?[wc  
6`@6k2]  
(二)外连接 mhMTn*9  
q:1n=i Ei  
内连接时,返回查询结果集合中的仅是符合查询条件( WHERE 搜索条件或 HAVING 条件)和连接条件 ~bq w!rz  
+3k.xP?QS  
的行。而采用外连接时,它返回到查询结果集合中的不仅包含符合连接条件的行,而且还包括左表(左外 k5|GN Y6a  
{t*CSI  
连接时)、右表(右外连接时)或两个边接表(全外连接)中的所有数据行。 $3S`A]xO  
9T\\hM)k  
如下面使用左外连接将论坛内容和作者信息连接起来: !S'!oinV  
8{ +KNqz  
SELECT a.*,b.* FROM luntan LEFT JOIN usertable as b cpm *m"Nk  
y5j ;Daq  
ON a.username=b.username ~J0r%P  
t~|`RMn"  
下面使用全外连接将city表中的所有作者以及user表中的所有作者,以及他们所在的城市: ?@^gpVK{  
Elt" tJ  
SELECT a.*,b.* 9+b){W  
tmQ,>   
FROM city as a FULL OUTER JOIN user as b 6s t^-L  
\('WS[$2  
ON a.username=b.username ?^ R"a##  
CHVAs9mrNB  
(三)交叉连接 [4Q;5 'Dj  
OGcW]i  
交叉连接不带WHERE 子句,它返回被连接的两个表所有数据行的笛卡尔积,返回到结果集合中的数 t:P]G>)x|  
f.c2AY~5[  
据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。 B@ >t$jK  
A>f rf[fAW  
例,titles表中有6类图书,而publishers表中有8家出版社,则下列交叉连接检索到的记录数将等 *|^|| bd  
RS|*3 $1  
于6*8=48行。 `Bb32L   
xS;tmc  
SELECT type,pub_name Z6nQW53-  
FP")$ ,=s  
FROM titles CROSS JOIN publishers Q?bC'147O  
hG}gKs  
ORDER BY type
评价一下你浏览此帖子的感受

精彩

感动

搞笑

开心

愤怒

无聊

灌水

简单生活
执著追求
别笑我浅溥,天真的以为用一腔真诚就能感动这个冷漠的世界。
也别说我幼稚,竟想用不长的人生去诠释繁杂的红尘。
然而除了真诚,我还能给你什么,的确我真的一无所有!

描述
快速回复

您目前还是游客,请 登录注册
如果您提交过一次失败了,可以用”恢复数据”来恢复帖子内容
认证码:
验证问题:
10+5=?,请输入中文答案:十五