科帮网

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

动态微博

查看: 1931|回复: 0

Oracle增删查改 day03

[复制链接]

45

主题

5

听众

119

金钱

三袋弟子

该用户从未签到

跳转到指定楼层
楼主
发表于 2014-06-02 19:41:25 |只看该作者 |正序浏览
复习:0 ~: `& ~( O4 B: [5 J5 p
1.查询语句的基本格式。
% V, H% s) g: {& o/ Aselect ...' {3 ~, r! S& n- N1 S
from 表名
  H2 m+ o; [& Wwhere 条件# Y, F! L- A$ G
group by 列名  r4 b7 y3 n$ q# ?$ _# ]
having 带组函数的条件
, b' l" g. j% B3 Vorder by 列名
- E  y* a$ e! F7 N, I
+ f' Y" ~2 {9 r. }# M. c, q2.函数" c3 S' |% k6 O" Z7 J( ?  u8 U% X
1)组函数:count / avg / sum / max / min. l; ?9 j6 [- R5 i: o# r6 V, }

7 [* y8 `7 O$ j# @/ U2)单行函数:
; G( t* i0 d4 R2 z! k/ F, v/ `a.字符函数:upper / lower / initcap
5 P  F8 l+ @3 L; ^/ Y+ E7 E  Q# v6 y          length / lpad / rpad
& @6 {' Y8 N( {/ L( ^
5 c# T( L) T$ D' B; L7 R          l : left ; r: right. q7 G; k! e- |$ X3 z. Y; a

: U# `1 I- R; p+ N* hselect rpad(ename, 10, '*') from emp_ning;
, T' j- h4 {; k. a; D, c
5 K) ~7 X" l: U4 Wb.数字函数: round / trunc / mod& }/ M$ ^, D1 }( V
select mod(salary, 1000) from emp_ning;/ O. x# D1 e9 I

