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

[原创]SQL查询语句使用

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

一、简单查询 G;CB%qXI  
V.8pxD5 s  
简单的Transact-SQL查询只包括选择列表、FROM子句和WHERE子句。它们分别说明所查询列、查询的 &\_cU?0d  
KW[Jft  
表或视图、以及搜索条件等。 JL7"}^  
Wz^M*=,  
例如,下面的语句查询testtable表中姓名为“张三”的nickname字段和email字段。 1sHaG  
!KEnr`O2u  
SELECT nickname,email H |K}m,g  
]F]!>dKA  
FROM testtable 1D pRm(  
J|Xu]fg0  
WHERE name='张三' KJf~9w9U  
*k7vm%#ns  
(一)选择列表 p 7YfOUo k  
"Y7 ]t:8  
选择列表(select_list)指出所查询列,它可以是一组列名列表、星号、表达式、变量(包括局部变 BW61WH?  
:<}.3Q?&  
量和全局变量)等构成。 )^ky @V  
\>>^eZ  
1、选择所有列 3V"y|q  
8O)!{gB  
例如,下面语句显示testtable表中所有列的数据: #Ang8O@y  
oiS>:de%tc  
SELECT * N]k(8K  
@YMQbjbr  
FROM testtable M_4:~&N$  
e0#/3$\aSV  
2、选择部分列并指定它们的显示次序 g7|$JevR0  
LD~s@}yH>  
查询结果集合中数据的排列顺序与选择列表中所指定的列名排列顺序相同。 S4jt*]w5b  
fnUR]5\tc  
例如: LQnkpy3A  
SseMTw:  
SELECT nickname,email 4rh*&'  
4l2xhx  
FROM testtable CulU?-[i  
.o2]ndT/J  
3、更改列标题 B~/LAD_  
n>w/T"  
在选择列表中,可重新指定列标题。定义格式为: qX GAlCq@  
G*;}6 bj|?  
列标题=列名 $hkMJ),T~  
e*Gm()Vu,  
列名 列标题 -,;Iob56!  
zKi5e+\  
如果指定的列标题不是标准的标识符格式时,应使用引号定界符,例如,下列语句使用汉字显示列 ,u^S(vxyz  
_/W[=c   
标题: &~u=vuX  
uh~/ybR  
SELECT 昵称=nickname,电子邮件=email +G!N@O  
$>3/6(bW  
FROM testtable 93Yo }6>  
.oJs"=h:m  
4、删除重复行 5pBQ~m3  
JeR8Mb  
SELECT语句中使用ALL或DISTINCT选项来显示表中符合条件的所有行或删除其中重复的数据行,默认 Ufz& 2  
LvJ')HG  
为ALL。使用DISTINCT选项时,对于所有重复的数据行在SELECT返回的结果集合中只保留一行。 *nB fF{y  
Fr}e-a  
5、限制返回的行数 6 1= ?(Iw  
1@nGD<,.  
使用TOP n [PERCENT]选项限制返回的数据行数,TOP n说明返回n行,而TOP n PERCENT时,说明n是 i>9/vwe  
) 0x* >;"o  
表示一百分数,指定返回的行数等于总行数的百分之几。 h^P>,dy0  
JD^&d~n_  
例如: 41<.e` {  
"+REv_:  
SELECT TOP 2 * T,72I  
! af35WF  
FROM testtable qAsZ,ik  
4]N`pD5  
SELECT TOP 20 PERCENT * Ve,_;<F]S  
G .~Psw#  
FROM testtable }b+tD3+  
rO% |PRP  
(二)FROM子句 BJ3st  
V8>%$O sw  
FROM子句指定SELECT语句查询及与查询相关的表或视图。在FROM子句中最多可指定256个表或视图, p6(n\egR  
Q{Gi**<  
它们之间用逗号分隔。 DT #1*&-  
A2z%zMlZc  
在FROM子句同时指定多个表或视图时,如果选择列表中存在同名列,这时应使用对象名限定这些列 DJeP]  
Q)}sX6TB  
所属的表或视图。例如在usertable和citytable表中同时存在cityid列,在查询两个表中的cityid时应 pR8]HNY0  
,jyNV<dI  
使用下面语句格式加以限定: cO2 .gQo'  
jxL5L[  
SELECT username,citytable.cityid rUkiwqr~E  
_pQ9q&i4  
FROM usertable,citytable OGNjn9av  
or/Y"\-!  
WHERE usertable.cityid=citytable.cityid A%n l@`s,  
"k\W2,q[  
在FROM子句中可用以下两种格式为表或视图指定别名: H~+D2A  
EI2V<v  
表名 as 别名 65RWaz;|  
~130"WQ;  
表名 别名 `gy]|gS#b  
WO*YBH@  
例如上面语句可用表的别名格式表示为: JoA^9AYhR  
=^4 vz=2  
SELECT username,b.cityid i\G@kJNnF  
>Vc_.dR)E  
FROM usertable a,citytable b FsZF>vaV  
Yt2_*K@rC  
WHERE a.cityid=b.cityid NA[yT  
Zb`}/%\7  
SELECT不仅能从表或视图中检索数据,它还能够从其它查询语句所返回的结果集合中查询数据。 0X#tt`;  
a3 wUB  
例如: l%lkDh!$"  
b&p*IyJR  
SELECT a.au_fname+a.au_lname k( 1rp|qf  
nJ.p PzH2g  
FROM authors a,titleauthor ta {Q^P<  
:{%6< j  
(SELECT title_id,title =0`"T!1  
A\lnH5A  
FROM titles .Xh^L  
gKcP\m  
WHERE ytd_sales>10000 M[D`)7=b  
#\iQ`Q<B  
) AS t p+#J;.  
<r.f ?chf  
WHERE a.au_id=ta.au_id nX<!n\J T  
/s uz>o\  
AND ta.title_id=t.title_id =&xamA)  
;%odN d  
此例中,将SELECT返回的结果集合给予一别名t,然后再从中检索数据。 }8GCOY  
%Vrl"4^}t  
(三)使用WHERE子句设置查询条件 +w:[By"  
f8_5.vlw  
WHERE子句设置查询条件,过滤掉不需要的数据行。例如下面语句查询年龄大于20的数据: J6_H lt  
UL$^zR3%d  
SELECT * S *?'y  
R*/%+  
FROM usertable ;$&&tEh)  
5G'X\iR  
WHERE age>20 [G+M94[A  
zv||&Hi  
WHERE子句可包括各种条件运算符: KR%p*Nh+C  
GfD!Z3  
比较运算符(大小比较):>、>=、=、<、<=、<>、!>、!< ,;y 5Mu8  
UMpC2)5  
范围运算符(表达式值是否在指定的范围):BETWEEN…AND… M'$n".,p  
LtJ$ZE^GB  
NOT BETWEEN…AND… J1YP-:  
xV}E3Yj2#  
列表运算符(判断表达式是否为列表中的指定项):IN (项1,项2……) 5Lo{\7%  
fMlxtj+5   
NOT IN (项1,项2……) 7]@vPr;:  
@ >%I\  
模式匹配符(判断值是否与指定的字符通配格式相符):LIKE、NOT LIKE  ;iy]mPd  
m!er "0  
空值判断符(判断表达式是否为空):IS NULL、NOT IS NULL ~#h@.yW^JN  
^j[>.D  
逻辑运算符(用于多条件的逻辑连接):NOT、AND、OR y;keOI!  
e!d& #ofw|  
1、范围运算符例:age BETWEEN 10 AND 30相当于age>=10 AND age<=30 A 7'dD$9  
vo-n9Bj  
2、列表运算符例:country IN ('Germany','China') 5O#CdN-S  
|#^u%#'[2  
3、模式匹配符例:常用于模糊查找,它判断列值是否与指定的字符串格式相匹配。可用于char、 ]QJLES  
2shr&M fp[  
varchar、text、ntext、datetime和smalldatetime等类型查询。 n9<QSX&~<  
dz5a! e [  
可使用以下通配字符: pR4{}=g,  
) 2wof(  
百分号%:可匹配任意类型和长度的字符,如果是中文,请使用两个百分号即%%。 [(B A:x1  
;-~ Wfh+  
下划线_:匹配单个任意字符,它常用来限制表达式的字符长度。 Se9I1~mX  
$u|p(E:*  
方括号[]:指定一个字符、字符串或范围,要求所匹配对象为它们中的任一个。 sEt5!&  
lRi-?I| ~9  
[^]:其取值也[] 相同,但它要求所匹配对象为指定字符以外的任一个字符。 p ~J`}>yo  
-Mb nYs)  
例如: Qf6]qJa|  
9`f]Rf"  
限制以Publishing结尾,使用LIKE '%Publishing' d!{,[8&  
5u'"m<4  
限制以A开头:LIKE '[A]%' BT: =  
B'"C?d<7  
限制以A开头外:LIKE '[^A]%' vRp =L54z  
/k|y\'<  
4、空值判断符例WHERE age IS NULL X3tpW`alo  
DPw"UY:  
5、逻辑运算符:优先级为NOT、AND、OR 7FW!3~3A_  
}_u1'  
(四)查询结果排序 rbS67--]  
v T2YX5k&,  
使用ORDER BY子句对查询返回的结果按一列或多列排序。ORDER BY子句的语法格式为: cx_FtD  
p 2It/O  
ORDER BY {column_name [ASC|DESC]} [,…n] G&)A7WaC  
%Ui&SZ\  
其中ASC表示升序,为默认值,DESC为降序。ORDER BY不能按ntext、text和image数据类型进行排 lO3$V JI  
xbnx*4o0  
序。 75v 5/5zRn  
d@#!,P5 `  
例如: r" d/ 9  
kngkG|du  
SELECT * <e-9We."  
Y!c RzQ  
FROM usertable E;.<'t>  
srXGe`VL  
ORDER BY age desc,userid ASC 0ubT/  
e` Z;}& ,  
另外,可以根据表达式进行排序。 VC5LxA0{  
|Wd]:ijJ  
  hNgbHzW  
:# s 6,  
二、联合查询 MlaViw  
:IlRn`9X`  
UNION运算符可以将两个或两个以上上SELECT语句的查询结果集合合并成一个结果集合显示,即执行联 {G&*\5W  
Cj"+` C)l  
合查询。UNION的语法格式为: = Ryh@X&  
zs|R#?a=  
select_statement 2 eo]D?}  
A]L;LkEM  
UNION [ALL] selectstatement 4scY 8(1  
mz$)80ly  
[UNION [ALL] selectstatement][…n] )'3(=F$+l  
K>iM6Uv  
其中selectstatement为待联合的SELECT查询语句。 qp3J/(F  
Q%)da)0:c  
ALL选项表示将所有行合并到结果集合中。不指定该项时,被联合查询结果集合中的重复行将只保留一 z +,l"#Vv  
'X_8j` ]#  
行。 kx&Xk0F_g  
95LZG1]Rb  
联合查询时,查询结果的列标题为第一个查询语句的列标题。因此,要定义列标题必须在第一个查询语 "#1KO1@G  
E0; }e  
句中定义。要对联合查询结果排序时,也必须使用第一查询语句中的列名、列标题或者列序号。 Gu[G_^>  
jo-jPYH T  
在使用UNION 运算符时,应保证每个联合查询语句的选择列表中有相同数量的表达式,并且每个查询选 <>i+R#u{  
,Kf8T9z`  
择表达式应具有相同的数据类型,或是可以自动将它们转换为相同的数据类型。在自动转换时,对于数值类 OsL%SKs|  
4)+IO;  
型,系统将低精度的数据类型转换为高精度的数据类型。 BDkBYhz;7  
!NLvo_[Y  
在包括多个查询的UNION语句中,其执行顺序是自左至右,使用括号可以改变这一执行顺序。例如: \41)0,sEy  
:LiDJF  
查询1 UNION (查询2 UNION 查询3) Va Yu%  
p;=kH{uu  
  +1Rr kok  
j'Y"/<  
  u] U)d$|  
qD;v/,?  
三、连接查询 plx/}ah8  
)s<WG}  
通过连接运算符可以实现多个表查询。连接是关系数据库模型的主要特点,也是它区别于其它类型 gMBQtPNM  
BU:Ecchbr  
数据库管理系统的一个标志。 4:Xj-l^D  
+'['HQ)  
在关系数据库管理系统中,表建立时各数据之间的关系不必确定,常把一个实体的所有信息存放在 'uf2 nUo  
6{+_T  
一个表中。当检索数据时,通过连接操作查询出存放在多个表中的不同实体的信息。连接操作给用户带 . z$Sm  
>=~Fo)V!(V  
来很大的灵活性,他们可以在任何时候增加新的数据类型。为不同实体创建新的表,尔后通过连接进行 $FQcDo|[  
qE`:b0FT  
查询。 |3, yq^2  
`e?;vA&  
连接可以在SELECT 语句的FROM子句或WHERE子句中建立,似是而非在FROM子句中指出连接时有助于 <Hh5u~  
L+L"$  
将连接操作与WHERE子句中的搜索条件区分开来。所以,在Transact-SQL中推荐使用这种方法。 2#b<d?"  
,.oa,sku  
SQL-92标准所定义的FROM子句的连接语法格式为: 3aO;@GNJ  
<DXmZ1  
FROM join_table join_type join_table 7.$]f71z  
: _^0'ULP  
[ON (join_condition)] ~Un64M?  
E#<7\ p>  
其中join_table指出参与连接操作的表名,连接可以对同一个表操作,也可以对多表操作,对同一 bk7^%O>  
CO:*x,6au  
个表操作的连接又称做自连接。 ..jq[(;N  
?-8y4 Ex  
join_type 指出连接类型,可分为三种:内连接、外连接和交叉连接。内连接(INNER JOIN)使用比 TZh\#dp4l  
BH&/2tO%  
较运算符进行表间某(些)列数据的比较操作,并列出这些表中与连接条件相匹配的数据行。根据所使用 [_ M6/  
U~{Sa+  
的比较方式不同,内连接又分为等值连接、自然连接和不等连接三种。 D|TLTF"  
Ii~; d3.  
外连接分为左外连接(LEFT OUTER JOIN或LEFT JOIN)、右外连接(RIGHT OUTER JOIN或RIGHT JOIN) _\,rX\  
W>Mse[6`c  
和全外连接(FULL OUTER JOIN或FULL JOIN)三种。与内连接不同的是,外连接不只列出与连接条件相匹 ezcS[r  
X)Dqeb6  
配的行,而是列出左表(左外连接时)、右表(右外连接时)或两个表(全外连接时)中所有符合搜索条件的 j6tP)f^tD  
?CH?kP  
数据行。 2q"_^deI5*  
M5']sdR(l  
交叉连接(CROSS JOIN)没有WHERE 子句,它返回连接表中所有数据行的笛卡尔积,其结果集合中的 20rN,@2<  
b A)b`1lI  
数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。 .-.q3ib  
Az9X#h.vf  
连接操作中的ON (join_condition) 子句指出连接条件,它由被连接表中的列和比较运算符、逻辑 =cdh'"XN  
M4TrnZ1D}  
运算符等构成。 *he7BUO  
2;~KL-h0TK  
无论哪种连接都不能对text、ntext和image数据类型列进行直接连接,但可以对这三种列进行间接 5U0ytDZ2/(  
M0O>Ljo4RN  
连接。例如: M'\pkzx  
RRx`}E9,  
SELECT p1.pub_id,p2.pub_id,p1.pr_info 4-y6MH  
6RH/V:YY  
FROM pub_info AS p1 INNER JOIN pub_info AS p2 LIr(mB"Y0  
rW:iBq  
ON DATALENGTH(p1.pr_info)=DATALENGTH(p2.pr_info) LkaG8#m1R  
)*!1bgXQ  
(一)内连接 5\VxXiy 0  
8dc538:q}  
内连接查询操作列出与连接条件匹配的数据行,它使用比较运算符比较被连接列的列值。内连接分 q^u1z|'Z  
:tKbz nd/  
三种: PPN q:,  
PdR >;$1  
1、等值连接:在连接条件中使用等于号(=)运算符比较被连接列的列值,其查询结果中列出被连接 9U]pH%.9  
Y.E?;iS  
表中的所有列,包括其中的重复列。  q4_**  
/M 0 p_4  
2、不等连接: 在连接条件使用除等于运算符以外的其它比较运算符比较被连接的列的列值。这些 AvZXRN1:'  
SLSF <$  
运算符包括>、>=、<=、<、!>、!<和<>。 ll_}& a0G  
xYmdCf@H  
3、自然连接:在连接条件中使用等于(=)运算符比较被连接列的列值,但它使用选择列表指出查询 iNt 4>  
FnY$)o;   
结果集合中所包括的列,并删除连接表中的重复列。 ]+AAT=B<!  
MM7"a?y)  
例,下面使用等值连接列出authors和publishers表中位于同一城市的作者和出版社: o5>/}wIf  
Pfm*<,'x"[  
SELECT * 1c'79YU  
n9DbiL1{  
FROM authors AS a INNER JOIN publishers AS p fc3 Fi'^  
Ax f^hBP  
ON a.city=p.city 02,W~+d1  
'X54dXS?l  
又如使用自然连接,在选择列表中删除authors 和publishers 表中重复列(city和state): t7&Dwmck9  
+B#qu/By  
SELECT a.*,p.pub_id,p.pub_name,p.country am2a#4`  
O5O.><RP  
FROM authors AS a INNER JOIN publishers AS p F%}7cm2  
^L ]B5,} -  
ON a.city=p.city `6P?G|'   
.W$ sxVXB  
(二)外连接 x=h0Fq ,T  
0F1u W>D1  
内连接时,返回查询结果集合中的仅是符合查询条件( WHERE 搜索条件或 HAVING 条件)和连接条件 ( :iPm<  
5.dl>,  
的行。而采用外连接时,它返回到查询结果集合中的不仅包含符合连接条件的行,而且还包括左表(左外 b) Ux3PB  
BO"qD[S  
连接时)、右表(右外连接时)或两个边接表(全外连接)中的所有数据行。 |e:rYLxm:  
l/M[am  
如下面使用左外连接将论坛内容和作者信息连接起来: ! j{CuA/  
O)`Gzx*ShU  
SELECT a.*,b.* FROM luntan LEFT JOIN usertable as b T RDxT  
vnL?O8`c  
ON a.username=b.username w]F!2b!  
* .o"ZVl  
下面使用全外连接将city表中的所有作者以及user表中的所有作者,以及他们所在的城市: ?]5Ix1  
-8/JP  
SELECT a.*,b.* aV#h5s  
$,@JYLC2  
FROM city as a FULL OUTER JOIN user as b SetX#e?q~  
%P;[fJ `G  
ON a.username=b.username /~tP7<7A  
H~eGgm;p  
(三)交叉连接 ncj!KyU  
K_Re}\D  
交叉连接不带WHERE 子句,它返回被连接的两个表所有数据行的笛卡尔积,返回到结果集合中的数 lA]N04 d  
}qL~KA{&  
据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。 Mb1wYh  
R B%:h-t4  
例,titles表中有6类图书,而publishers表中有8家出版社,则下列交叉连接检索到的记录数将等 hVkO%]?  
f]]f85  
于6*8=48行。 /e(W8aszi  
FllX za)  
SELECT type,pub_name 8 ip^]  
yuv4*  
FROM titles CROSS JOIN publishers %0zS  
- zQ<Z E  
ORDER BY type
评价一下你浏览此帖子的感受

精彩

感动

搞笑

开心

愤怒

无聊

灌水

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

描述
快速回复

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