sql复杂查询语句的使用
############################复杂查询语句的使用#####################################
n,B9d| Vd@$]r0 1.查询语句的使用
_%e+D-Nk J$W4L0 使用 select语句和子查询(subquery)可以从一个或多个表,视图,实体试图中返回数据.
0Cqi"W\�~�^ ?6rul,|0 51Testing软件测试网~:X T.j+^o_
1.1相关子查询
6wO[E~O^0 可以将子查询(as subquery)或in或exists当成where的一个条件的一部分,这样的查询称为子查询
%s~2`!U)E2D0 .where中可以包含一个select语句的子查询
2Xn#s!L0w0 .where中可以包含in,exists语句
:[3\#a%W#hvBt9{_7l0 .最多可以嵌套16层
Gad9s5M7e/v v:{0 .层次过多会影响性能51Testing软件测试网 fmZ\c-K ?t
[例]简单子查询实例51Testing软件测试网P%g4AF,?Q9P
查询是否有的专家既以研究所的名义来申请基金项目,又以大学系为单位申请项目
#k'|y]%PP0 (按规定只能以一个单位来申请)
f1gY(b7Gz*lY}R0 SQL> create table univ_subject51Testing软件测试网)~O,n5r N?BX
2 (51Testing软件测试网eA/K2D)fo%aR:J+F
3 name varchar2(12) not null,
*] k-Xn@h0 4 per_id number not null,51Testing软件测试网+E!u5{Al2K
5 dept_name varchar2(20) 51Testing软件测试网U4Wf:j'HWQ)?
6 );
[3Uf�\mgN0 SQL> insert into univ_subject values('gaoqianjing',1001,'信息工程系');
2}Y-V)@5T6d'u0 SQL> insert into univ_subject values('wangbing',1002,'物理系');
8Y_c.W�?EW`0 SQL> insert into univ_subject values('liming',1003,'化学系');51Testing软件测试网4kXHj+w3I { s
===============51Testing软件测试网a*m'jv m9k
SQL> create table colle_subject
v'AaT(y2`3x;W0 2 (
NpG#LR!D:v0 3 colle_name varchar2(20),
(D WQ2T*^A7_Wq0 4 per_id number51Testing软件测试网?O8g#?L u3CD;km+u
5 );51Testing软件测试网E Hv[#v
SQL> insert into colle_subject values('电子研究所',1001);
o-e4M+k aL Y*Bml0 SQL> insert into colle_subject values('物理研究所',1005);51Testing软件测试网7yzz;U~ d-L
================
yQ,JTv|)l0 SQL> select name,per_id,dept_name from univ_subject where per_id in51Testing软件测试网|+X8zQ"N6A*U
2 (select per_id from colle_subject); 51Testing软件测试网;W'z$A2mj4V
51Testing软件测试网0Z4y z:sQ/x^@:X?
NAME PER_ID DEPT_NAME
8a @/lj({ E0 ------------ --------- --------------------51Testing软件测试网,\Z$gRR5A_
gaoqianjing 1001 信息工程系 51Testing软件测试网s gk2}K1q
%M#O]H)p;~ y0 1.2外连接51Testing软件测试网)Si)c.~mId
[例]外连接实例51Testing软件测试网*l,P|va(e
招生中所有学生的信息放在students表中,而部分有特长的学生在另一个表中stuent_skill中同样有该学生51Testing软件测试网'` A,o:h K
的信息。现在要全部列出所有学生,如果某个学生在表student_skill中就有其特长信息,并显示特长信息,如果51Testing软件测试网#t@.A&|&mw
某个学生没有特长就显示特长问空.51Testing软件测试网-dO6K~](x
SQL> create table students
/iPix Z+dw$\0 2 (
"akM.CV3H+M0 3 st_id varchar2(20),51Testing软件测试网z8`7K:Vez`
4 name varchar2(10),51Testing软件测试网-v$qr?!wX2ni,o
5 age number(2),51Testing软件测试网!Q%j\BGn
6 tol_score number(3)
|h]Os9n�f0 7 ) ;
4u#w9OC*GI C:T;\eo4?0 SQL> insert into students values('973231','wangbindu',22,501);
%lI%|U;D{oUI2E5K0 SQL> insert into students values('973232','zhuzhijing',21,538);51Testing软件测试网;lN;h!J'jq1F(j-s
SQL> insert into students values('973233','gaojing',21,576);51Testing软件测试网A9[8ZJ;E@
=================== 51Testing软件测试网4r:}"^3OqF!V@
1WQ h)X#Wx0 SQL> create table student_skill
j\]p)QHL0 2 (
A){O5gC0 3 st_id varchar2(20),51Testing软件测试网bzp_lP%z
4 skill varchar2(20)
jf7c] V6FCEwxt0 5 );51Testing软件测试网$b!VLY4x{
SQL> insert into student_skill values('973231','篮球');
4@PP)eg6K6t)J3Xo8|0 SQL> insert into student_skill(st_id) values('973232');
Gr+bN{|ZATV0 SQL> insert into student_skill values('973233','足球');51Testing软件测试网9Hz;H)h#p${
=================== 51Testing软件测试网#E5O(KLq6U{
N&XD*q2nr2hu�o&h1O'e0 SQL> select a.* , b.skill from students a,student_skill b where a.st_id=b.st_id(+)
3\'~U/r.@3GQ'@0 order by a.st_id;
8Z,K]`qmH-U0
;z1l9j%LY,d;cd&}0 ST_ID NAME AGE TOL_SCORE SKILL
AB[*z-H ^+K2C M r0 -------------------- ---------- --------- --------- ------------------ --
Y*iS0I5f"Z0 973231 wangbindu 22 501 篮球
'v,pd8P-O$O gG/`0 973232 zhuzhijing 21 538
_'[B1m#}9QI0 973233 gaojing 21 576 足球
j8X�mF7maQ2A}T0
IGb.l�xP U0 1.3自我连接51Testing软件测试网4Y2a%w�Af&}$sX5v
自我连接是在同一个表或视图内进行条件连接.
&h-LMPW8kUzo+O}D0 [例]自我连接实例51Testing软件测试网5SV ^i&iz3a
查询每个雇员的名字和该雇员的经理的名字:51Testing软件测试网u!I q8Ql
SQL> select e1.ename||' work for '||e2.ename "Employees and their Managers"
9|6a(Z#j `A_/tR0 2 from scott.emp e1,scott.emp e2 where e1.mgr=e2.empno;
&J1{3G4h8\G7H0 51Testing软件测试网m[*w'_EhY
Employees and their Managers51Testing软件测试网$G fz)r|:Cm"k#V:KE
-------------------------------------------------51Testing软件测试网%P-` o4Zg{sC
SMITH work for FORD51Testing软件测试网,ja2|[ J s
ALLEN work for BLAKE
__d|+?z0 WARD work for BLAKE51Testing软件测试网@'YT;@fy"g ~
JONES work for KING51Testing软件测试网^/YgUQ(rq?
MARTIN work for BLAKE
\;V4Wbqt i CS0 BLAKE work for KING
"nt&f,a%q0C%|0 CLARK work for KING51Testing软件测试网 guz{*Lxf[h t
SCOTT work for JONES51Testing软件测试网xb;s6MZR:gf
TURNER work for BLAKE
tT!C;aS0 ADAMS work for SCOTT51Testing软件测试网"K7R3`e]4vV2H"[
JAMES work for BLAKE51Testing软件测试网2v7o U,b7u;_8v$v
FORD work for JONES51Testing软件测试网6i7[h�f)n)p Tmi
MILLER work for CLARK
x2p|cZoC'X5EV%M q0 51Testing软件测试网4J8ehh.Jl
1.4UNION , INTERSECT及 MINUS
'{x(H[(ve0 UNION: 可以将两个以上的表的相类似的查询结果放在一起 (union all则表示返回所有的行)51Testing软件测试网YI|2r)F)NjF+uu3k
具体语法:51Testing软件测试网ZQ|8F ue9y:u
select ...
lY3bl:j-`0 union[all]51Testing软件测试网0E'T(WktP&RcO
select...51Testing软件测试网:yxK e4I'c.C
========== 51Testing软件测试网(M x?&u};^5}|V Jn
x^ GIg{0 INTERSECT: 返回两个表中相同的信息
`,OP~�M,N,D$qm0 具体语法:51Testing软件测试网HQ[|)Us9y3N\
select ...51Testing软件测试网A}~OA4w'B
intersect51Testing软件测试网lyS&@0c1H-U:S
select...
rBd dK6X2`7@ubE0 ========== 51Testing软件测试网z;vhx|3x;~1P
51Testing软件测试网UY�}3@ \9bYHfy*FG
MINUS : 返回一个表中出现的信息51Testing软件测试网3v Ws0pQ
具体语法:51Testing软件测试网#a:Y s3r)V#|!z
select ...
0`u9{h�y'x7i%z6M0 minus51Testing软件测试网$bPpY*n.HwE
select...
,t-\7p&gP]&?D}0 [例1]UNION操作实例
iyT^'m r0 SQL> select st_id from students
1{$^O"W L)p&|q0 2 union51Testing软件测试网C(PT�C(TXc:t6D x
3 select st_id from student_skill;
1u/Bq3o$TcHmq0
,E/by xE6J0 ST_ID51Testing软件测试网m0X8VI3rvF[:B
--------------------51Testing软件测试网6T+}V9HhJ*r3?-X ]
97323151Testing软件测试网(xWH2ACG7GL4u.b
973232
.cm&Y+YW9n C0 973233
G0YD�w$jp2v_1A0 51Testing软件测试网iQ/vy,KU4d
[例2]INTERSECT操作实例
.L0Z_ES6N0 列出有特长的学生的学号51Testing软件测试网tdIG3tZ OA7AZ)q
SQL> select st_id from students51Testing软件测试网7Op_3[m!cFw
2 intersect
RG/Hd7^n-b.Y0 3 select st_id from student_skill;51Testing软件测试网hO}G?;{KvH
ST_ID
+h_C5[(s n;p(J![0 --------------------
g#uY4K\\0 97323151Testing软件测试网8vH V.@.pu,w~
973233
{B"~?@1L a0
7}L7\ mrC1r#o0 [例3]MINUS操作实例
^:@9zCI~u(]0 列出没有特长学生的学号51Testing软件测试网I5t9b^;^Y'B6[+t
select st_id from students51Testing软件测试网%N xXt!A6gl
minus
oT bJhW,zVW0 select st_id from student_skill;51Testing软件测试网\�UU:DL(M:e�w&b9u
ST_ID
4W$BDZz3c7|y\0 --------------------
nlJ%i{Q0 973232 51Testing软件测试网ach*|}7KUi
51Testing软件测试网.x["[*b/Yr4q
T1J n+gZ0M]R;~1o0 2.创建复杂的视图51Testing软件测试网5g}6z.c @I%|P&e D
许多应用系统有统计等功能,建议最好把这些复杂语句写成视图.下面是几个常用的视图.
M8f&z/~*Mso�y0 2.1分组视图
1B&n5jeXv.q0 [例1]简单的分组视图51Testing软件测试网-PQ%|0dH^pz
SQL> create or replace view dept_tot as51Testing软件测试网4{bU,e6c
2 select a.dname dept,sum(b.sal) total_sal from scott.dept a,scott.emp b
1H4I&noC0 3 where a.deptno=b.deptno group by a.dname; 51Testing软件测试网p,TH9P)aMi+f
51Testing软件测试网/u9h_:u)^HQ][
查看已建立。
&]8Pqr[2\W/[0 SQL> select * from dept_tot;
S?|3uf5e C0 51Testing软件测试网0o-zam#R.G
DEPT TOTAL_SAL51Testing软件测试网i}'Xq.GEJs
-------------- ---------51Testing软件测试网sus*F\ c,It[
ACCOUNTING 8750
vY0ZX&_t']3h0 RESEARCH 1087551Testing软件测试网rMT7g:iXy
SALES 9400 51Testing软件测试网 m%s|}h"W
51Testing软件测试网;ocU\7l6Al
[例2]带复杂函数视图
z9^ T7o5d/aL0 SQL> create or replace view itemtot as
wKvn,z_A0 2 select persion,sum(amount) itemtot from ledger51Testing软件测试网0ZO0r8rC`^
3 where actiondate between51Testing软件测试网8H"`kL(Tl5@6pt�}I
4 to_date('01-MAR-1901','dd-mon-yyyy') and
7Qf;U B�M0 5 to_date('31-MAR-1901','dd-mon-yyyy')51Testing软件测试网W1B&I#F*m!m7P;Nt
6 and action in('bought','raid') group by persion;
1Pky'u \?I�Vf0 51Testing软件测试网 ]+O2t7a/m&?+}R"Kd
2.2合计视图
5\�k_{] n"jc"fb0 [例]合计函数视图实例51Testing软件测试网[%f\(kdiz
SQL> create or replace view emp_no1 as
og8xG$m U'B x4E W ?0 2 select deptno,sum(sal) 工资和,sum(comm) 总和
[ B(Uv|xM0 3 from scott.emp group by deptno;
xZ]z Z0 SQL> select * from emp_no1;
S*M5\8S*W)S,z U0 DEPTNO 工资和 总和51Testing软件测试网"Zh)[\-b};h+gF Zp
--------- --------- ---------
&p p[faF2l0 10 8750
f3}tkD.y;X0Pn3g0 20 1087551Testing软件测试网?4Kk T*Gg/E2n(Pw
30 9400 2200 51Testing软件测试网,\G&XZ.NV/Ic
51Testing软件测试网C[u4J2D/lF
2.3组合视图51Testing软件测试网.Pr-xJt2H Z
[例]带组合函数的视图51Testing软件测试网6w;Hx\r{kQ
SQL> create or replace view byitem as
d vfU$THn?"[0 2 select l.persion persion.item, amount, 100*amount/item bypersion,100*amount/total bytotal51Testing软件测试网klXxN-i8fP
3 from ledgent l,itemtotal i,total where l.persion=i.persion where l.persion=i.persion51Testing软件测试网~.@,]-zB�O,A
4 and actiondate between51Testing软件测试网"e e8k.\f:{6O
5 to_date('01-MAR-1901','dd-mon-yyyy') and51Testing软件测试网-oC%GY#O1t0`(mr;QV
6 to_date('31-MAR-1901','dd-mon-yyyy')
.lIF CMD0 7 and action in('bought','raid') ;
J MV"S*T$N1?Mc@3`-j|0
:u,y?sU)qcR8w0 3.家族树51Testing软件测试网YA0k#w K,Y'Tu
语法:
3Y5z Ge/d5{g0 select column from table_name start with column=value51Testing软件测试网b)i2[ h|#m8z
connect by prior 父主键=子主键 51Testing软件测试网%FY$C2j]T.\zY
$` fJ1PU)_;z0 3.1排除单一性和分枝51Testing软件测试网%SySW~6E~O
以ORACLE中的EMP表为例51Testing软件测试网 c\oP)c h/cE5w-]
[例]从顶到底列出各雇员的信息
S RzL;Vn;h*[(t0 SQL> select lpad(' ',4*(level-1))||ename name,empno,mgr from emp start with mgr is null
}j|'W/BQ1z5pM0 2 connect by prior empno=mgr; 51Testing软件测试网L:r#lI(v;S
qC"Z'V/q{0~9]J0 NAME EMPNO MGR51Testing软件测试网^ l;o7x*iYGe
--------- --------- ---------
T6~;B/g8X0K#_0 KING 7839
G ?(BBWDC?0 JONES 7566 783951Testing软件测试网 bcS}NuO n�e
SCOTT 7788 7566
J!Mz(MIuW0 ADAMS 7876 7788
U6RC Y^&?"~0 51Testing软件测试网+Uu Us(DijG
3.2遍历至根
]N:\IRe6b9cA!P4F0 [例1]现在要从某个雇员开始向他的上级列出该雇员的层次结构
N�r3j#]`(h:i,Xg0 SQL> col ename for a30;51Testing软件测试网O X8YS _.}O
SQL> select lpad(' ',4*(level-1))||ename ename,mgr,empno from scott.emp
:L Ll+N2H }b9y0 2 start with mgr=7788 connect by prior mgr=empno;
Gt6nu8xA4^_0 ENAME MGR EMPNO51Testing软件测试网6[J5j#U ^:Cj.}
------------------------------ --------- ---------51Testing软件测试网ssA%]#}%X&r
ADAMS 7788 787651Testing软件测试网(B~5mQ+@]%w
SCOTT 7566 7788
(R8C$K;NA:n#n7B0 JONES 7839 7566
wO+r!E-P.x0 KING 7839 51Testing软件测试网 l9CY|6fw4h�l
#_]!zl h3pPD0 [例2]列出所有雇员的层次结构
X#Cnb)n[_YC0 SQL> select lpad(' ',4*(level-1))||ename ename,empno,mgr from scott.emp
_*uosQ9M&C#EXZ0 2 start with mgr is not null
lgVTJ'h-O%Gq0 3 connect by empno=prior mgr; 51Testing软件测试网RibQb,n_,Y-FF"{
51Testing软件测试网#T0rI_5[B%M)M
ENAME EMPNO MGR
0q R-I m;@0|t0 ------------------------------ --------- ---------
0A4M9qZzm0 SMITH 7369 790251Testing软件测试网GWPTS/oU
FORD 7902 756651Testing软件测试网"R@2`"])O%P)sIa
JONES 7566 783951Testing软件测试网�B/q8\8V3Y*Wv
KING 783951Testing软件测试网kHIMS
ALLEN 7499 7698
/S�eO/Lz;Gz1j]0 BLAKE 7698 783951Testing软件测试网eQ zNLIN
KING 783951Testing软件测试网5F?E1[]rR`E
WARD 7521 769851Testing软件测试网4Q�a)~g[$l
BLAKE 7698 783951Testing软件测试网(pn V9e*L#kl
KING 7839
2}^-@j ?IWIg:@ r0 JONES 7566 783951Testing软件测试网V1yun&W:o"i*^#Ta&e
KING 783951Testing软件测试网QqZD/`o
MARTIN 7654 769851Testing软件测试网/o�htEi8} _
BLAKE 7698 7839
\~i/qP @YC%V0 KING 783951Testing软件测试网#OPf[6U
BLAKE 7698 7839
b2iG:X[C0 KING 783951Testing软件测试网)P0s VJbd!F�G@
CLARK 7782 783951Testing软件测试网{1JQT'E(O4Bm
KING 7839
:K:n%cw-j2~6yy0 SCOTT 7788 7566
y}T]I0C0 JONES 7566 7839
sql复杂查询语句的使用相关推荐
- mysql五补充部分:SQL逻辑查询语句执行顺序
mysql五补充部分:SQL逻辑查询语句执行顺序一 SELECT语句关键字的定义顺序 二 SELECT语句关键字的执行顺序 三 准备表和数据 四 准备SQL逻辑查询测试语句 五 执行顺序分析 一 SE ...
- 如何在SQL Server查询语句(Select)中检索存储过程(Store Procedure)的结果集
如何在SQL Server查询语句(Select)中检索存储过程(Store Procedure)的结果集?(2006-12-14 09:25:36) 与这个问题具有相同性质的其他描述还包括: 如 ...
- SQL 分页查询语句大全即(查找第N到M条记录的方法)
SQL 分页查询语句大全即(查找第N到M条记录的方法) 第一种方法,我的原创方法 row=2 表示分页行数 page=1 表示页码 getnum=row*page select * from (se ...
- sqlserver 指定的网络名不再可用_50个比较实用的SQL Server查询语句(1)
在本文中,我将解释一些通用的SQL查询.我认为每个开发人员都应该了解这些查询.这些查询与SQL的任何特定主题都无关.但是了解这些查询可以解决一些复杂的任务,并且可以在许多场景中使用. 查询1:检索所有 ...
- MySQL学习记录 (二) ----- SQL数据查询语句(DQL)
相关文章: <MySQL学习记录 (一) ----- 有关数据库的基本概念和MySQL常用命令> <MySQL学习记录 (二) ----- SQL数据查询语句(DQL)> &l ...
- mysql查询第二个字母为a_MSSQL_关于SQL Server查询语句的使用,一.查询第二个字母是t或者a的 - phpStudy...
关于SQL Server查询语句的使用 一.查询第二个字母是t或者a的雇员的全部信息 select * from employees where firstname like '_[t,a]%' 注意 ...
- mysql基础10(SQL逻辑查询语句执行顺序)
SQL语句定义顺序 SELECT DISTINCT <select_list> FROM <left_table> <join_type> JOIN <rig ...
- SQL 基本查询语句
这篇博客主要介绍SQl基本查询语句 下面是查询基于的表 Student表 SC表 Course表 下面是具体的代码 1.创建表CREATE TABLE Student( //创建学生表 Sno CHA ...
- mysql的查询语句大全_sql语句(sql数据库查询语句大全)
sql语句 结构化查询语言(StructuredQueryLanguage)缩写为SQL.结构化查询语言是一种数据库查询和编程语言,用于访问数据以及查询,更新和管理关系数据库系统: 程序功能 创建数据 ...
- MySQL补充部分-SQL逻辑查询语句执行顺序
一 SELECT语句关键字的定义顺序 SELECT DISTINCT <select_list> FROM <left_table> <join_type> JOI ...
最新文章
- 综述|深度学习在SLAM定位与建图中的应用(近250篇参考文献)
- Python相对导入导致SystemError的解决方案(译)
- 删除副本列表中的消失项目符号
- 2D空间中基于矢量运算的碰撞后效果as3源码
- python获取字符串首字母_[Python] Python 获取中文的首字母 和 全部拼音首字母
- Android系统韦根调试从驱动到应用(一)
- xsmax无法进入dfu模式_iPhone XR/XS/XS Max 如何进入恢复模式或 DFU 模式?
- 说说我眼中的社交电商:深入浅出分析“每日一淘”
- textarea输入框光标定位问题
- UBuntu安装CGI环境
- N-Tiers使用ObjectDataSouce如何自己处理中间层传回的错误讯息
- 完整的渗透测试实战纪实,低危漏洞组合成高危利用!
- y=asin(wx+φ)的对称中心_函数y=Asin(wx+φ)图像和性质
- 液体点滴速度监控报警装置(51单片机)
- Python实战-新能源王者宁德时代股权穿透研究(附完整代码)
- 从Map中 取出第一个key/第一个value的方法
- 国际物流概述:国际物流的流程是什么?
- 如何让智能家居环境,变得更加安全
- 金蝶品牌新战略浮出水面丨IBM助力数字货币走向成熟 【软件网每日新闻播报│第10-16期】
- keepalived应用:漂移IP的实现