科帮网

登录/注册
您现在的位置:论坛 盖世程序员(我猜到了开头 却没有猜到结局) 盖世程序员 > Oracle增删查改 day03
总共48087条微博

动态微博

查看: 1928|回复: 0

Oracle增删查改 day03

[复制链接]

45

主题

5

听众

119

金钱

三袋弟子

该用户从未签到

跳转到指定楼层
楼主
发表于 2014-06-02 19:41:25 |只看该作者 |倒序浏览
复习:
2 o8 @3 k! c5 o. v$ c7 |1.查询语句的基本格式。
3 h* B2 A8 c3 fselect ...
( O+ K2 `1 @' B) J; }from 表名
4 }* ]3 F# h0 A/ U0 A% Zwhere 条件
) ]# ~% j  x9 k# f6 T4 a! i' a' w0 e: Mgroup by 列名
9 b* t' z1 \& {1 nhaving 带组函数的条件
, L6 d8 l9 ~7 l+ e. [order by 列名3 W( t3 d" E( @7 M" F

0 M9 F6 h5 z/ u" m* p& k2.函数
4 o. L' m. o& a% p: J& D: N1)组函数:count / avg / sum / max / min9 z9 l# {0 X/ a# K( F

0 h6 Y: Q- ]$ ^0 n1 \. L" g1 _1 @2)单行函数:
3 z3 F& {( M$ j7 m: ya.字符函数:upper / lower / initcap0 x9 n: c9 v  g9 y
          length / lpad / rpad
7 @' O, N( v- k' ^. b  W
$ ~" [2 ^) ~: ~# [5 |          l : left ; r: right
0 d. C1 ?/ s3 m3 {
1 D$ m$ m% U1 m6 aselect rpad(ename, 10, '*') from emp_ning;
7 B. J7 W& l, d, Z6 C! s) D: W2 v  l3 t4 N5 h
b.数字函数: round / trunc / mod
3 ]8 u! Q5 |) c$ V6 d( Xselect mod(salary, 1000) from emp_ning;6 V9 h  C# q6 K/ e- k4 T" H! |9 m
& _2 D9 O' G: S& {- l
c.日期函数: months_between / add_months / : [' d' ?! \0 v+ W; O: y  k6 k: Z
             last_day(sysdate); h- Q) c! b0 O$ B8 @
* `7 v" \/ x' V+ o  [# T
d.转换函数: to_char / to_date / to_number( c0 _9 C8 z& U: f6 i5 B
" |- Y0 W& `2 x, L
              to_char         to_number* p2 C& Y" M) G7 Z3 l
       日期  --------->  字符 ---------->数字
, |, |! e1 Z' @' m3 h             <---------       <---------" R; t) R) o8 @8 f5 A! M
             to_date           to_char
: ?: t8 m7 _, H0 t, b5 p" J$ X* W3 k. p- j* v8 q

( H/ J: I, W5 u  `5 v where password = '1234' and id = '1001'
" [# F! u) P$ }/ X* Y
+ k# y7 Q# o2 k3 G select to_number('$7,912,345.67','$9,999,999.99')3 n( x4 o4 n/ G0 M& j
from dual;3 \5 l4 e& Q6 G' `7 h% `+ F

9 ]4 o& {+ e, D  i& F7912345.671 a! K; h+ ]& k- y/ k

: l/ _. }. f3 |. [# Dselect to_char(7912345.67, '$9,999,999.99')2 s% e/ w, U( d4 e
from dual;, `7 x& L6 @7 A7 Z( |1 D* |  M2 u& D
6 C5 b. N4 e* s
$7,912,345.67" @3 C( t7 z( W" j) Y8 R
6 X5 K  W: P' I: I
e.通用函数:nvl / coalesce / decode
, e2 ]: Q, i8 K
' `2 W4 |# v8 u* b使用频率比较高的单行函数:
3 I% ^6 k# i& d8 Y7 Rupper / round / to_char / to_date / nvl
/ H4 S; V; U  U# U/ K  h0 d% C% q. V( X4 D" a  l

8 W; h, X3 ^+ [7 b一、子查询/ h5 ?+ @$ }* `' D. p
1.谁的薪水比张无忌高?
* I, B2 j" u$ ]子查询1 |. b' m7 {. X
select salary from emp_ning# ?- l9 q: H- E. U/ i
where ename = '张无忌';
1 Q$ d  u" C' h+ [& M" N) m+ c; Q, a' ~  n9 T" i0 b" J
10000
( l6 e# T7 \0 z: z/ Z4 O* h& X6 S
主查询8 n8 t( S8 q1 O
select ename from emp_ning1 d1 ~# q$ [" [9 Z' h0 T2 q! A
where salary > 10000;4 g! g4 n/ \" j

: z/ s, \, [6 @2 T张三丰2 `3 o) C  r) K, j0 O# l

