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

[原创]SQL查询语句使用

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

一、简单查询 c{[q>@y pK  
Fq9Q+RNMZL  
简单的Transact-SQL查询只包括选择列表、FROM子句和WHERE子句。它们分别说明所查询列、查询的 zD3mX<sw  
UX]L;kI  
表或视图、以及搜索条件等。 F#|: `$ t  
,t)x{I;C)  
例如,下面的语句查询testtable表中姓名为“张三”的nickname字段和email字段。 U35AX9/  
\;rYo.+  
SELECT nickname,email 3=W!4  
9o>8o  
FROM testtable 5wUUx#  
?8W( "W   
WHERE name='张三' g#]wLm#  
@y31NH(  
(一)选择列表 waKT{5k  
$ "Bh]-  
选择列表(select_list)指出所查询列,它可以是一组列名列表、星号、表达式、变量(包括局部变 pHoEa7:  
4nAa`(62  
量和全局变量)等构成。 7}jWBK  
! ZU2{  
1、选择所有列 c$wsH25KH8  
~^+0  
例如,下面语句显示testtable表中所有列的数据: W d0NT@  
\P1=5rP  
SELECT * WoxwEi1~0  
0j C3fT!n  
FROM testtable M`6y@<  
h5yzwj:C?  
2、选择部分列并指定它们的显示次序 :UJa&$)  
wCk~CkC?  
查询结果集合中数据的排列顺序与选择列表中所指定的列名排列顺序相同。 y*MF&mQ[  
f@co<iA  
例如: %p X6QRt?  
gNGr!3*)w  
SELECT nickname,email g R nOd  
t#!yrQ..'G  
FROM testtable sZ?mP;Q  
@,XSs  
3、更改列标题 2 1PFR:lP7  
![f ![l  
在选择列表中,可重新指定列标题。定义格式为: /t-fjB{=G  
vd6l7"0/  
列标题=列名 H~ u[3LQz  
6=N`wi  
列名 列标题 :rP#I#,7w  
.CSS}4  
如果指定的列标题不是标准的标识符格式时,应使用引号定界符,例如,下列语句使用汉字显示列 Ngg?@pG0y  
K R"M/#  
标题: ~H6r.:]  
_4cvX  
SELECT 昵称=nickname,电子邮件=email <_(/X,kBK  
c)0amM  
FROM testtable \ u_ui  
z#F.xVg'  
4、删除重复行 DS|KkTy3  
S>.F_Jl  
SELECT语句中使用ALL或DISTINCT选项来显示表中符合条件的所有行或删除其中重复的数据行,默认 2Hum!p:1  
ly WwGR  
为ALL。使用DISTINCT选项时,对于所有重复的数据行在SELECT返回的结果集合中只保留一行。 ~zHg[X*  
>c-fI$]  
5、限制返回的行数 E\;ikX&1  
+/D>|loRC  
使用TOP n [PERCENT]选项限制返回的数据行数,TOP n说明返回n行,而TOP n PERCENT时,说明n是 (RtueEb.~E  
rWh6RYd<T  
表示一百分数,指定返回的行数等于总行数的百分之几。 Q?AmOo-a  
N$[$;Fm:  
例如: lg pW@g  
_bD/D!|  
SELECT TOP 2 * ~afg)[(  
ddVa.0Z!<  
FROM testtable G^"Vo x4  
KN"S?i]X  
SELECT TOP 20 PERCENT * nL:SG{7  
!`bio cA  
FROM testtable ,7XtH>2s  
SR*wvQnOx  
(二)FROM子句 ?|e'Gbb_  
(Z5##dS3  
FROM子句指定SELECT语句查询及与查询相关的表或视图。在FROM子句中最多可指定256个表或视图, @E.k/G!~Nb  
1 y}2+Kk  
它们之间用逗号分隔。 ! Q<>3 xZ  
"7>>I D  
在FROM子句同时指定多个表或视图时,如果选择列表中存在同名列,这时应使用对象名限定这些列 f&D]anf33  
8}w6z7e|{  
所属的表或视图。例如在usertable和citytable表中同时存在cityid列,在查询两个表中的cityid时应 q.2(OP>(  
kF7V.m/~o  
使用下面语句格式加以限定: mJB2)^33a  
 fI\9\x  
SELECT username,citytable.cityid ^`f*'Z  
4 g. bR  
FROM usertable,citytable 1009ES7*  
 'Pvm8t  
WHERE usertable.cityid=citytable.cityid - y9>;6  
n}xhW'3hU=  
在FROM子句中可用以下两种格式为表或视图指定别名: ?OdJqw0,G  
>u%]6_[  
表名 as 别名 PCnQ_A-Q  
PM":Vd/  
表名 别名 a{Esw`  
;IK[Y{W/  
例如上面语句可用表的别名格式表示为: Jx#k,Z4  
v+"rZ  
SELECT username,b.cityid '&;yT[  
!6&W,0<  
FROM usertable a,citytable b `MP|Ovns:H  
fA48(0p  
WHERE a.cityid=b.cityid fri0XxF  
mW%?>Z1=>d  
SELECT不仅能从表或视图中检索数据,它还能够从其它查询语句所返回的结果集合中查询数据。  htY=w}>  
C6_@\&OA  
例如: _if|TFw;h  
{2`=qt2  
SELECT a.au_fname+a.au_lname }6 5s'JB  
NrDi   
FROM authors a,titleauthor ta @5) 8L/[l  
xyr+_k-x&q  
(SELECT title_id,title (wmBjQ]B<  
wiX~D  
FROM titles 9{j66  
,%bhyww<  
WHERE ytd_sales>10000 U=sh[W  
i~J;G#b  
) AS t YGc^h(d  
^% Q|s#w.  
WHERE a.au_id=ta.au_id h;lirvO|  
*b}>cn)<v  
AND ta.title_id=t.title_id (yo;NKq,@  
<ktzT&A  
此例中,将SELECT返回的结果集合给予一别名t,然后再从中检索数据。 )x#5Il H  
]<DNo&fw  
(三)使用WHERE子句设置查询条件 9]$8MY   
,D6v4<jh  
WHERE子句设置查询条件,过滤掉不需要的数据行。例如下面语句查询年龄大于20的数据: m\ /(w_/?  
R6 XuA(5  
SELECT * =rPrPb  
Kt>X3m,  
FROM usertable "x'),  
h  x6;YV  
WHERE age>20 !S%6Uzsj  
&p<(_|Af  
WHERE子句可包括各种条件运算符: BcA31%  
+5v}q.:+  
比较运算符(大小比较):>、>=、=、<、<=、<>、!>、!< #$vRJ#S}U  
&@"]+33  
范围运算符(表达式值是否在指定的范围):BETWEEN…AND… hM@\RPsY  
G)>W'yxQ  
NOT BETWEEN…AND… }2)DPP:ic  
5sde  
列表运算符(判断表达式是否为列表中的指定项):IN (项1,项2……) KRsAv^']  
I>h<b_y  
NOT IN (项1,项2……) y?[snrK G  
nD" ~?*Lt  
模式匹配符(判断值是否与指定的字符通配格式相符):LIKE、NOT LIKE V@=V5bZLs  
%,b X/!  
空值判断符(判断表达式是否为空):IS NULL、NOT IS NULL #y]3LC#)^G  
yj@tV2  
逻辑运算符(用于多条件的逻辑连接):NOT、AND、OR M4Z@O3OI E  
5H,G-  
1、范围运算符例:age BETWEEN 10 AND 30相当于age>=10 AND age<=30 (B>Zaro#  
0@1:M  
2、列表运算符例:country IN ('Germany','China') ZA#y)z8!E  
wN37zPnV~  
3、模式匹配符例:常用于模糊查找,它判断列值是否与指定的字符串格式相匹配。可用于char、 DJh&#b  
!a1i Un9  
varchar、text、ntext、datetime和smalldatetime等类型查询。 /7$mxtB5%L  
t qOi x/  
可使用以下通配字符: e1 *__'  
&A!KJ.  
百分号%:可匹配任意类型和长度的字符,如果是中文,请使用两个百分号即%%。 F>|9 52  
guN4-gGDr<  
下划线_:匹配单个任意字符,它常用来限制表达式的字符长度。 KiLvI,9y  
yeD_j/  
方括号[]:指定一个字符、字符串或范围,要求所匹配对象为它们中的任一个。 p}]q d4j  
}\v^+scD  
[^]:其取值也[] 相同,但它要求所匹配对象为指定字符以外的任一个字符。 7x.%hRk  
dhRJg"vrQ  
例如: 0rMqWP  
G2mNm'0  
限制以Publishing结尾,使用LIKE '%Publishing' <z#BsnjW{  
>L2*CV3p  
限制以A开头:LIKE '[A]%' <Mgf]v.QS  
||TtNH  
限制以A开头外:LIKE '[^A]%' 4 9w=kzo  
3 %(Y$8U  
4、空值判断符例WHERE age IS NULL rb_Z5T  
+h[e0J|v{  
5、逻辑运算符:优先级为NOT、AND、OR 5S/>l_od$2  
G_oX5:J*  
(四)查询结果排序 MUof=EJg>u  
ZW ye> ]  
使用ORDER BY子句对查询返回的结果按一列或多列排序。ORDER BY子句的语法格式为: XK3]AYH  
e&J3N  
ORDER BY {column_name [ASC|DESC]} [,…n] {Qtq7q.  
&zN@5m$k;  
其中ASC表示升序,为默认值,DESC为降序。ORDER BY不能按ntext、text和image数据类型进行排 < tQc_  
%<U{K;  
序。 .Vx|'-u  
GEE ]Kr  
例如: dXP6"V@iI  
9={N4}<  
SELECT * u7k|7e=xk  
Jirct,k  
FROM usertable 4]6Qr  
&G{2s J5{  
ORDER BY age desc,userid ASC  {;RF  
^tE_LL+ji|  
另外,可以根据表达式进行排序。 ZH-5 Qy_  
*caLN,G  
  M'u=H  
,RK3eQ  
二、联合查询 g3rRhS  
ltEF:{mLe#  
UNION运算符可以将两个或两个以上上SELECT语句的查询结果集合合并成一个结果集合显示,即执行联 {'IFWD.5  
{% F`%_{"  
合查询。UNION的语法格式为: npj/7nZj  
##~!M(c  
select_statement fNxw&ke8&  
yisLypM*  
UNION [ALL] selectstatement w`#fH  
nYov>x]  
[UNION [ALL] selectstatement][…n] [ _%,6e+  
rbh[j@s@  
其中selectstatement为待联合的SELECT查询语句。 zUQe0Gc.b^  
]C)|+`XE@  
ALL选项表示将所有行合并到结果集合中。不指定该项时,被联合查询结果集合中的重复行将只保留一 t-lv|%+8  
:Y.e[@!1x  
行。 vXubY@k2  
1l]C5P}E  
联合查询时,查询结果的列标题为第一个查询语句的列标题。因此,要定义列标题必须在第一个查询语  4Iq5+Q  
4$i}Xk#3  
句中定义。要对联合查询结果排序时,也必须使用第一查询语句中的列名、列标题或者列序号。 6F ;Or  
LVmY=d>  
在使用UNION 运算符时,应保证每个联合查询语句的选择列表中有相同数量的表达式,并且每个查询选 N*1  
*tG11gR,&  
择表达式应具有相同的数据类型,或是可以自动将它们转换为相同的数据类型。在自动转换时,对于数值类 J 9a $AU*  
{5 Kz'FT  
型,系统将低精度的数据类型转换为高精度的数据类型。 Qtnv#9%Vi  
EW;1`x  
在包括多个查询的UNION语句中,其执行顺序是自左至右,使用括号可以改变这一执行顺序。例如: ;.0LRWcJ  
3uO8v{`  
查询1 UNION (查询2 UNION 查询3) [0op)Kn  
a 2Et,WA%  
  a>(~C'(<  
N?^_=KE@  
  .D3`'K3t{[  
^N{X "  
三、连接查询 ++k J\N{  
]-EN/V  
通过连接运算符可以实现多个表查询。连接是关系数据库模型的主要特点,也是它区别于其它类型 _Y7:!-n}   
x:C@)CAr  
数据库管理系统的一个标志。 !OQuEJR  
EOQaY  
在关系数据库管理系统中,表建立时各数据之间的关系不必确定,常把一个实体的所有信息存放在 w 06gY  
Fo LDMx(  
一个表中。当检索数据时,通过连接操作查询出存放在多个表中的不同实体的信息。连接操作给用户带 '8={ sMy  
Fva]*5  
来很大的灵活性,他们可以在任何时候增加新的数据类型。为不同实体创建新的表,尔后通过连接进行 &[)D]UL  
9F)W19i.  
查询。 h/9Sg*k  
XC}1_VWs  
连接可以在SELECT 语句的FROM子句或WHERE子句中建立,似是而非在FROM子句中指出连接时有助于 :3gFHBFDj  
(k#t }B[  
将连接操作与WHERE子句中的搜索条件区分开来。所以,在Transact-SQL中推荐使用这种方法。 * 2%oZX F  
fr]Hc+7  
SQL-92标准所定义的FROM子句的连接语法格式为: UhBz<>i;!  
'v+96b/;  
FROM join_table join_type join_table /=- h:0{M  
]]3Q*bq4  
[ON (join_condition)] X_!$Pk7ma  
_;V YFs  
其中join_table指出参与连接操作的表名,连接可以对同一个表操作,也可以对多表操作,对同一 .Map   
K_FBy  
个表操作的连接又称做自连接。 a^x  0 l  
@QX4 \  
join_type 指出连接类型,可分为三种:内连接、外连接和交叉连接。内连接(INNER JOIN)使用比 5 Af?Yxv  
v'$ykZ!Z  
较运算符进行表间某(些)列数据的比较操作,并列出这些表中与连接条件相匹配的数据行。根据所使用 uAQg"j  
3m~U(yho  
的比较方式不同,内连接又分为等值连接、自然连接和不等连接三种。 (Y>U6  
) _ #T c  
外连接分为左外连接(LEFT OUTER JOIN或LEFT JOIN)、右外连接(RIGHT OUTER JOIN或RIGHT JOIN) |/t K-c6J  
JQr36U  
和全外连接(FULL OUTER JOIN或FULL JOIN)三种。与内连接不同的是,外连接不只列出与连接条件相匹 >["Kd.ye  
"|\94  
配的行,而是列出左表(左外连接时)、右表(右外连接时)或两个表(全外连接时)中所有符合搜索条件的 3} l;  
Mi;Tn;3er  
数据行。 . *Z#cq0  
;wp W2%&  
交叉连接(CROSS JOIN)没有WHERE 子句,它返回连接表中所有数据行的笛卡尔积,其结果集合中的 0x6@{0  
}:"R-s  
数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。 ELD +:b  
P0Aas)!  
连接操作中的ON (join_condition) 子句指出连接条件,它由被连接表中的列和比较运算符、逻辑 83X/"2-K  
75PS^5T,  
运算符等构成。 oX2r?.j#M  
)y5iH){ !  
无论哪种连接都不能对text、ntext和image数据类型列进行直接连接,但可以对这三种列进行间接 FmR\`yY_,  
lej^gxj/2  
连接。例如: Wl?<c uw00  
`dP? 2-Z  
SELECT p1.pub_id,p2.pub_id,p1.pr_info )~G8 LZ  
hg!x_Eq|  
FROM pub_info AS p1 INNER JOIN pub_info AS p2 "NlRSc#  
$F<%Jl7_Z  
ON DATALENGTH(p1.pr_info)=DATALENGTH(p2.pr_info) qP@L(_=g  
~y`Pwj  
(一)内连接 %jpH:-8'2  
%OTQRe:  
内连接查询操作列出与连接条件匹配的数据行,它使用比较运算符比较被连接列的列值。内连接分 BR%{bY^ 5p  
0VG^GKmx  
三种: &#$2;-q8+  
Xk;Uk[  
1、等值连接:在连接条件中使用等于号(=)运算符比较被连接列的列值,其查询结果中列出被连接 vxF:vI# @  
^9n}-Cqeq  
表中的所有列,包括其中的重复列。 P: jDB{  
&qG? [R{  
2、不等连接: 在连接条件使用除等于运算符以外的其它比较运算符比较被连接的列的列值。这些 |YJ$c @  
rUGZjLIGqz  
运算符包括>、>=、<=、<、!>、!<和<>。 ]U#JsMS  
6_x}.bkIx=  
3、自然连接:在连接条件中使用等于(=)运算符比较被连接列的列值,但它使用选择列表指出查询 3{I=.mUUm  
wrhBH;3  
结果集合中所包括的列,并删除连接表中的重复列。 &`-_)~5]  
5^bh.uF  
例,下面使用等值连接列出authors和publishers表中位于同一城市的作者和出版社: 3KB| NS  
V,`!rJ  
SELECT * ~D$#>'C#  
9T?~$XlX  
FROM authors AS a INNER JOIN publishers AS p wA{*W>i  
LNWqgIq  
ON a.city=p.city {H/8#y4qp&  
V}j %gy`  
又如使用自然连接,在选择列表中删除authors 和publishers 表中重复列(city和state): NU BpIx&  
5+o 2 T]  
SELECT a.*,p.pub_id,p.pub_name,p.country VZAuUw+M  
xzuPie\  
FROM authors AS a INNER JOIN publishers AS p gF$1wV]e  
!k4 }v'=  
ON a.city=p.city AEiWL.*.  
i/l!Cr2  
(二)外连接 Pm;x]Aj  
-9hp+0 <  
内连接时,返回查询结果集合中的仅是符合查询条件( WHERE 搜索条件或 HAVING 条件)和连接条件 &Xj{:s#  
5)h+(u C3  
的行。而采用外连接时,它返回到查询结果集合中的不仅包含符合连接条件的行,而且还包括左表(左外 \H},ou U  
B4PW4>GF  
连接时)、右表(右外连接时)或两个边接表(全外连接)中的所有数据行。 g/fp45s  
ly9x1`?$  
如下面使用左外连接将论坛内容和作者信息连接起来: m T>b ;  
q}wl_ku9+  
SELECT a.*,b.* FROM luntan LEFT JOIN usertable as b f>.` xC{  
DKe6?PG  
ON a.username=b.username aUsul'e;M  
7O;BS}Lv=  
下面使用全外连接将city表中的所有作者以及user表中的所有作者,以及他们所在的城市: *##QXyyg  
*C[4 (DmB  
SELECT a.*,b.* ez{P-qB  
Lg\8NtP   
FROM city as a FULL OUTER JOIN user as b #RCZA4>  
gPF}aaB6  
ON a.username=b.username Nv}U/$$S  
)*q7pO\cty  
(三)交叉连接 &<\4q  
IBn'iE[>  
交叉连接不带WHERE 子句,它返回被连接的两个表所有数据行的笛卡尔积,返回到结果集合中的数 TyxU6<>4J4  
(CKhY~,/u  
据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。 Vu_7uSp,)  
My'9S2Y8nv  
例,titles表中有6类图书,而publishers表中有8家出版社,则下列交叉连接检索到的记录数将等 ^K1~eb*K  
3:l:~Vn  
于6*8=48行。 5?#OR!N  
jV(xYA3  
SELECT type,pub_name 1R^XWAb  
nsM>%+o  
FROM titles CROSS JOIN publishers ze#rYNvo/  
Ngm O0H  
ORDER BY type
评价一下你浏览此帖子的感受

精彩

感动

搞笑

开心

愤怒

无聊

灌水

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

描述
快速回复

您目前还是游客,请 登录注册
温馨提示:欢迎交流讨论,请勿纯表情、纯引用!
认证码:
验证问题:
10+5=?,请输入中文答案:十五