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

[原创]SQL查询语句使用

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

一、简单查询 DK&J"0jz,  
1Xt% O86  
简单的Transact-SQL查询只包括选择列表、FROM子句和WHERE子句。它们分别说明所查询列、查询的 [$]vi`c2  
d;9 X1`"  
表或视图、以及搜索条件等。 QOEcp% 6I}  
a*NcL(OC  
例如,下面的语句查询testtable表中姓名为“张三”的nickname字段和email字段。 6N:fq  
PR{?l  
SELECT nickname,email d"Hh9O}6  
U8?QyG 2A  
FROM testtable ; @-7'%(C  
2ME3=C  
WHERE name='张三' PE|_V  
d>)*!l2,C  
(一)选择列表 4rc4}Yu,JI  
STL_#|[RM  
选择列表(select_list)指出所查询列,它可以是一组列名列表、星号、表达式、变量(包括局部变 Q~#udEajI  
5pI2G  
量和全局变量)等构成。 `3SY~&X  
7z)Hq./3@  
1、选择所有列 BE:HO^-.1  
w8kp6_i'  
例如,下面语句显示testtable表中所有列的数据: 7\rz*  
=\ iV=1iB  
SELECT * 6^s=25>p  
vR3'B3y  
FROM testtable 5<GC  
- ~T LI&[  
2、选择部分列并指定它们的显示次序 7d]}BLpjWz  
:xm, Ok  
查询结果集合中数据的排列顺序与选择列表中所指定的列名排列顺序相同。 +tkDT@ `  
,sn ?V~)  
例如: x}i:nLhL  
\&`S~cV9  
SELECT nickname,email b/Z=FS2T  
t`o-HWfS.  
FROM testtable xD,BlDV  
0ym>Hbax)  
3、更改列标题 B4r4PSB>!  
R^<li;Km  
在选择列表中,可重新指定列标题。定义格式为: CbVUz<  
MVs@~=  
列标题=列名 xJa  
0g,;Yzm  
列名 列标题 Nj5Mc>_   
'mXf8   
如果指定的列标题不是标准的标识符格式时,应使用引号定界符,例如,下列语句使用汉字显示列 3u^U\xB  
yJ c#y   
标题: 5(^&0c>P  
b<P9@h~:  
SELECT 昵称=nickname,电子邮件=email Q.>@w<[!L  
B?`Gs^Y {z  
FROM testtable O[U^{~iM  
75u/'0~5  
4、删除重复行 mQhI"3! f  
}Ry:})  
SELECT语句中使用ALL或DISTINCT选项来显示表中符合条件的所有行或删除其中重复的数据行,默认 S4aN7.'Q  
7;jwKA;k  
为ALL。使用DISTINCT选项时,对于所有重复的数据行在SELECT返回的结果集合中只保留一行。 Kp'_lKW)]q  
2%'{f  
5、限制返回的行数 <La$'lG4J  
-hiG8%l5  
使用TOP n [PERCENT]选项限制返回的数据行数,TOP n说明返回n行,而TOP n PERCENT时,说明n是 n#Q;b Sw  
O; 7`*}m  
表示一百分数,指定返回的行数等于总行数的百分之几。 3s<~}&"  
zt/b S/  
例如: p#wQW[6  
(/Lo44wT  
SELECT TOP 2 * W,9. z%  
$l@nk@  
FROM testtable e;GLPB   
c Owa^;  
SELECT TOP 20 PERCENT * RSC^R}a5  
<^c?M[ j  
FROM testtable y[:\kI  
:hr% 6K7  
(二)FROM子句 dl mF?N|EC  
%4|*  
FROM子句指定SELECT语句查询及与查询相关的表或视图。在FROM子句中最多可指定256个表或视图, gHpA@jdC*  
18f!k  
它们之间用逗号分隔。 : W6`{Z  
hO w  
在FROM子句同时指定多个表或视图时,如果选择列表中存在同名列,这时应使用对象名限定这些列 S.pL^Ru  
ecDni>W  
所属的表或视图。例如在usertable和citytable表中同时存在cityid列,在查询两个表中的cityid时应 V9&7K65-1  
kU{+@MA;  
使用下面语句格式加以限定: @E;'Ffo  
Tw *:Vw  
SELECT username,citytable.cityid mSF>~D1_  
VW:WB.K$  
FROM usertable,citytable 0tyoH3o/d  
z SDRZ!  
WHERE usertable.cityid=citytable.cityid 4r&DW'  
Hof@,w  
在FROM子句中可用以下两种格式为表或视图指定别名: meey5}  
)c!7V)z  
表名 as 别名 "HX,RJ @^K  
qM= $,s*  
表名 别名 y (@j;Q3(r  
7DZxr Vw  
例如上面语句可用表的别名格式表示为: %Xc50n2Z  
sQUJ]h  
SELECT username,b.cityid qWX%[i%  
7iMBDkb7  
FROM usertable a,citytable b nX~Qt%  
ntR@[)K  
WHERE a.cityid=b.cityid _/(DEF+G  
TgMa! Vz  
SELECT不仅能从表或视图中检索数据,它还能够从其它查询语句所返回的结果集合中查询数据。 g@0<`g  
HY-7{irR~  
例如: ZeM~13[  
cq:<,Ke  
SELECT a.au_fname+a.au_lname zG-pqE6  
fy9mS  
FROM authors a,titleauthor ta _ 3@[S F  
`o/G0~T)  
(SELECT title_id,title m}Xb#NAF8  
DEJ0<pnQr  
FROM titles p[oR4 HWr  
<L'!EcHm%]  
WHERE ytd_sales>10000 1g_p`(  
5&A{IN  
) AS t )gF>nNE  
h,-2+}  
WHERE a.au_id=ta.au_id = VIU  
4`E[ WE:Q  
AND ta.title_id=t.title_id t&|M@Ouet  
XBx&&  
此例中,将SELECT返回的结果集合给予一别名t,然后再从中检索数据。  -c%#Hd  
,~8&0p  
(三)使用WHERE子句设置查询条件 P:D@ 5  
WxPu{N  
WHERE子句设置查询条件,过滤掉不需要的数据行。例如下面语句查询年龄大于20的数据: *^[m?3"W  
D+4oV6}~  
SELECT * Yr!@pHy  
xXb7/.*qE  
FROM usertable B ]*v{?<W  
M2Q*#U>6r  
WHERE age>20 L#huTKX}  
JG^fu*K  
WHERE子句可包括各种条件运算符: $-^ ;Jl  
LV}Z[\?   
比较运算符(大小比较):>、>=、=、<、<=、<>、!>、!< VT ikLuH  
OVq(ulwi+  
范围运算符(表达式值是否在指定的范围):BETWEEN…AND… 2/o_,k  
^*?mb)  
NOT BETWEEN…AND… QC\r|RXW  
#su R[K*S  
列表运算符(判断表达式是否为列表中的指定项):IN (项1,项2……) .+3~ w  
=Jyi9VN=&  
NOT IN (项1,项2……) 813t=A  
Rtywi}VV2  
模式匹配符(判断值是否与指定的字符通配格式相符):LIKE、NOT LIKE r0^*|+   
$Gs9"~z?;  
空值判断符(判断表达式是否为空):IS NULL、NOT IS NULL Cx~,wk;=  
ZNfQM&<d  
逻辑运算符(用于多条件的逻辑连接):NOT、AND、OR 6(pa2  
0*J},#ba$  
1、范围运算符例:age BETWEEN 10 AND 30相当于age>=10 AND age<=30 1&Z#$iD  
] 6Y6q])Z  
2、列表运算符例:country IN ('Germany','China') x)+ q$FB  
fEJF3<UF&  
3、模式匹配符例:常用于模糊查找,它判断列值是否与指定的字符串格式相匹配。可用于char、 y':JUwUN  
wXR7Ifrv  
varchar、text、ntext、datetime和smalldatetime等类型查询。 "udA-;!@&  
t,w'w_C  
可使用以下通配字符: '@6O3z_{  
R6m6bsZ`  
百分号%:可匹配任意类型和长度的字符,如果是中文,请使用两个百分号即%%。 "!S7D >2y#  
R1cOUV,y[/  
下划线_:匹配单个任意字符,它常用来限制表达式的字符长度。 )L+>^cJI<  
J;DTh ]z?:  
方括号[]:指定一个字符、字符串或范围,要求所匹配对象为它们中的任一个。 ntr&? H  
to9X2^  
[^]:其取值也[] 相同,但它要求所匹配对象为指定字符以外的任一个字符。 ,7:? Du}  
ee2k..Tq#  
例如: N({0"7  
BbIg]E/G  
限制以Publishing结尾,使用LIKE '%Publishing' #i;y[dQ  
MSqW {  
限制以A开头:LIKE '[A]%' F:~k4uTW\b  
b?U2g?lN:  
限制以A开头外:LIKE '[^A]%' ptQCqQ1_d  
#1)#W6 h\  
4、空值判断符例WHERE age IS NULL 4`Ib wg6"B  
o? LJ,Z  
5、逻辑运算符:优先级为NOT、AND、OR byJR6f  
mYx6JU*`  
(四)查询结果排序 uqHI/4  
;$Pjl8\  
使用ORDER BY子句对查询返回的结果按一列或多列排序。ORDER BY子句的语法格式为: d~abWBgC`  
)+ (GE  
ORDER BY {column_name [ASC|DESC]} [,…n] gmUX 2x(  
W0+m A  
其中ASC表示升序,为默认值,DESC为降序。ORDER BY不能按ntext、text和image数据类型进行排 ooA%/  
pgw_F  
序。 ?B32,AS@  
/{R>o0oW  
例如: S*l=FRFI  
+\x}1bNS%j  
SELECT * 2{|mL`$04<  
~ugyUpY"  
FROM usertable aY8QYK ;?^  
/Ue_1Efa  
ORDER BY age desc,userid ASC GR,gCtG+L  
&gdhq~4#  
另外,可以根据表达式进行排序。 7Z< 2`&c7  
2n3!p Z8  
  s}lp^Uh=  
+.J/7 gD  
二、联合查询 `f<&=_,xfH  
3f-J%!aH  
UNION运算符可以将两个或两个以上上SELECT语句的查询结果集合合并成一个结果集合显示,即执行联  myOdf'=  
;q33t% j  
合查询。UNION的语法格式为: TCI)L}L|  
4N(iow4  
select_statement Dqg01_O9O  
OrY^?E  
UNION [ALL] selectstatement %CV.xDE8  
rI#,FZ  
[UNION [ALL] selectstatement][…n] cU_:l.b  
duV\Kt/g^  
其中selectstatement为待联合的SELECT查询语句。 4?33t] "  
HSj=g}r  
ALL选项表示将所有行合并到结果集合中。不指定该项时,被联合查询结果集合中的重复行将只保留一 DQ.;2W  
0bfJD'^9RP  
行。 ne|N!!Dmk  
\Lg{GN.  
联合查询时,查询结果的列标题为第一个查询语句的列标题。因此,要定义列标题必须在第一个查询语 c[+uwO~  
|>/m{L[  
句中定义。要对联合查询结果排序时,也必须使用第一查询语句中的列名、列标题或者列序号。 %7A?gY81  
_/z3QG{Ea^  
在使用UNION 运算符时,应保证每个联合查询语句的选择列表中有相同数量的表达式,并且每个查询选 Hrg -5_  
19;Pjo8  
择表达式应具有相同的数据类型,或是可以自动将它们转换为相同的数据类型。在自动转换时,对于数值类 ==npFjB  
('6sW/F*ab  
型,系统将低精度的数据类型转换为高精度的数据类型。 4 3G2{  
Gt$PBlq0  
在包括多个查询的UNION语句中,其执行顺序是自左至右,使用括号可以改变这一执行顺序。例如: L2IY$+=M  
p5Wz.n.<'  
查询1 UNION (查询2 UNION 查询3) b *Ca*!  
f {j`d&|  
  ]D<3y IGS  
D+xPd<  
  }k0B   
(mgv:<c;BA  
三、连接查询 QV>hQ]L  
8SN4E  
通过连接运算符可以实现多个表查询。连接是关系数据库模型的主要特点,也是它区别于其它类型 a 9!.e rM  
v[]&yD  
数据库管理系统的一个标志。 MDauHtF,  
h\/T b8  
在关系数据库管理系统中,表建立时各数据之间的关系不必确定,常把一个实体的所有信息存放在 AP9>_0=  
oAF#bj_f  
一个表中。当检索数据时,通过连接操作查询出存放在多个表中的不同实体的信息。连接操作给用户带 3vj 1FbY  
_F`RwBOjs  
来很大的灵活性,他们可以在任何时候增加新的数据类型。为不同实体创建新的表,尔后通过连接进行 X\1.,]O >  
5Ve T8/7Q  
查询。 \# _w=gs<i  
c,Yd#nokC  
连接可以在SELECT 语句的FROM子句或WHERE子句中建立,似是而非在FROM子句中指出连接时有助于 jm0v=m7  
R6`,}<A]@  
将连接操作与WHERE子句中的搜索条件区分开来。所以,在Transact-SQL中推荐使用这种方法。 4tlLh`-8  
yk/BQ|G  
SQL-92标准所定义的FROM子句的连接语法格式为: &%;K_asV;  
~\UAxB=  
FROM join_table join_type join_table $ S]l%  
_ykT(`.#  
[ON (join_condition)] do DpTwvh  
j>)yV@g/  
其中join_table指出参与连接操作的表名,连接可以对同一个表操作,也可以对多表操作,对同一 r2=4Wx4(  
T:g=P@  
个表操作的连接又称做自连接。 P;K <P  
jg3T1ROL  
join_type 指出连接类型,可分为三种:内连接、外连接和交叉连接。内连接(INNER JOIN)使用比 ys9'1+9  
SquuK1P=  
较运算符进行表间某(些)列数据的比较操作,并列出这些表中与连接条件相匹配的数据行。根据所使用 -d *je{c |  
zRFvWOxC\  
的比较方式不同,内连接又分为等值连接、自然连接和不等连接三种。 -DWnDku8=  
CD pLV:  
外连接分为左外连接(LEFT OUTER JOIN或LEFT JOIN)、右外连接(RIGHT OUTER JOIN或RIGHT JOIN) k3UKGP1  
zh Vkn]z~*  
和全外连接(FULL OUTER JOIN或FULL JOIN)三种。与内连接不同的是,外连接不只列出与连接条件相匹 Qsg([K  
wZb7 7  
配的行,而是列出左表(左外连接时)、右表(右外连接时)或两个表(全外连接时)中所有符合搜索条件的 Qq<+QL|  
eT@, QA(3  
数据行。 k? !'OHmBL  
)KKmV6>b  
交叉连接(CROSS JOIN)没有WHERE 子句,它返回连接表中所有数据行的笛卡尔积,其结果集合中的 l~ZIv   
z K6'wL!!I  
数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。 }TG=ZVi  
=j~Xrytn  
连接操作中的ON (join_condition) 子句指出连接条件,它由被连接表中的列和比较运算符、逻辑 &6^QFqqW`-  
<nJ8%aY,  
运算符等构成。 ]] 50c  
'7UIzk|  
无论哪种连接都不能对text、ntext和image数据类型列进行直接连接,但可以对这三种列进行间接 XX'mM v  
`J-&Y2_/k  
连接。例如: %YwIR.o  
@(any ^QJ  
SELECT p1.pub_id,p2.pub_id,p1.pr_info dCO)"]  
gUrXaD#  
FROM pub_info AS p1 INNER JOIN pub_info AS p2 )BmO[AiOM  
p* tAwl  
ON DATALENGTH(p1.pr_info)=DATALENGTH(p2.pr_info) 6MmkEU z  
5^Ps(8VbS  
(一)内连接 _e$T'*q  
t{Z:N']H  
内连接查询操作列出与连接条件匹配的数据行,它使用比较运算符比较被连接列的列值。内连接分 F1NYpCR  
qHE(p+]E  
三种: ?U(`x6\:  
?btZdnQ))S  
1、等值连接:在连接条件中使用等于号(=)运算符比较被连接列的列值,其查询结果中列出被连接 #_'| TT>p#  
'<Jqp7$dL  
表中的所有列,包括其中的重复列。 qx`)M3Mu|<  
f~{4hVA  
2、不等连接: 在连接条件使用除等于运算符以外的其它比较运算符比较被连接的列的列值。这些 E\vW>g*W  
/>dYkIv  
运算符包括>、>=、<=、<、!>、!<和<>。 xnPi'?A]  
W6jdS;3  
3、自然连接:在连接条件中使用等于(=)运算符比较被连接列的列值,但它使用选择列表指出查询 ehyCAp0oI  
a$]i8AeG  
结果集合中所包括的列,并删除连接表中的重复列。 e#s-MK-Q  
ab^>_xD<  
例,下面使用等值连接列出authors和publishers表中位于同一城市的作者和出版社: $m;DwlM  
b>f{o_  
SELECT * ok(dCAKP  
Y1 *8&xT  
FROM authors AS a INNER JOIN publishers AS p Kd;)E 9Ti  
^'Qe.DW[  
ON a.city=p.city 52q<|MW%  
D0LoT?$N  
又如使用自然连接,在选择列表中删除authors 和publishers 表中重复列(city和state): tlcNGPa  
5'S~PQka*  
SELECT a.*,p.pub_id,p.pub_name,p.country {!NX u  
[6f(3|"  
FROM authors AS a INNER JOIN publishers AS p {R}Kt;L:Ut  
MT{ovDA].  
ON a.city=p.city yR[htD`  
d'2q~   
(二)外连接  _!E)a  
/Bp5^(s  
内连接时,返回查询结果集合中的仅是符合查询条件( WHERE 搜索条件或 HAVING 条件)和连接条件 ^e(*{K;8  
'ARbJ1a  
的行。而采用外连接时,它返回到查询结果集合中的不仅包含符合连接条件的行,而且还包括左表(左外 D\k'Eez  
mcq.*at  
连接时)、右表(右外连接时)或两个边接表(全外连接)中的所有数据行。 LyG&FOf?  
rvp#[RAaS}  
如下面使用左外连接将论坛内容和作者信息连接起来: [xHHm5$  
C!}t6  
SELECT a.*,b.* FROM luntan LEFT JOIN usertable as b k.!m-5E  
Z&Xp9"j,@;  
ON a.username=b.username WFG`-8_e[I  
(X~JTH:e/  
下面使用全外连接将city表中的所有作者以及user表中的所有作者,以及他们所在的城市: z65Q"A  
vY2^*3\<D  
SELECT a.*,b.* m.w.h^f$&  
y8$I=  
FROM city as a FULL OUTER JOIN user as b Sq[LwJ  
9_xJT^10  
ON a.username=b.username h Nx#x  
1s6L]&B  
(三)交叉连接 XxLauJP K  
Y|~+bKa  
交叉连接不带WHERE 子句,它返回被连接的两个表所有数据行的笛卡尔积,返回到结果集合中的数 90UZ\{">  
.A apO}{  
据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。 [(m+Ejzi%  
][1 iKT  
例,titles表中有6类图书,而publishers表中有8家出版社,则下列交叉连接检索到的记录数将等 #b94S?dq  
n 'E:uXv"  
于6*8=48行。 Qz`v0"'w  
6D/K=-   
SELECT type,pub_name ;3Z6K5z*f  
%JPBD]&M  
FROM titles CROSS JOIN publishers XB;C~:  
$u%7]]Y^\  
ORDER BY type
评价一下你浏览此帖子的感受

精彩

感动

搞笑

开心

愤怒

无聊

灌水

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

描述
快速回复

您目前还是游客,请 登录注册
批量上传需要先选择文件,再选择上传
认证码:
验证问题:
3+5=?,请输入中文答案:八 正确答案:八