. @* x' u0 c( q9 o合并到一条SQL语句:
' y4 D" q2 `+ c1 Q3 Gselect ename from emp_ning# F' T+ o. s( P. ~8 t
where salary > (select salary from emp_ning
) v( ?5 M+ p; [7 g                where ename = '张无忌');6 W6 w, G9 i+ B! b: ?' W0 c

  h% D5 X( ?# F7 y8 s1 q( r>  <  >=  <=  =  <>: 单行比较运算符,
2 E1 T" ]; N+ d3 ^只能和一个数字比较。
, P! o# f# D$ M) p5 u3 w' `" p
5 ^9 J$ z4 O: ~insert into emp_ning(empno, ename, salary)7 T7 `% }- m: J4 H- Q
values(1014, '张无忌', 8000);
& C' D) [7 U  D' q8 G& K
. x" [3 }0 Y7 U6 `8 t谁的薪水比所有叫张无忌的人的薪水都高?大于最大
8 U8 w% d: ]7 E10000% H- C$ B+ K4 B, e6 D6 n
8000
# x' W& v: d7 U) g3 F& l6 t; {
- n. M  X0 W+ j3 X; _- ?9 Uselect ename from emp_ning6 B$ X# ^: h, R) c3 {: u# R
where salary > ALL(select salary from emp_ning( @/ h' s8 v4 Y3 ]# {* N6 U/ ?
                where ename = '张无忌');
  z2 t- V, u: ]& g3 x. A$ _
  o) g# W6 F/ A* y1 E* p哪些人的薪水比任何一个叫张无忌的人高都行?大于最小; e- X! Z  G' G& A9 Q% [$ _1 s9 s
10000
2 L" k# f2 o. c" x7 E8000) G% d( E3 C( f% s, g+ S5 ^7 T
3 q/ m; `4 J  q; q8 _
select ename from emp_ning) Q* ^3 O: T+ m/ r! l
where salary > ANY(select salary from emp_ning* U3 w8 z# w& X; ]
                where ename = '张无忌');
) r8 Z1 E) e8 G0 L6 b% j* ]6 v/ M5 M6 F# d* S: e/ d, B
2.谁和刘苍松同部门?列出除了刘苍松之外的员工名字。$ i2 e1 {5 L% H6 R+ K
select deptno from emp_ning
- h* `4 t; t+ {# uwhere ename = '刘苍松';
: Q1 l& O4 y- o: Q10
# h2 ]( b% ^3 j5 _
7 \* ?: Q" i4 t" e( O" k2 |; ~select ename from emp_ning3 v1 ^) J2 Q( Z1 S+ F, @
where deptno = 106 ]- b, g" }  _* [# T
and ename <> '刘苍松';" V" k# b+ I% o1 v% u; Q
+ s: N, r  I* E* t; Y1 V5 X% W% I
select ename,salary,job + l  h# `" F6 k+ N/ C' E1 V
from emp_ning
0 T, [$ g& p0 J- H* jwhere deptno = (select deptno from emp_ning# j1 @. L$ T) ^( L$ o
                where ename = '刘苍松')3 Y! E& j8 [" D% q, d$ _* W
and ename <> '刘苍松';
3 O1 k6 Z3 W/ f2 n& h
+ I8 [- }2 P# f2 d) r& t--如果子查询得到的结果是多个,不能使用单行比较运算符7 S9 M& v0 ^  Q  K0 }
等号。改为:in& c  k& i- t1 j, f2 p
insert into emp_ning(empno, ename, deptno)" o" D3 V$ {2 P3 z7 Y: R2 _
values(1015, '刘苍松', 20);: G$ E: L- E7 J9 W; ~% L( P

7 }1 ]4 R& r2 H# w+ T1 z; Zselect ename,salary,job,deptno
, g/ G: @) s! U7 W- Afrom emp_ning9 T4 t- H6 N$ w" ~4 H1 n: M% w" V
where deptno in (select deptno from emp_ning8 Y  `1 \% {: u
                where ename = '刘苍松')
5 K! P* S3 I% L! c: C1 Oand ename <> '刘苍松';9 v! N+ a/ w8 k3 @; l* Z4 j& T

4 }8 Q2 r0 e: x# O  p根据子查询返回的结果的行数:4 ]  j$ F- }# ~7 K! o
返回一行:> < >= <= = <>
* Z6 E& h; O0 @* y返回多行:>ALL >ANY <ALL <ANY in
2 L3 t4 Q+ H+ ~
) }" S$ R" o% d2 O+ j  ]7 P3.每个部门拿最高薪水的是谁?) e; ~) l9 V; {9 e5 J* ?/ d! Q0 D
--返回多行0 Q# L6 B8 o, u( S! a1 U
select deptno, max(salary)
1 z  [5 ^- h6 y3 M: j4 hfrom emp_ning
1 r! Z3 [  I0 V" M7 ~# }$ _$ Uwhere deptno is not null
) g" C) @4 X7 ^6 ?group by deptno;" |+ P6 M. }5 T

$ U+ Y. c' E9 ^! V( k   30        5000
, ]  u/ S% f4 x, b/ Y   20       15000
$ Z# o: s( L- [- X   10       100006 F, ~0 I/ j7 Z' h8 E& P8 `

4 G+ J" g7 m( Z7 `6 N# h7 cselect ename, salary, job, deptno
- k* F6 a) {: R  G: S- s( U( ufrom emp_ning
8 G2 ?- f& p/ v% c7 x* x4 ?. E/ Mwhere (deptno, salary) 6 I4 n- M# X  J6 g; C$ }
      in (select deptno, max(salary)' Y; c" z: s6 q
          from emp_ning
* {  J- Z8 {' y! S+ s          where deptno is not null
7 M0 u4 D: _$ F  O! }          group by deptno);
* P# T$ w! v" |7 O
4 I. G5 z( r) I, F4.哪个部门的人数比部门30的人数多?
2 F; [- K9 y# u( }, {: jselect count(*) from emp_ning
" y" x/ m/ P8 h6 F; gwhere deptno = 30;- l) u! o. H$ ~+ D- l5 H; ]: n! k
3
. y3 Q" l# T4 @  o4 F
' R& k. X4 |7 c0 rselect deptno, count(*)
1 L7 O$ P( ?* B) y# xfrom emp_ning4 j" o8 ?% W0 y* r, A6 B
group by deptno
& m' f/ w7 |4 X; T  j0 B; M% l' Ihaving count(*) > (select count(*) from emp_ning
! C+ R6 x5 S, n* U# }7 _                   where deptno = 30);& P" f8 D6 I4 v+ A, ]

0 M) T$ k1 \8 Z  u& Z: r5.哪个部门的平均薪水比部门20的平均薪水高?
/ b" t, C* ?+ l4 Y0 P( ?select deptno, avg(nvl(salary,0)) avg_s
, e" v; q! D* [from emp_ning+ e- x- |& ^0 C  S5 K
group by deptno
4 P$ H- d! H( v2 {9 R7 g1 Bhaving avg(nvl(salary,0)) >
" Y& S0 E+ N8 I# t9 @       (select avg(nvl(salary,0))6 r8 B! ?0 p- }
        from emp_ning+ ~! ~' _" z& p6 D  h6 C; ]1 G
        where deptno = 20);, V$ }! k) C+ G
1 y$ }0 B7 d- Y6 @- a$ K! [
6.列出员工名字和职位,这些员工所在的部门平均薪水
! U7 `- k* a% L6 |大于5000元。! p8 }7 [% z  u/ d+ Y3 G0 y
select deptno, avg(nvl(salary,0))/ {: A, E; i) `) i- s! m
from emp_ning
3 R/ l8 ^! i+ B' W  F. |group by deptno
' H7 @% Q' d0 N; B, [9 ?! r3 o8 W4 Phaving avg(nvl(salary,0)) > 5000;
( D1 n4 q5 N4 y9 ^( Z; u10  5750  z1 L# H" P; i9 S" H
20  8000 # S. D2 G' y" o
& j9 \5 S0 |! s2 _& O% Y
select ename, job  t- H' d- w: i% d" Z6 l
from emp_ning
; {- C+ e- P  h) zwhere deptno in (select deptno/ s2 h/ E# j7 l% x- x* V/ w
                from emp_ning
0 S' I# ]7 g0 j+ p3 O" f3 m% `5 P3 @                group by deptno, V( _2 h2 V( L* G; E2 k$ H
                having avg(nvl(salary,0)) > 5000);
- p& M, o4 R3 e4 l: _
* u8 A& h1 c( J: v7.谁是张无忌的下属?
9 h! D7 S) R" |5 G( {$ s' tselect empno from emp_ning; Y& T: `. h, V6 ]9 O" D9 \
where ename = '张无忌';& H# \( a5 k- |# {) \6 K
1001! j+ U$ X: \& z) K7 W
1014; j) `8 A) @( @4 H$ ~

+ j# J& H# c4 N( c; u/ y- Qselect ename from emp_ning
' C7 b& |* Y8 S) ^! b9 Ywhere mgr in (1001, 1014);
# S6 p9 M* p8 _2 S- _2 ^( ?1 \7 C2 B8 z
select ename from emp_ning. o. F  d, k4 N3 h" u. r- P) c
where mgr in (select empno from emp_ning
" o) U+ n0 p) |              where ename = '张无忌');
! X  b% A6 r; o2 x! v2 [6 U- W* B' W4 l. r- n; P
8.研发部有哪些职位?, ~  u2 _$ ^: G7 L. v
select distinct job from emp_ning% m" N* V; f( S% [. g
where deptno = (select deptno
8 P# g2 ~  @! {& z6 \                from dept_ning
4 i2 e; C& k1 r. k: a- Q' m# t                where dname = '研发部');
& d1 f0 {. i5 x! V$ b
* N4 f3 e1 Q  V) q: n) p4 V6 l
( u, z7 _3 V8 V- ?0 o7 {# N

科帮网 1、本主题所有言论和图片纯属会员个人意见,与本社区立场无关
2、本站所有主题由该帖子作者发表,该帖子作者与科帮网享有帖子相关版权
3、其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者和科帮网的同意
4、帖子作者须承担一切因本文发表而直接或间接导致的民事或刑事法律责任
5、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责
6、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意
7、科帮网管理员和版主有权不事先通知发贴者而删除本文


JAVA爱好者①群:JAVA爱好者① JAVA爱好者②群:JAVA爱好者② JAVA爱好者③ : JAVA爱好者③

快速回复
您需要登录后才可以回帖 登录 | 立即注册

   

关闭

站长推荐上一条 /1 下一条

发布主题 快速回复 返回列表 联系我们 官方QQ群 科帮网手机客户端
快速回复 返回顶部 返回列表