有关数据库的一些操作:

上一篇 / 下一篇  2008-12-31 15:33:40

有关数据库的一些操作:51Testing软件测试网6gB$tkw
创建表项就不说了.
3KH^ oBj-rxA4rd0CREATE TABLE Student
`Pk.nTuJ3w i%W0(Sno CHAR(5) NOT NULL UNIQUE,
:ly5rX$e t0Sname CHAR(20),51Testing软件测试网^5Y4j2G!iZu}
Ssex CHAR(1),51Testing软件测试网7g } zGC2Hk
Sage INT,
,NH.L6x#p0Sdept CHAR(15));51Testing软件测试网w5{-}~V&A^3D f
插入记录:
)T"`/{2c }!GVL.t7Of0insert into Student (Sno,Sname,Ssex,Sdept) values('aaa','mary','f','172');
hf'M+z;Y.V0删除记录:51Testing软件测试网{R&D,Dta'a9tw1n
delete from Student where Sno = 'aaa';51Testing软件测试网3e"n&i;p$mt'y+S6[4x
注:只需要删除一个主键就可以了。其他的记录会相应的删除掉。
)^5[*b,yc D.u$Z\0删除表中一个字段:
;W\k B+lv/a5N0ALTER TABLE Student DROP column Ssex; 列名;51Testing软件测试网H V+{+\g,N%x
修改表中的那一行数据:
Ze,{N9L"r^0原来的记录:51Testing软件测试网H0`7v1d%y2IRv
Sno Sname Ssex Sdept51Testing软件测试网z7[1Bx [r8W0\|/|
aaa mary f 17251Testing软件测试网Nr:VWj'?
update Student set Sname='mary1', Ssex='m' where Sno='aaa';51Testing软件测试网0c#x#o7s6Pe:y\l
修改后:
G#{f&Ug*v0Sno Sname Ssex Sdept51Testing软件测试网n X|Lr#C"m{K
aaa mary1 m 172
9pn@ PVj051Testing软件测试网,R d-cR8j a NsY
51Testing软件测试网1T`2f|cObY
desc倒叙排列:
*@'j:~%S!Th'a6\7s0建立索引:
6d3~CI'L iwu0create unique index Sno on Student(Sno);
_g0u hT&T2v;U0索引的一点好处:在查询时候比较方便,在存在的所有记录中查找一个Sno=1的时候!建立索引的表中就直接查找Sno项比较它是否=1找到后查相关的记录就比较快。没有建立索引的需要把所有信息都查找一遍,再在其中找Sno字段,再比较其值=1的相关记录。
*R:m,l,Fz051Testing软件测试网ck^JNPYRG
默认是ASC。
w/WBo W"g2d*T0按表中哪个字段倒叙排序:51Testing软件测试网,F \!K'hQWf0M/m
select * from Student order by Sno desc;51Testing软件测试网6|zp%CRPa;W
注意:要排序的字段必须是int型。
B#BRMm8Go%E'w$H051Testing软件测试网+jC;h `"Ln3~?)M,i'`
设置成自增长的字段在插入数据的时候不需要插入该字段的值:
W-cY-h@0select * from Student order by Sno desc;51Testing软件测试网$A+Bw ?,D8iJV
原来没有设置成自增长插入数据命令:51Testing软件测试网V"A;oc-e9C6O
insert into Student (Sno,Sname,Ssex,Sdept) values('aaa','mary','f','172');51Testing软件测试网 Aa/y~$w)i
将int型的Sno字段设置成自增长后
)mWd+K5O0B#T7j[0insert into Student (Sname,Ssex,Sdept) values('mary1','f','172');
8EJ2eL&}f0insert into Student (Sname,Ssex,Sdept) values('mar1y','f','172');51Testing软件测试网L|2F D5\tX [
insert into Student (Sname,Ssex,Sdept) values('ma1ry','f','172');51Testing软件测试网0Y&O!r2P[1S
insert into Student (Sname,Ssex,Sdept) values('m1ary','f','172');
9\5p+m5DpN5L*t0
Y*|M*MFd d0在表中的排序如下:51Testing软件测试网r1c bK [ EY zC
Sno Sname Ssex Sdept51Testing软件测试网~ @&~1{9U7]4k
1 mary1 f 172
bh#JAG-r1o6U3Bs02 mar1y f 172
+D)u0pmH ?:vUq03 ma1ry f 172
6o[)u|YpC04 m1ary f 172
8y};W"s-{&m,D0/*********************************************************************************51Testing软件测试网_$WK4Ln
2006.7.20
&RIMo U rr:\fL0*********************************************************************************/
{lE[-~D6H }c0查询表中记录总数:(无字段名字)
N7L6@f ]+o&o#r?`0select count() from usertable;
T1ET m$^0或:(userid 为字段名字,结果是字段的总行数)51Testing软件测试网3u#AwNDRY O z
select count(*) userid from Student;51Testing软件测试网 N[gr!c#{ |
51Testing软件测试网.Z&OKFn1r a0wR
查询字段的平均值:
5Y l/q[I7j#d,{0selecet avg(Sno) from Student;
#M,P&F%]3^0select avg(字段名)from 表名;51Testing软件测试网 FuNo0~ZM
51Testing软件测试网Q#Z+x6E \%vH~z
给出查询的字段的平均值取别名:51Testing软件测试网0M ]8UD0zw6b,\
select avg(字段名) as (别名) from (表名);
ch&r K,b0K0a`(@0
'\'d)u,Xgw]0查找指定的字段的其他字段
$XX3oD D W~R"M0select Sdept,Ssex,Sname
T.lf+IH0from Student
:^ e#s F2XpW:`0where Sno=3;
[+uKmb?[7cU @0(where Sname='mary1';或则where Sname like 'mary1';)51Testing软件测试网w$OM]t,ZP y
51Testing软件测试网y PEmrs6B.{
在between语句查询的都是在and之间的所有值而IN语句则必须是in括号里面的值.
;U$fWJ,V0select Sno,Ssex,Sname from Student where Sdept between 180 and 190;51Testing软件测试网SfH(z;P
51Testing软件测试网(FLK} Gor[2k~;v g
select Sno,Ssex,Sname from Student where Sdept in (172,190);
/_0l!u*`"S5g051Testing软件测试网v8d(r"b PJ7Z `

"E,V+geh0查询Student表中的所有的名字中的Sno和Ssex值.
n&Q+\%U9K^'](Pp&u0select Sno,Ssex from Student where Sdept >= 170 and Sname like '%%';51Testing软件测试网*_ ]Q I;b\
注:%%之间是把所有的String类型的值
1P/O5^6Sx-j%\051Testing软件测试网I j9o*I8_
51Testing软件测试网N2x TB9ED:E
51Testing软件测试网RM.BQ:ZzmP-rs
51Testing软件测试网 G4Gx`U^z
like和where条件查询
*R.x c!J UBY0select last_name,salsry,department_id from employees where last_name like 'G%' and salary>3000;51Testing软件测试网 U2z2tD }%w/CZVY

1yD&VRTD?Q0查询Student表中的所有的名字中间有mary的所有名字对应的的Sno和Ssex值.51Testing软件测试网6PJ4g9B^\7\ M0Is
select Sno,Ssex from Student where Sdept >= 170 and Sname like '%mary%';
4B!P9F9AP0注:mary1,1mary,marydsajdh,等.51Testing软件测试网0N"uHz U'E+TQ iB
51Testing软件测试网5JN u$k*E7lY)M%Lfu
注意:and or not 用的时候,and是用在连接并列条件的2个不同的字段51Testing软件测试网,rvmC%P&_
or是用在选择的2个不同的字段之间,not一般用于not in(180,190)之间.51Testing软件测试网!I8xw.[6t]T
order by 和asc|desc的一点不同:51Testing软件测试网)\:X1m&j;cG"`7FA
order by是按先进先排,desc是先进后排,asc和desc是排列顺序不一样.
}7Z"Z7w$[hXi]051Testing软件测试网%Wr-KB~ \M-P*n%N

CQ+Qv$z-@;cO051Testing软件测试网a\?H zzK
51Testing软件测试网(X;tY\\7`n
disctinct条件查询
]`P{q r8m0distinct 这个关键字来过滤掉多余的重复记录只保留一条,
@4N%n7DKZr051Testing软件测试网S0YO5sc'o}@&kM
select distinct name from table 表示将返回table表中name字段不重复的所有字段的集合。
\;y8E][7B4B%r2o0
wg)i1]uO0注:distinct必须放在开头,select id distinct name from table 是错误的!51Testing软件测试网q @R4s)[#J(tC

%Rz!l1KsI.^0-------------------------------------------------------------------------------------
/Cyqd9mx/\3q0表TEST_1:51Testing软件测试网`LM ss
id name1 name2
"?3[.u p^09 aaa 1151Testing软件测试网1x,|_$RtY
8 bbb 2251Testing软件测试网A"dmF#GH3E8E
3 ccc 33
*ZJ8?6g'q}5PwQT c?04 ccc 4451Testing软件测试网U3LzM&?H"X
5 bbb 55
-|!\F'}#a{0W06 ddd 66
p]u'f&c07 eee 77
oY _9I@m%F0-------------------------------------------------------------------------------------51Testing软件测试网 ay e)MQX*rR/T/t

&I^/k0v1x"|0I){0select distinct(name1) from test_151Testing软件测试网)ssiZS:gj
51Testing软件测试网sc#^qq%l"}h7F8hr
结果:
Fdd9r"v;[%Z0name151Testing软件测试网"zOS.G{F&I+r*YN
aaa
6W%M'F @;B k"Cm2uv0bbb51Testing软件测试网*n8Dw#M"lh:W{M
ccc
i9I;HA|tC0ddd
JvwW7B:V5tT7Fm0eee51Testing软件测试网2~"[ z6\!g:y_3Cy~ [ u
distinct这个关键字来过滤掉多余的重复记录只保留一条,但往往只用它来返回不重复记录的集合,而不是用它来返回不重记录的所有值。其原因是distinct只能返回它的目标字段,而无法返回其它字段,即上表中只能返回name1字段的所有不重复记录集合。
\K#V3hW3u5Z0
vgH1L f7d)V0-------------------------------------------------------------------------------------51Testing软件测试网8l1F3vS-HL*KJe
如果现在想查询出表test_1中所有name1不重复的id和name1字段的记录呢?51Testing软件测试网#jx } W6y |9X

U~O)U.B}0select distinct name, id from table51Testing软件测试网 z2xqN pwa
51Testing软件测试网9K S;vw#s2X} l,P
结果:51Testing软件测试网zs(i/r,qU NR
name1 id51Testing软件测试网F p/R$E,v1m;[ s
aaa 9
5D1Lw2U1Zq@P0v3c0bbb 551Testing软件测试网n%W+{h6o$P Y
bbb 8
2h d1p S*]0ccc 351Testing软件测试网t6^(k/lrvuk,a
ccc 451Testing软件测试网3^^Bl!jp\ ap
ddd 651Testing软件测试网#K7^9jL?F#FU
eee 7
u/eq)`iQ"zi%E#o051Testing软件测试网0H-Q] L7Q0A
并不是我们所想要的结果51Testing软件测试网 b0F3q1t7aY y'T5K
51Testing软件测试网Y&DJ3E1I1B P
select distinct name,id from table 作用了两个字段,也就是必须得id与name都相同的才会被排除,即返回去除table表中id和name两个字段同时相同情况下所有集合。51Testing软件测试网XauOJ4f
-------------------------------------------------------------------------------------
$JB:jr}b0xjGc051Testing软件测试网?T"Y4[;h$Kw
如果现在想查询出表test_1中所有name1不重复的所有字段的记录呢?51Testing软件测试网6hf3Jr4_M9z%f
51Testing软件测试网xZGXK
对于
-V~"M)e.xVZ^-ur%`0select * from test_1 where name1 in (select distinct name1 from tablename)51Testing软件测试网-L9H$t*P8O(|-i
等价于
(f@PLj,v+SY0select * from test_1 where name1 in ('aaa','bbb','ccc','ddd','eee')51Testing软件测试网&VKu {b|N iDC
我们很可能认为它是可行的,但实际上结果却是:51Testing软件测试网Q*s-[)]h{o

K-s+P!cZ0}H0id name1 name2
&hn&s.~ M09 aaa 1151Testing软件测试网`(gX z z*m
8 bbb 2251Testing软件测试网NL+jl5[
3 ccc 33
I_1i&lmV:~ D j04 ccc 44
4o1qr H6IU05 bbb 55
b| H#] _V? J*N06 ddd 6651Testing软件测试网SCWvM/IS
7 eee 7751Testing软件测试网uQ1J3I(?2`#NQ1x!b

w HN(h {#n8l0x,[0正确sql应该是:51Testing软件测试网!_V#e6l `%pn
select * from test_1 inner join (select min(id) as id from test_1 group by name1 order by id ) T on test_1.id = T.id51Testing软件测试网P [2Z'W*J [f T

h4L3|`]k{0min(id)或max(id)都行,order by id 可要可不要.这里用内连接实现联合查询,也可以用where语句
5z%~0o `?0
E U.l&~u!w0select * from test_1 ,(select min(id) as id from test_1 group by name1 order by id ) where test_1.id = T.id
s'N-y i(bs051Testing软件测试网:VL"U1xL|^$w qV#{
-------------------------------------------------------------------------------------51Testing软件测试网0Ry |~'Y2A

9w'K8|%^RTl0**********************************************************************************
8Z9FJ vK&[1|+Csb0联合查询
7\R0K#Z@|0**********************************************************************************51Testing软件测试网^6HjS&f8H
查询表中的各个字段的值51Testing软件测试网sh)y9VXz[%vL.h%C
select Sno,Sname,Ssex,Sdept from Student;
o;v,cdyn)u051Testing软件测试网d@*k8DXX;\xV2V)s f f
多表查询(2个表,publishtable和publishtable,给表起了别名)
a2gqgG(k)q.t yb0select u.userid,u.age,u.username,p.publishname from usertable u,publishtable p where u.userid = p.publishid;
0D H9?"u!caOIR{pa0
K6IS7}_7U0多表查询(3个表employees,departments和locations表,给表起别名)
|&M+XL1U AVO0(从多表中查询出所有姓smith的雇员的名字,所在部门以及部门所在的城市)51Testing软件测试网LaP;C%T-iZ&L
select e.first_name,e.last_name,d.department_name,l.city from employees e,departments d,locations l where e.department_id = d.department_id and d.location_id = l.location_id and e.last_name = 'smith';
Fu@G;c#Q0
?/a8K tf#i5^ly'A0
Ls s'^$V ^$|'r0***********************************************************************************
#C#\ rbh*D*@)`0联合查询
-]s[@cG {o(BgY0***********************************************************************************
J*~A;l"X3lr*]$d051Testing软件测试网-p7FnYXP)H [
等值连接51Testing软件测试网 m$hn S wq.z6y
/*将books表和表bookstype中的信息联合查询,条件是联系键相等*/51Testing软件测试网aI&cMJD
select * from books,bookstype where bookstype.typeid = books.typeid
bs7^7SN!A(sK0
l!J*b0z*oT KXB0
^uEJ4v4G}051Testing软件测试网;i-K@Mj-z uI
内连接51Testing软件测试网ip9L4H5Hbk
/*将books表和表bookstype中的信息联合查询,条件是联系键相等,和等值连接等价*/51Testing软件测试网bgx,q'\oo
select * from books inner join bookstype on books.typeid = bookstype.typeid
#Wf QUv5o&?0
w8_4K:Mi|I0左外连接
*Y9Uk^e ` L%S051Testing软件测试网$n F ]+[Tl gzC1H
/*将books表和表bookstype中的信息联合查询,包括在books表中没有和bookstype表关联的信息*/
0F;a7P d'T(ZK|0select * from books left outer join bookstype on bookstype.typeid = books.typeid51Testing软件测试网byp.[ I u"]

IM:l&PQ2uj0右外连接51Testing软件测试网oMxW E

_MTO;QV0/*将bookstype表和books表中的信息联合查询,包括在bookstype表中没有和books表关联的信息*/
`1J V9K |0select * from books right outer join bookstype on bookstype.typeid = books.typeid
!b/U2Ee7@ M3j0
!Y [J(R'}8o)w0全连接51Testing软件测试网 u$H7Qus/p`?^&bv

C@;V@a6p`0/*将bookstype表和books表中的信息联合查询,包括在books表中没有和bookstype表关联的信息以及在bookstype表中没有和books表关联的信息*/51Testing软件测试网6_)W u{*f

'yB]j0]TRI q|0select * from books full outer join bookstype on bookstype.typeid = books.typeid
/{h5Z!w8y0
:B+Urj-a2KDi051Testing软件测试网Dt k&_:N] @5i0Q|
***********************************************************************************51Testing软件测试网A;UP-ZpGq
联合查询
2xb"L*|x1`0***********************************************************************************51Testing软件测试网@8nu\9o`/y'O
多表查询应该注意的几点:
g4m,Y&v,`(P$J5[0多表查询和单表查询的不同在于多表查询在查询某个字段的时候应该带上表名
Rr ?,Z'K*f9fJY0格式是:表名.字段名,表名.字段名51Testing软件测试网7l8i5Qu\'e'Qs P
select bbs.id,bbs.name,bbs.dep,bbsr.id,bbsr.name51Testing软件测试网NkY'uU)L"yn
from bbs,bbsr
F*a)K_'}*D5\"i3CL7O0where bbs.id=bbsr.id;
'[ ?8]!v D$l1~P1[0一般的在多表查询中的表名取的麻烦用别名来代替51Testing软件测试网"g"|u u4D
如下:
0F] vH8s E3b{%D0select b.id,b.name,b.dep,c.id,c.name
&mjV.wC0from bbs as b ,bbsr as c // from bbs b,bbsr c***注意取别名也可以用空格或则用as.
"q}BW\!Y+G0where b.id=c.id;51Testing软件测试网vcl5Qm

0`eBxp*T,Z#@:?0*************************************************************************************51Testing软件测试网*~a-QE_@1z
分组查询51Testing软件测试网8jR tR]
*************************************************************************************
fX1}y$wI'}051Testing软件测试网0@I,KQ B O-_
在select 语句中可以使用group by 子句将行划分成较小的组,然后,使用聚组函数返回每一个组的汇总信息,另外,可以使用having子句限制返回的结果集。group by 子句可以将查询结果分组,并返回行的汇总信息SQLServer 按照group by 子句中指定的表达式的值分组查询结果。
2K:K3hlG;sDf0
{PM0B:M BN,T0-------------------------------------------------------------------------------------
+X4Z4} gY0分组查询一般是用来进行统计需求的,要进行分组查询必须使用group by子句或having子句,在分组统计时要用到SQL的多行存储函数。在where条件中不能使用多行存储函数.
Z.x _6@^X[0
-i M0t0c]W/tU&`;x0查询语句的select 和group by ,having 子句是聚组函数唯一出现的地方,在where 子句中不能使用聚组函数。
6B I!S*@@&ma.]R0
xSG&T [.kX ^XK'UN0在带有group by 子句的查询语句中,在select 列表中指定的列要么是group by 子句中指定的列,要么包含聚组函数.51Testing软件测试网1\UH}e*]
------------------------------------------------------------------------------------
-ts$]Q;nV1t]2MF1g'L'n051Testing软件测试网@7nf m^Q9J
51Testing软件测试网Z&uQ EK!NF!r
部门表department:
MH*A"~ J$r,}G0
oS1Mt,DKQo"G0department_id department_name51Testing软件测试网*X&P+aw+bU(q)m
10 开发部51Testing软件测试网*M QK-xmm&Q
20 测试
K(\ k/L*o9IJ030 用服部
-F7Sy4o)tT040 财务部
@2O Q3lyi6A%A050 培训部51Testing软件测试网cOY8pw&dE

1L'c(OCe.C)s1uT'A0雇员表employees:(department_id为外键)51Testing软件测试网6b/q9m w;zb

1_qj6T8ysPr0id employees_name department_id
3u^"vse9{ k#t01 cheng 10
Xm r#N,|02 zhou 50
+O0DFbj.D PMzs ^03 liguo 1051Testing软件测试网A:E&Jy:d`s
4 wang 2051Testing软件测试网~#z8\0j8E5E
5 feng 30
n&b8cJM$v{06 ling 3051Testing软件测试网#g itm{Mg%W
7 wu 20
:z8Sz6dt9cB08 tang 2051Testing软件测试网 Fy8rTK}
9 yang 40
_[UaS`$~0hU010 tan 5051Testing软件测试网 K+J-C)d3f_h`-Z
------------------------------------------------------------------------------------51Testing软件测试网A*Ul&`B"auA4m

8~ K3dmlow0按部门编号统计出表employees中的每个部门的人数(group by分组查询)
u}hO a0select department_id, count(*) from employees51Testing软件测试网"D7Tv5E.}R
group by department_id;
9q%SC Wi~3dx b.}051Testing软件测试网z6K}xC!~
显示出部门人数少于5人的部门编号以及人数( 按照department_id来分组,having count(*)<5做为限制条件 )51Testing软件测试网.xDs ~Dw
select department_id 部门号, count(*) 部门人数 from employees51Testing软件测试网(^x^2Yp/}:liN*J
group by department_id
6`Fv(uf p@0having count(*)<5;51Testing软件测试网'F R#[/x8c!UTN
--------------------------------------51Testing软件测试网 HsBI0[9CFR"?$W0Qy
(注意:having必须在group by子句的后面)51Testing软件测试网8u[QZ'g`2m&_
--------------------------------------
Ax#E1~x1PW?D0图:51Testing软件测试网Jj,]paQ(@
部门号 部门人数
8h@4H rAp([ P0------------------------------
\7` oM;D5m010 251Testing软件测试网*JIoz$G ]`2CN
20 3
'lJ.]*s5@6d030 251Testing软件测试网.h-A9nJ:dn
40 151Testing软件测试网Vkk!]e;d T.G
50 2
`.rSqHZ![7S0-------------------------------------------------------------------------------------51Testing软件测试网,xgHS D K
where子句和having子句可以同时使用,where子句是对要分组的行进行过滤,即选择要分组的行;
IU+X,C!WM8`9v0而having子句是对分组后的数据进行过滤。此时where子句必须在group by...having子句之前
!b.? M9y9KC"n(ev'm0-------------------------------------------------------------------------------------
"u am*w\0显示出所有工资大于5000,且部门人数大于5个的部门号,部门最低工资和部门人数51Testing软件测试网?9NhO+pRQ
51Testing软件测试网`zoO:YI:j8_e
select department_id 部门号(记住department_id 和部门号之间要空格), min(salary) 最低工资,count(*) 部门人数 from employees
)Gw&ph|1Ln7z a0where salary >5000
Uo#T!U7cEno0group by department_id51Testing软件测试网 P9wY;X*?OHFc k
having count(*)>5;51Testing软件测试网lu?g0f
51Testing软件测试网*M%D X%w}D4K
图:
(i q2k!r;p:VI G0--------------------------------------51Testing软件测试网)z%rF$fF(O,QS?
部门号 最低工资 部门人数51Testing软件测试网6~4Ws*\;IY4?K
80 6100 34
]o`l3\Y'O2Y0100 6800 6
O0}i8@ K"}/BWi9`0
{0Fb9JO-M0group by 按照哪个字段来排序查询,一般的group by和having一起使用,注意在查询中只能查询与group by和having有关的字段。
1Jp|J'P;G.S0--------------------------------------
:eLV ^!X{5eR_/R0
u dc(g8z w0where 子句的作用是在对查询结果进行分组前,将不符合where条件的行去掉,即在分组之前过滤数据,条件中不能包含聚组函数,使用where条件显示特定的行。51Testing软件测试网:FDn3egh9k

Ow SOH(z!s0
c(P{`~V g0having 子句的作用是筛选满足条件的组,即在分组之后过滤数据,条件中经常包含聚组函数,使用having 条件显示特定的组,也可以使用多个分组标准进行分组。
4JE${iU)K)h?0
/Q1I@1[ sQw051Testing软件测试网6p4`!niH!X$^(X

(s|v"zv8\0查询每个部门的每种职位的雇员数(待测试...)51Testing软件测试网0]dSY$m{2J
select deptno,job,count(*) from emp group by deptno,job;51Testing软件测试网l*`:v tR

X|.wdt051Testing软件测试网v{D#c"ylh9XK?
*********************************************************************************51Testing软件测试网"ox9C7FB`AY d
数据排序51Testing软件测试网0[ k-IjgY,sn4?*[
*********************************************************************************51Testing软件测试网O]j,kFn&T

1P1?2n `&e3Oa0order by子句中可以用asc(升序)和desc(降序)来完成相应的排序,默认时是按找asc(升序)。
Q%S@ [1j2Is0---------------------------------------------------------------------------------51Testing软件测试网(S!`n h&{|6JO
显示出所有工资大于5000,且部门人数大于5个的部门号,部门最低工资和部门人数,并要求按照部门人数降序排序.51Testing软件测试网Fl\r2Z}8RVH

^xEJNMh0select department_id 部门号(记住department_id 和部门号之间要空格), min(salary) 最低工资,count(*) 部门人数 from employees51Testing软件测试网V$C2y'x8Wki1vI\5w
where salary >500051Testing软件测试网|1L/N:h$H.h'|
group by department_id
&^IK Y/D"ri6d5B0having count(*)>551Testing软件测试网4n9v-H+wM'l \k
order by count(*)desc51Testing软件测试网m*|,}~6X i8?w}
-------------------------------------------------------------------51Testing软件测试网.E c!Kg/bz
(注意:当对分组查询后的结果进行排序时,order by 必须在group by之后)
Czw&y4r B0-------------------------------------------------------------------51Testing软件测试网gr\ub9w&l8^
51Testing软件测试网lQ-R K"{ A e%|y
图:
*z'a#OZ ~h S0--------------------------------------51Testing软件测试网*bQqH!WO2]
部门号 最低工资 部门人数51Testing软件测试网K{d$QY/s`:G F,y |
80 6100 34
x6Y,j#MSIe Ep0100 6800 30
4fnD/pVM'i c090 6500 2851Testing软件测试网 J5R1M/}2]Z6XD+Q-}Q
70 6300 25
:J _8J?N Md+TR*M0
1|t Qa j2q I@ N,d051Testing软件测试网ste#I g b:H

M-wg0@7R$]W&~0*******************************************************************************51Testing软件测试网I-w0e:WQ/jk{1s
子查询51Testing软件测试网 PsK*G%E9[
*******************************************************************************51Testing软件测试网Xm;rIg%b

DJ+Q?TuQ0-----------------------------------------------------------------------------------------------------51Testing软件测试网2W.jMuMRE0K D
子查询是一个在select查询中含有其他的select语句,子查询通常用在where子句中,即将一个查询结果做为查询的条件.
_,_N1Q-t/{"p0-----------------------------------------------------------------------------------------------------
sXgr,C!Y0H;G/{v0统计表employees中所有工资小于平均工资的人数
pbsO2oGu0select count(*)工资 from employees51Testing软件测试网&r*`y\%@.G M8E
where salary <51Testing软件测试网;N;BuheCZ
(select avg(salary) from employees)51Testing软件测试网3z+^Dy8q
图:
-}&` in R4K+C0----------------
#m4p ys Z ?0工资51Testing软件测试网 No Gv8~*?6q7V*E
56
f&{XA4IC049
w,HFHdE2v,u03651Testing软件测试网'`cZy\ w0Eu

!vv{d)gh0Select MIN(Salary),Manager_id
f?V[KZ4U]0from Employee
G6|%W_t"JQo0group by Manager_id
QuspQ H,M]0having MIN(Salary) >51Testing软件测试网4zTb:I5L
(Select MIN(Salary)51Testing软件测试网y \*vSZ~^}3L
From Employee51Testing软件测试网t)_Fx8gP"J[ V
where Manager_id=004);
%R:A5_a$t3A9M051Testing软件测试网 L xlMvzio ` Z*d9b
注意在多表查询中返回的值应该是一个唯一确定的值,而不应该是多中值。
\&].HPCj7d*{bK0select Employee_id,Last_name,Salary,Manager_id
t3JWap3{ZD5r0from Employee
6J#\N5pJ;tlzW6F0WHERE Salary>51Testing软件测试网fUp8\aa
(select Salary51Testing软件测试网:fM]/g2? ?w_
from Employee
#Nt?P-n I c0where Manager_id=003)51Testing软件测试网0T?B:Yy0Wh
and51Testing软件测试网N"lZIW Q
Last_name= (select Last_name51Testing软件测试网 Y x@AZ*dJu'A9x9e$U
from Employee51Testing软件测试网 NF8V e2h/xD
where Last_name like 'mary');
jub9q.v1@k-e0
WcG._.x0注意在any,or,all的区别:
r h cDnIM0Select Salary,Manager_id,Last_name,Employee_id51Testing软件测试网.sx9Hm*RY7w
from Employee51Testing软件测试网-K3S r5pf,U
where Salary < any
v9O;t3x)nO*C0(Select Salary
;d0t l o4_6Wf0From Employee
/Pa7Kx[?0where Manager_id=005);
\1}k6Y#` e,h'F0
u~xct"f7S3d,J0Select Salary
d h\{ _It1K"@'h`0From Employee51Testing软件测试网p(Y*S@fY n L+yd
where Manager_id=005;返回的是2000,250051Testing软件测试网:`&~]C,[:X:U
就是在工资中小于2000.2500其中一个就可以了,而ALL则必须是小于2000和2500其中任何一个51Testing软件测试网x:u1pH:U\ o,E @
。而or则是和and用在一起的.51Testing软件测试网8|q+fxh4P,K;{9ZG

\:k/On~K0k+L6y!J!S0******************************************************************************************
k2s T)dJ!u%l0集合运算51Testing软件测试网A7PJl5L Lr*L:tm.W
******************************************************************************************
K8q nJCfg051Testing软件测试网lpr yd7X
---------------------------------------------------------------------------------
;Oj1l\zL*F;m!L0集合运算是将2个或多个子查询结果进行(并union),交(intersect)和减(minus)51Testing软件测试网/q$@ M{1mg&L6|
---------------------------------------------------------------------------------
-c]|?)j$O0(并union):
7o*rvJ rd3^!u0select employee_id,empname from emp151Testing软件测试网3yP,s u/G)d
union51Testing软件测试网.N Af"`M.f
select employee_id,name from emp2
aUU4s2[kt0
9]C*Z'}Q#m0图:51Testing软件测试网 `x*Dx@i9n
-----------------51Testing软件测试网EDI!P{(qBC
employee_id empname
.eKg2`odW|a|X0100 king1
A*E"gHI` u01000 king251Testing软件测试网1G.]){tA\7g
1000 king3
d2fR0Qp010000 king451Testing软件测试网Y4F@A&h
100000 king551Testing软件测试网 R a _ ^pi
1000000 king6
!Y N?,EP0
Ve4g-\O$^0注:使用union,重复行只包括一个,当使用union all时将包括重复行
5`8AbD-Zc{0
Qt%jU;FJr\0交(intersect):2个或多个子查询的公共行
W2e!m'O4ke&ov"ZR!v0select employee_id,empname from emp1
jh\PL|+a-Ko0intersect
pV3Xgl o4c%r|0z0select employee_id,name from emp251Testing软件测试网%N4Hlx ` pk

(]2dJ(_};dy0减(minus):从第一个查询结果中去掉出现在第二个查询结果中的行:
w_"{'u:EO-_BDmO0select employee_id,empname from emp1
1Eic f8}{v0B0minus
n6h o(K:X&fO.c0select employee_id,name from emp251Testing软件测试网 km"fK#m n$X^V/y

5@6m,`2o)B `4\Y(j"G051Testing软件测试网2P$b'f)O4i(I_0tT8n~
*****************************************************************************************
B_A%ZDZ0视图,存储过程和触发器
;[9[,QB;q3]l4E0*****************************************************************************************51Testing软件测试网x:I LMQ@+B
51Testing软件测试网d,O ]J(}[~u6FC
创建视图:(查询数据,用于系统统计报表)
y(i!n8U#m4{tdk~ \ G0create view dept_sum_vu
D.Gb"l)Jf(I0(name,minsal,maxsal,avgsal)51Testing软件测试网2| fYUPi)^ bx3PA
as select d.department_name,min(e.salary),max(e.salary),avg(e.salary)51Testing软件测试网 q&u.V1A&s
from employees e,departments d51Testing软件测试网!g'mLB(Qz
where e.department_id = d.department_id51Testing软件测试网En kB3c1H_
group by d.department_name;51Testing软件测试网!G(u-?7r#M |l

MqhB/aY*z"KQ0存贮过程,触发器和删除外键51Testing软件测试网6{@2FyPlB1g-i

.c/gF.i+k ~Do01).存贮过程:51Testing软件测试网p\9W&wJ1I g
存贮过程的路径:打开Stored Procedures中new一个新的Stored Procedures,中间填写代码,代码如下:51Testing软件测试网R(wLtvR/X'N c}
CREATE PROCEDURE sa.bbsTest AS51Testing软件测试网 r9jO2zF` @(y xN
51Testing软件测试网}!c2iaH/wAT
select Bbsid ,content , area_id , name FROM BBs a JOIN bbs_area b51Testing软件测试网0NEe^K
on a.area_id = b.id51Testing软件测试网 }9T4HiF.ZG

&O{+tx3R3P n J"]Q0
M%` ^(HG0CREATE PROCEDURE bbsTest AS51Testing软件测试网;hV"s)G:w J
51Testing软件测试网*a jA!C/^{,x
select Bbsid ,content , area_id , name FROM BBs a JOIN bbs_area b
%Z#MEL%Dz4|'Fd Jd0on a.area_id = b.id
C*|'~J*q#m.Z0
"t*s7U{Er"y02).触发器
6y+h+T] aO#]'I)u0
!mQ!w@5J @:I0打开用户表项,点设计表,选中其中一个字段,右键task点manager triggers,在弹出的表单中写代码:
s(Vj"]m Tk2}0CREATE TRIGGER [tD_bbs_area] ON [dbo].[bbs_area]
4v*~7A5IzJ,Iev0FOR DELETE
,T8Y!d/l9[*_A?BX p0AS
'WdT8`(B"o(r0BEGIN
*p6h:oR;a"[|0DELETE rebbs51Testing软件测试网4p3qm'aUj
FROM bbs, deleted
a/HU&^"{2g`5f8I0WHERE rebbs.bbs_id = bbs.bbsid51Testing软件测试网t\N}YF bT
AND bbs.area_id = deleted.id51Testing软件测试网7fvHC r!O

4d cR+TO0DELETE bbs
ON2Zk8|Y;Y1]$mZ0FROM deleted51Testing软件测试网;R|e(t.VL["dU
WHERE bbs.area_id = deleted.id51Testing软件测试网nXuq+X!m

zbK O"~x6w,N0END51Testing软件测试网 Dr)K,`gj5]&Ff)fW
51Testing软件测试网;YXp(e_
3).删除外键51Testing软件测试网2l y8V hc
打开用户表项,点设计表,选中其中一个字段,右键relationships,在弹出的主键和外键中选择就可以了.51Testing软件测试网Mz)l/Gms
删除外键,需要先删除主键表里面的有关外键的字段,再来删除外键的有关字段.

TAG:

引用 删除 Aaron2017   /   2009-07-25 14:25:33
不错
 

评分:0

我来说两句

日历

« 2024-04-27  
 123456
78910111213
14151617181920
21222324252627
282930    

数据统计

  • 访问量: 4935
  • 日志数: 7
  • 建立时间: 2008-12-31
  • 更新时间: 2010-02-22

RSS订阅

Open Toolbar