( y# v, ?; a, R9 Y# l, H: Lc.日期函数: months_between / add_months /
$ ^$ t$ z" j; Z- {' |' H             last_day(sysdate)
: G" G1 \9 n: k( g! V4 f; m& o8 P$ x' k7 j5 K8 m
d.转换函数: to_char / to_date / to_number" [) j  I" P' `

0 ?9 O5 I2 b& G5 j2 {% v              to_char         to_number, Q' ]/ G, |8 v
       日期  --------->  字符 ---------->数字
9 g4 i4 |& ]3 f" ~1 ~6 M5 P: ~9 S             <---------       <---------
# Z+ t: Z; ^. O3 z! z             to_date           to_char; e4 O% y8 p7 b5 K, Y- U% V% ?
" ], a- F; y: k' G
: K# X; I: W4 O% u+ L4 e0 z' {
where password = '1234' and id = '1001'% O9 W$ n# Q2 q9 @' O& m

* {: }2 A7 Q, A select to_number('$7,912,345.67','$9,999,999.99')
8 \* t6 W1 \: D3 N0 m from dual;2 ^# K' l" F. S! U2 ?/ h
' M5 _. s6 L2 m6 ^* D# I- T
7912345.67
# l) d8 a8 L5 K- {7 P5 O8 x6 Q5 h3 ?. E6 w1 n5 }
select to_char(7912345.67, '$9,999,999.99')
. A2 D9 u, g& z4 {9 U5 G, vfrom dual;( ~  ]! i8 t$ B5 V+ _3 w

, v0 b  b7 p. ?0 Y$7,912,345.676 m8 [7 s; }% \& {# p

8 L. c# b0 L& H: a" v4 Ge.通用函数:nvl / coalesce / decode
- \6 ]) Z7 p  D9 E# v& n$ S
2 m* m! i+ e' q- R* d使用频率比较高的单行函数:
  h4 p' Z+ X: _) @+ k& dupper / round / to_char / to_date / nvl0 o0 ^; Y4 {8 a0 h+ J
% F9 w! U* Y" c8 g. c
9 F( B& E) e$ y$ H4 b% p
一、子查询! j. Z+ U) ]+ {/ j: A
1.谁的薪水比张无忌高?) C: V0 H  X! f+ r5 K& P. s+ M
子查询. s$ J0 m3 u" D6 R
select salary from emp_ning
) E' u  f6 P! g% y* X" twhere ename = '张无忌';
8 t8 W. O/ r- [2 z7 g+ Q2 N3 c. S& `
10000; g/ [1 x) O' {& N) c2 c
* K" S* r, q7 V( l( u3 L6 ~
主查询9 u. m" I% @* K) P: ~; E
select ename from emp_ning
8 B  N0 |$ Q6 T8 L- s: vwhere salary > 10000;
$ t0 |& @7 x  R) j* }+ M
8 a' U+ u+ {3 U0 B, ?2 n张三丰
- p" D9 w! B. Z1 J' m, B/ ~
! h: c' e: f/ J2 F: G合并到一条SQL语句:
3 S- ~) t- p# |$ @4 [7 kselect ename from emp_ning
( |& i, @1 V" D8 nwhere salary > (select salary from emp_ning
6 {6 ]/ [+ S4 c. k                where ename = '张无忌');
7 A3 J3 P1 p- y) Q, I0 r8 j: ^% A; N& Q8 ~/ ^
>  <  >=  <=  =  <>: 单行比较运算符,
/ b( g( D4 n, n5 i2 {5 Z! m, x只能和一个数字比较。& V9 K# D7 Y' b7 W
9 C# q8 ?0 F: q3 n( k! o
insert into emp_ning(empno, ename, salary)/ R. C; B4 N7 o4 f* o$ I. ^3 Y/ _3 y
values(1014, '张无忌', 8000);+ p+ b7 H! @$ d- j+ G) R! {

3 b1 i- |* I. j% A, m谁的薪水比所有叫张无忌的人的薪水都高?大于最大
8 U! ^7 g0 O( M% W1 M5 b, C* J10000) t1 z6 y( |; p; ?
80002 g; l2 ]4 \( K9 {4 l

+ _  U3 v. G1 z4 I: Wselect ename from emp_ning9 n) F9 b+ X  s- c* [: {
where salary > ALL(select salary from emp_ning' v2 C$ J: _" g6 L5 I# M+ m
                where ename = '张无忌');
8 g! t! R; _1 b$ ~/ l* D
0 @9 _, L# k$ T0 u哪些人的薪水比任何一个叫张无忌的人高都行?大于最小
. |4 q; @$ f% u# g8 x. Y# t* K10000$ Z/ p4 w! b8 S. d
8000
3 {) V& a/ v' ^( O" A( Q# A3 S
: x' \" }3 w( _select ename from emp_ning7 X" @( P/ c6 `7 B! u: K
where salary > ANY(select salary from emp_ning& K3 _- J( A# b; D( ?6 X: ?; S& m
                where ename = '张无忌');
% T0 S$ n1 K- a  R' T- _  Q" }/ P, N" @4 b* j) ?
2.谁和刘苍松同部门?列出除了刘苍松之外的员工名字。9 ?" Q4 X* v& J4 `. ?# b9 U' G
select deptno from emp_ning
# p' C/ e5 G- j5 o* Mwhere ename = '刘苍松';9 C9 e1 J4 G& U; n
10
3 a6 `# H1 M& t7 q+ u( A; h5 a
) m3 X6 p1 N# o& e6 Fselect ename from emp_ning, |  p- p2 y) Q2 }9 W3 ^
where deptno = 10
3 i! f0 z  U. V  yand ename <> '刘苍松';
- k/ H- S( B( |. s! q$ o5 v" v: ?7 N0 W3 N* S2 H
select ename,salary,job , H( ^: c* W' d- k# `
from emp_ning1 a) M/ Q# g3 b: m+ O
where deptno = (select deptno from emp_ning
" p' k8 N$ R# V6 ]8 d- r" C, n  A                where ename = '刘苍松')
1 h8 H6 M$ ]3 F; uand ename <> '刘苍松';- H3 o0 ^2 x( S) H8 c9 t0 l
/ ]( M5 A( n. A" [& E
--如果子查询得到的结果是多个,不能使用单行比较运算符
6 M& L+ [6 o$ w; u4 I# J等号。改为:in
- f& q" @, N" S& |9 Z+ l, \; Binsert into emp_ning(empno, ename, deptno)
0 Y' ^1 A5 [  T! b# v2 `  Y$ Gvalues(1015, '刘苍松', 20);& l6 P3 w+ L1 _; g. [7 b% @( A

4 ~4 n2 a0 [6 f/ rselect ename,salary,job,deptno ; [5 s' t5 ^; ]1 f
from emp_ning7 _. m% x" F, Z, E6 U+ ~; @
where deptno in (select deptno from emp_ning; F0 h: q' K# S  C* P
                where ename = '刘苍松')
& T% t" l) J3 T$ E4 e2 Mand ename <> '刘苍松';
! K, h/ i( U2 ]" M9 g3 n, R( J9 a6 Y  `
根据子查询返回的结果的行数:5 ~) ?! }! E1 l) u8 ~
返回一行:> < >= <= = <>
* a" \1 \, `: ^返回多行:>ALL >ANY <ALL <ANY in
: h! Q+ v! S; O7 q/ o* K% n# b$ j# W6 H( o4 C
3.每个部门拿最高薪水的是谁?
: F* j1 V  Y9 i1 O! N& ^--返回多行
3 u  F+ m/ L3 H/ `  sselect deptno, max(salary)- K3 L7 [' g( `% j
from emp_ning' R1 X$ y& h) U0 H; V' Q
where deptno is not null* O, z& S' j8 C& F2 d/ P$ C  p
group by deptno;& W% g" P; s$ y: S2 R( O3 t4 p

! A! s; |+ Z. ]) F   30        50009 M( c+ P4 ?" ]8 n" a* c
   20       15000/ W* j& t! Q' x+ |7 z
   10       10000
3 |4 ~, C) z9 ?0 K  y- V
8 L' r% |8 C1 P; U/ ]4 ~7 l1 |2 Eselect ename, salary, job, deptno- L* v% S& E6 O
from emp_ning) ~8 a: p- x& f: I! O; A8 q
where (deptno, salary)
+ Z8 N/ a. w3 }6 w      in (select deptno, max(salary)
, Y/ I* p$ |  S- w8 N          from emp_ning4 P% f: p1 f0 K* f
          where deptno is not null: [( z0 H3 z8 z5 K7 k# A# R; G9 [
          group by deptno);: n8 @4 i: w+ y* h4 Y

' ~: G% G1 p& a- Y; t' A; q8 o4.哪个部门的人数比部门30的人数多?6 j& U* y! Q% B; |! Z1 i
select count(*) from emp_ning9 b  o) b8 h* ^* l
where deptno = 30;3 Q8 z2 u1 S- K2 A5 s
3' ^) H7 ^! O  E  v" H7 M& ?
" O2 u. e0 S0 A" `% H
select deptno, count(*)
2 T" r3 T* D. Bfrom emp_ning
, N( v0 M0 R! q& Rgroup by deptno
8 {1 E# H3 ?5 Q$ p% V& [+ P0 e: }having count(*) > (select count(*) from emp_ning& L; g7 V8 j% u1 X0 E4 I. y
                   where deptno = 30);
/ e$ h9 S6 f5 G! J- {0 N9 N0 i2 ]7 K. U2 t; U
5.哪个部门的平均薪水比部门20的平均薪水高?
8 A+ r* G6 S+ I' v' ^8 U* w" Yselect deptno, avg(nvl(salary,0)) avg_s) [) H. l- P$ e* S. t
from emp_ning
4 k' s8 @" o6 s$ p) Bgroup by deptno) e/ [$ o" U2 j$ ?) i& k
having avg(nvl(salary,0)) >
0 Z) H$ S) x/ O1 y! e       (select avg(nvl(salary,0))
& B; i0 Y: c5 l9 X! `        from emp_ning
( G  `9 U) {; Y1 [) R; }        where deptno = 20);1 N* A$ f' r" ^+ \0 ~
( I% `7 Y5 x  O" M
6.列出员工名字和职位,这些员工所在的部门平均薪水
2 d  S5 S0 b2 P# M7 J8 `6 F# l大于5000元。
- k0 V) m" u  s1 b: eselect deptno, avg(nvl(salary,0)). {( Y( F: m' `* I. q; @) d' f( B
from emp_ning
" L. K6 i0 h0 O" s4 W0 j) Kgroup by deptno# R0 x. D6 \+ F
having avg(nvl(salary,0)) > 5000;
/ f& g1 ^* p( I+ ~  t8 K10  57501 b! c+ y2 |# M/ P' ~
20  8000 ! r5 ]9 m. h( f6 P, Y- [3 K
- m' s8 z0 e3 z) u+ ^
select ename, job" p' U; d& ]: U  [$ p
from emp_ning
  H$ q- }2 g( \. Wwhere deptno in (select deptno: ^. O6 }1 G* k
                from emp_ning
4 {: n# g& V9 {1 {8 b                group by deptno
# ?) D& O1 P  D1 U% \! v8 r                having avg(nvl(salary,0)) > 5000);& W% h& ]* L+ L
8 K8 X9 U  E, ]7 L, Z2 u3 p! z4 z
7.谁是张无忌的下属?2 p+ ?+ O5 |7 }6 Q  {
select empno from emp_ning
2 C1 I) e6 w$ ?* Gwhere ename = '张无忌';$ T: ]( M# F1 A3 i8 @% ]
1001
* h) u7 n3 q  F7 ~% o# y1014
/ N& X7 m% O1 r5 v* I- a! u  J! |/ s- r& C
select ename from emp_ning: F* x. U3 i4 Y$ V; c9 f
where mgr in (1001, 1014);" x; w: K1 v& s5 e

6 H& z& s) e/ o/ s! `* z, ]select ename from emp_ning
0 ^& R5 G! X* H, N3 R& bwhere mgr in (select empno from emp_ning
* }; q5 a: v6 _; D' V8 {              where ename = '张无忌');
3 s3 ?) P& M% ^# _! v5 W( |! z- a8 l1 e, O; Y5 V" r" A6 B: q
8.研发部有哪些职位?
! \% f/ V! h" s! p5 P# fselect distinct job from emp_ning3 f% ^7 R$ \( u6 t& T
where deptno = (select deptno
# D; U8 @2 N5 s4 Z) r; `5 S                from dept_ning; q; i0 t& U, J. A; {" V7 O' D9 C
                where dname = '研发部');
5 _: r6 g8 y+ G# [* C% e2 M  T( H1 b% z" K& G5 Y8 s6 Q

, Y2 P& B/ j) k" L

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


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

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

   

关闭

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

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