常用SQL语句2(Oracle)

  1 /********************************SCOTT Database*******************************/
  2 select * from EMP;
  3 select * from DEPT;
  4 select * from SALGRADE;
  5
  6 select ename, sal*12 from emp;
  7
  8 /*system empty table*/
  9 select * from dual;
 10 select 2*3 from dual;
 11
 12 select sysdate from dual;
 13 /*alias*/
 14 select ename, sal*12 annual_sal from emp;
 15 /*alias with space*/
 16 select ename, sal*12 "annual sal" from emp;
 17
 18 /*0 not equal null value*/
 19 select ename, comm from emp;
 20
 21 /*year salary + comm, any contains empty‘s math operation result is empty*/
 22 select ename, sal*12 + comm from emp;
 23
 24 select ename||sal from emp;
 25
 26 /*concat string*/
 27 select ename || ‘abcdefg‘ from emp;
 28
 29 /*2 ‘ instead of 1 ‘*/
 30 select ename || ‘abcdefg‘‘abcd‘ from emp;
 31
 32 select deptno from emp;
 33
 34 /*remove duplicate*/
 35 select distinct deptno from emp;
 36
 37 select distinct deptno, job from emp;
 38
 39 select * from emp where deptno = 10;
 40
 41 select * from EMP where ename = ‘CLARK‘;
 42
 43 select ename, sal from emp where SAL > 1500;
 44
 45 select ename, sal from emp where deptno <> 10;
 46
 47 select ename, sal from emp where ename > ‘CBA‘;
 48
 49 select ename, sal from emp where sal between 800 and 1500;
 50
 51 select ename, sal from emp where sal >= 800 and sal <= 1500;
 52
 53 /*empty value*/
 54 select ename, sal, comm from emp where comm = null;
 55
 56 select ename, sal, comm from emp where comm is null;
 57
 58 select ename, sal, comm from emp where comm is not null;
 59
 60 select ename, sal, comm from emp where sal in (800, 1500, 2000);
 61
 62 select ename, sal, comm from emp where ename in (‘SMITH‘, ‘KING‘, ‘ABC‘);
 63
 64 select ename, sal from emp where DEPTNO = 10 and sal > 1000;
 65
 66 select ename, sal from emp where DEPTNO = 10 or sal > 1000;
 67
 68 select ename, sal from emp where DEPTNO = 10 and sal not in (800, 1500);
 69
 70 /*% means 0 or more*/
 71 select ename from emp where ENAME like ‘%ALL%‘;
 72
 73 select ename from emp where ename like ‘_A%‘;
 74
 75 /*contains % in the selected rows need escape sequence*/
 76
 77 select ename from emp where ENAME like ‘%\%%‘;
 78
 79 /*default escapse sequence is \ but we can defintion by use <escape> ‘$‘ */
 80 select ename from emp where ename like ‘%$%%‘ escape ‘$‘;
 81
 82 select * from DEPT;
 83
 84 /*order by asc desc defalut is asc*/
 85 select * from DEPT order by DEPTNO desc;
 86
 87 select empno, ename from emp;
 88
 89 select empno, ename from emp order by EMPNO asc;
 90
 91 select empno, ename from emp order by EMPNO desc;
 92
 93 select empno, ename from emp where deptno <> 10 order by empno asc;
 94
 95 select ename, sal, deptno from emp order by deptno asc;
 96
 97 select ename, sal, deptno from emp order by deptno asc, ename desc;
 98
 99 select ename, sal*12 annual_sal from emp where ename not like ‘_A%‘ and sal > 800 order by sal desc;
100
101 select lower(ename) from emp
102
103 select ename from emp where lower(ename) like ‘_a%‘;
104
105 select ename from emp where ename like ‘_a%‘ or ename like ‘_A%‘;
106
107 select substr(ename, 1, 3) from emp;
108
109 select substr(ename, 2, 3) from emp;
110
111 select chr(65) from dual;
112
113 select ascii(‘A‘) from dual;
114
115 select round(23.652) from dual;
116
117 select round(23.652, 2) from dual;
118
119 select round(23.652, -1) from dual;
120
121 /* 9 means number, is this position has no number, it will not be displayed
122    ‘$99,999.9999‘ --> $800.0000
123    ‘$99,999.9999‘ --> $1,500.0000
124    ‘L99,999.9999‘ --> Y1,500.0000
125    ‘$00000.0000‘ --> $00800.0000
126    ‘$00000.0000‘ --> $01500.0000
127
128    to_char
129 */
130
131 select to_char(sal, ‘$99,999.9999‘) from emp;
132
133 select to_char(sal, ‘$00000.0000‘) from emp;
134
135 select hiredate from emp;
136
137 /* Date format
138  YYYY -- year
139  MM   -- month
140  DD   -- day
141  HH   -- 12 hour
142  HH24 -- 24 hour
143  MI   -- minute
144  SS   -- second
145 */
146 select to_char(hiredate, ‘YYYY-MM-DD HH:MI:SS‘) joindate from emp;
147
148 /*to_date*/
149 select ename, hiredate from emp where HIREDATE > to_date(‘1981-2-20 12:34:56‘, ‘YYYY-MM-DD HH24:MI:SS‘);
150
151 /*to_number*/
152 select sal from EMP where sal > to_number(‘$1,250.00‘, ‘$9,999.99‘);
153
154 select ename, sal*12 + comm from emp;
155
156
157 /*
158    function nvl to deal with null value to math operation
159    if comm is null then o instead of null or it will be comm
160 */
161 select ename, sal*12 + nvl(comm, 0) from emp;
162
163
164 /*
165    group function : min, max, avg, count, sum
166 */
167 select max(sal) maxsal from emp;
168
169 select min(sal) minsal from emp;
170
171 select avg(sal) avgsal from emp;
172
173 select to_char(avg(sal),‘999999999.99‘) avgsal from emp;
174
175 select round(avg(sal),2) avgsal from emp;
176
177 select sum(sal) from emp;
178
179 select count(*) records from emp;
180
181 select count(*) from emp where deptno = 10;
182
183 select count(ename) from emp;
184
185 /*count the field which is not null*/
186 select count(comm) from emp;
187
188 select count(deptno) from emp;
189
190 select count(distinct deptno) from emp;
191
192 /*
193     function : group by
194 */
195
196 /* which department‘s avg salary is highest*/
197 select sal, deptno from emp;
198
199
200 /*department avg salary*/
201 select deptno, to_char(avg(sal),‘99999999.99‘) depavgsal from emp group by deptno;
202
203 select deptno, job, max(sal) maxsal from emp group by deptno, job;
204
205 /*the highest salary in the company*/
206 select max(sal) from emp;
207
208 /*who is the highest salary in the company*/
209 select ename from emp where sal = (select max(sal) from emp);
210
211 /*the highest salary in the department*/
212 select deptno, max(sal) from emp group by deptno;
213
214 select to_char(avg(sal), ‘99999999.99‘) avgsal, deptno from emp group by deptno;
215
216 /* having is limited with grouping*/
217 select to_char(avg(sal), ‘99999999.99‘) avgsal, deptno from emp group by deptno having avg(sal) > 2000;
218
219 select deptno, max(sal) from emp where SAL > 1000 group by deptno having avg(sal) > 2000 order by deptno desc;
220
221 select deptno, to_char(avg(sal), ‘99999999.99‘) from emp where sal > 1200 group by deptno having avg(sal) > 1500 order by avg(sal) desc;
222
223
224 select ename, sal from emp where SAL = (select max(sal) from emp);
225
226 select ename, sal from emp where sal > (select avg(sal) from emp);
227
228 select ename, sal from emp join (select max(sal) maxsal, deptno from emp group by deptno) t on (emp.sal = t.maxsal and emp.deptno = t.deptno);
229
230 select * from SALGRADE;
231
232 select deptno, to_char(avg(sal), ‘999999999.99‘) s from emp group by deptno;
233
234 SELECT dname,grade,to_char(S, ‘999999.999‘) FROM dept,(SELECT deptno,grade,s FROM (SELECT deptno,grade,s FROM (SELECT deptno,avg(sal) s FROM emp GROUP BY deptno),salgrade WHERE s BETWEEN losal AND hisal ORDER BY grade DESC) t WHERE ROWNUM=1) t WHERE dept.deptno=t.deptno;
235
236 SELECT dname,grade,to_char(S, ‘999999.999‘) FROM dept,(SELECT deptno,grade,s FROM (SELECT deptno,grade,s FROM (SELECT deptno,avg(sal) s FROM emp GROUP BY deptno),salgrade WHERE s BETWEEN losal AND hisal ORDER BY grade DESC) t WHERE ROWNUM=1) t WHERE dept.deptno=t.deptno;
237
238
239 /*self table connection*/
240
241 select empno, ename, mgr from emp;
242
243 select e1.ename, e2.ename from emp e1, emp e2 where e1.MGR = e2.EMPNO;
244
245 select ename, dname from EMP, DEPT where emp.DEPTNO = dept.DEPTNO;
246
247 select ename, dname from EMP join DEPT on (emp.DEPTNO = dept.DEPTNO);
248
249 select ename, dname from EMP join DEPT using (deptno);
250
251 select ename, grade from emp e join salgrade s on (e.SAL between s.LOSAL and s.HISAL);
252
253 select ename, dname, grade from emp e join dept d on (e.DEPTNO = d.DEPTNO) join salgrade s on (e.SAL between s.LOSAL and s.HISAL) where ename not like ‘_A%‘;
254
255 /*left join == left outer join*/
256 select e1.ename, e2.ename from emp e1 left join emp e2 on (e1.mgr = e2.empno);
257
258 select e1.ename, e2.ename from emp e1 left outer join emp e2 on (e1.mgr = e2.empno);
259
260 select * from dept;
261
262 select ename, dname from emp e right join DEPT d on (e.DEPTNO = d.DEPTNO);
263
264 select ename, dname from emp e right outer join DEPT d on (e.DEPTNO = d.DEPTNO);
265
266 /* full join */
267 select ename, dname from emp e full join DEPT d on (e.DEPTNO = d.DEPTNO);
268
269 /*department avg salary*/
270 select deptno, to_char(avg(sal), ‘9999999.99‘) from emp group by deptno;
271
272 /*department avg salary‘s grade*/
273 select deptno, avg_sal, grade
274 from (select deptno, to_char(avg(sal), ‘999999.99‘) avg_sal from emp group by deptno) t
275 join SALGRADE s
276 on (t.avg_sal between s.LOSAL and s.HISAL);
277
278 /*salary grade for every employee*/
279 select ename, deptno, grade from emp e join SALGRADE s on (e.SAL between s.LOSAL and s.HISAL);
280
281 select deptno, to_char(avg(grade), ‘9.9‘) avg_grade
282 from (select ename, deptno, grade from emp e join SALGRADE s on (e.SAL between s.LOSAL and s.HISAL)) t
283 group by t.deptno;
284
285 /* who is manager*/
286 select ename from emp where EMPNO in (select mgr from emp);
287
288 select ename from emp where EMPNO in (select distinct mgr from emp);
289
290 select * from emp;
291
292 /*select highest salary*/
293 select max(sal) from emp;
294
295 select distinct e1.sal from emp e1 join emp e2 on (e1.SAL < e2.SAL);
296
297 /* please don‘t use group function to find the max salary*/
298 select distinct sal from emp where SAL not in (select distinct e1.sal from emp e1 join emp e2 on (e1.SAL < e2.SAL));
299
300 select deptno, avg_sal from (select to_char(avg(sal), ‘99999.99‘) avg_sal, deptno from emp group by deptno)
301 where avg_sal = (select max(avg_sal) from (select to_char(avg(sal),‘999999.99‘) avg_sal, deptno from emp group by deptno));
302
303
304 select max(avg_sal) from (select to_char(avg(sal),‘999999.99‘) avg_sal, deptno from emp group by deptno);
305 select to_char(avg(sal), ‘99999.99‘) avg_sal, deptno from emp group by deptno;
306
307
308 /*avg salary is highest*/
309 select deptno, avg_sal from (select to_char(avg(sal), ‘99999.99‘) avg_sal, deptno from emp group by deptno) where avg_sal = (select max(avg_sal) from (select to_char(avg(sal),‘99999.99‘) avg_sal, deptno from emp group by deptno));
310
311 /*the depatname of the highest avg salary*/
312 select dname from dept where deptno =
313 (select deptno from (select to_char(avg(sal), ‘99999.99‘) avg_sal, deptno from emp group by deptno) where avg_sal = (select max(avg_sal) from (select to_char(avg(sal),‘99999.99‘) avg_sal, deptno from emp group by deptno)));
314
315
316 select avg(sal) sal_avg from emp group by deptno;
317
318 select deptno, avg(sal) sal_avg from emp group by deptno;
319
320 select deptno, to_char(sal_avg, ‘999999.99‘) sal_avg, grade
321 from (select deptno, avg(sal) sal_avg from emp group by deptno) t
322 join salgrade s
323 on (t.sal_avg between s.LOSAL and s.HISAL);
324
325
326 select min(grade) from (
327     select deptno, to_char(sal_avg, ‘999999.99‘) sal_avg, grade
328     from (select deptno, avg(sal) sal_avg from emp group by deptno) t
329     join salgrade s
330     on (t.sal_avg between s.LOSAL and s.HISAL)
331 );
332
333
334 select * from dept;
335
336 /*selected the lowest avg salary‘s deptment‘s deptname*/
337 select t1.deptno, dname, sal_avg, grade from
338     (
339         select deptno, to_char(sal_avg, ‘999999.99‘) sal_avg, grade
340         from (select deptno, avg(sal) sal_avg from emp group by deptno) t
341         join salgrade s
342         on (t.sal_avg between s.LOSAL and s.HISAL)
343     ) t1
344 join
345     dept
346 on
347     t1.deptno = dept.DEPTNO
348 where
349     t1.grade =
350     (
351         select min(grade) from (
352             select deptno, to_char(sal_avg, ‘999999.99‘) sal_avg, grade
353             from (select deptno, avg(sal) sal_avg from emp group by deptno) t
354             join salgrade s
355             on (t.sal_avg between s.LOSAL and s.HISAL)
356         )
357     );
358
359 /*create view*/
360 create or replace view v$_dept_avg_sal_info as
361     select deptno, to_char(sal_avg, ‘999999.99‘) sal_avg, grade
362     from (select deptno, avg(sal) sal_avg from emp group by deptno) t
363     join salgrade s
364     on (t.sal_avg between s.LOSAL and s.HISAL)
365
366 select * from V$_DEPT_AVG_SAL_INFO;
367
368
369 /*selected the lowest avg salary‘s deptment‘s deptname by view*/
370
371 select t1.deptno, dname, sal_avg, grade from
372     V$_DEPT_AVG_SAL_INFO t1
373 join
374     dept
375 on
376     t1.deptno = dept.DEPTNO
377 where
378     t1.grade =
379     (
380         select min(grade) from V$_DEPT_AVG_SAL_INFO
381     );
382
383 select max(sal)
384 from
385     emp
386 where
387     EMPNO not in (select distinct mgr from emp where MGR is not null);
388
389
390 select ename
391 from
392     emp
393 where
394     empno in (select distinct mgr from emp where MGR is not null)
395     and
396     SAL > (
397         select max(sal)
398         from
399             emp
400         where
401             EMPNO not in (select distinct mgr from emp where MGR is not null)
402     )
403
404
405 select * from user_views;
406
407 select empno, ename, rownum from emp order by empno desc;
408
409 select empno, ename from emp where rownum <= 5;
410
411 select rownum r, ename from emp;
412
413 select ename from (select rownum r, ename from emp) where r > 10;
414
415 select ename, sal from emp order by sal desc;
416
417 select ename, sal from (select ename, sal from EMP order by sal desc) where rownum <= 5;
418
419 select ename,sal
420 from (select ename, sal, rownum r from (select ename, sal from emp order by SAL desc))
421 where r >= 6 and r <= 10;
422
423
424
425 select * from PRESENT;
  1 /********************************SCOTT Database*******************************/
  2 select * from EMP;
  3 select * from DEPT;
  4 select * from SALGRADE;
  5
  6 select ename, sal*12 from emp;
  7
  8 /*system empty table*/
  9 select * from dual;
 10 select 2*3 from dual;
 11
 12 select sysdate from dual;
 13 /*alias*/
 14 select ename, sal*12 annual_sal from emp;
 15 /*alias with space*/
 16 select ename, sal*12 "annual sal" from emp;
 17
 18 /*0 not equal null value*/
 19 select ename, comm from emp;
 20
 21 /*year salary + comm, any contains empty‘s math operation result is empty*/
 22 select ename, sal*12 + comm from emp;
 23
 24 select ename||sal from emp;
 25
 26 /*concat string*/
 27 select ename || ‘abcdefg‘ from emp;
 28
 29 /*2 ‘ instead of 1 ‘*/
 30 select ename || ‘abcdefg‘‘abcd‘ from emp;
 31
 32 select deptno from emp;
 33
 34 /*remove duplicate*/
 35 select distinct deptno from emp;
 36
 37 select distinct deptno, job from emp;
 38
 39 select * from emp where deptno = 10;
 40
 41 select * from EMP where ename = ‘CLARK‘;
 42
 43 select ename, sal from emp where SAL > 1500;
 44
 45 select ename, sal from emp where deptno <> 10;
 46
 47 select ename, sal from emp where ename > ‘CBA‘;
 48
 49 select ename, sal from emp where sal between 800 and 1500;
 50
 51 select ename, sal from emp where sal >= 800 and sal <= 1500;
 52
 53 /*empty value*/
 54 select ename, sal, comm from emp where comm = null;
 55
 56 select ename, sal, comm from emp where comm is null;
 57
 58 select ename, sal, comm from emp where comm is not null;
 59
 60 select ename, sal, comm from emp where sal in (800, 1500, 2000);
 61
 62 select ename, sal, comm from emp where ename in (‘SMITH‘, ‘KING‘, ‘ABC‘);
 63
 64 select ename, sal from emp where DEPTNO = 10 and sal > 1000;
 65
 66 select ename, sal from emp where DEPTNO = 10 or sal > 1000;
 67
 68 select ename, sal from emp where DEPTNO = 10 and sal not in (800, 1500);
 69
 70 /*% means 0 or more*/
 71 select ename from emp where ENAME like ‘%ALL%‘;
 72
 73 select ename from emp where ename like ‘_A%‘;
 74
 75 /*contains % in the selected rows need escape sequence*/
 76
 77 select ename from emp where ENAME like ‘%\%%‘;
 78
 79 /*default escapse sequence is \ but we can defintion by use <escape> ‘$‘ */
 80 select ename from emp where ename like ‘%$%%‘ escape ‘$‘;
 81
 82 select * from DEPT;
 83
 84 /*order by asc desc defalut is asc*/
 85 select * from DEPT order by DEPTNO desc;
 86
 87 select empno, ename from emp;
 88
 89 select empno, ename from emp order by EMPNO asc;
 90
 91 select empno, ename from emp order by EMPNO desc;
 92
 93 select empno, ename from emp where deptno <> 10 order by empno asc;
 94
 95 select ename, sal, deptno from emp order by deptno asc;
 96
 97 select ename, sal, deptno from emp order by deptno asc, ename desc;
 98
 99 select ename, sal*12 annual_sal from emp where ename not like ‘_A%‘ and sal > 800 order by sal desc;
100
101 select lower(ename) from emp
102
103 select ename from emp where lower(ename) like ‘_a%‘;
104
105 select ename from emp where ename like ‘_a%‘ or ename like ‘_A%‘;
106
107 select substr(ename, 1, 3) from emp;
108
109 select substr(ename, 2, 3) from emp;
110
111 select chr(65) from dual;
112
113 select ascii(‘A‘) from dual;
114
115 select round(23.652) from dual;
116
117 select round(23.652, 2) from dual;
118
119 select round(23.652, -1) from dual;
120
121 /* 9 means number, is this position has no number, it will not be displayed
122    ‘$99,999.9999‘ --> $800.0000
123    ‘$99,999.9999‘ --> $1,500.0000
124    ‘L99,999.9999‘ --> Y1,500.0000
125    ‘$00000.0000‘ --> $00800.0000
126    ‘$00000.0000‘ --> $01500.0000
127
128    to_char
129 */
130
131 select to_char(sal, ‘$99,999.9999‘) from emp;
132
133 select to_char(sal, ‘$00000.0000‘) from emp;
134
135 select hiredate from emp;
136
137 /* Date format
138  YYYY -- year
139  MM   -- month
140  DD   -- day
141  HH   -- 12 hour
142  HH24 -- 24 hour
143  MI   -- minute
144  SS   -- second
145 */
146 select to_char(hiredate, ‘YYYY-MM-DD HH:MI:SS‘) joindate from emp;
147
148 /*to_date*/
149 select ename, hiredate from emp where HIREDATE > to_date(‘1981-2-20 12:34:56‘, ‘YYYY-MM-DD HH24:MI:SS‘);
150
151 /*to_number*/
152 select sal from EMP where sal > to_number(‘$1,250.00‘, ‘$9,999.99‘);
153
154 select ename, sal*12 + comm from emp;
155
156
157 /*
158    function nvl to deal with null value to math operation
159    if comm is null then o instead of null or it will be comm
160 */
161 select ename, sal*12 + nvl(comm, 0) from emp;
162
163
164 /*
165    group function : min, max, avg, count, sum
166 */
167 select max(sal) maxsal from emp;
168
169 select min(sal) minsal from emp;
170
171 select avg(sal) avgsal from emp;
172
173 select to_char(avg(sal),‘999999999.99‘) avgsal from emp;
174
175 select round(avg(sal),2) avgsal from emp;
176
177 select sum(sal) from emp;
178
179 select count(*) records from emp;
180
181 select count(*) from emp where deptno = 10;
182
183 select count(ename) from emp;
184
185 /*count the field which is not null*/
186 select count(comm) from emp;
187
188 select count(deptno) from emp;
189
190 select count(distinct deptno) from emp;
191
192 /*
193     function : group by
194 */
195
196 /* which department‘s avg salary is highest*/
197 select sal, deptno from emp;
198
199
200 /*department avg salary*/
201 select deptno, to_char(avg(sal),‘99999999.99‘) depavgsal from emp group by deptno;
202
203 select deptno, job, max(sal) maxsal from emp group by deptno, job;
204
205 /*the highest salary in the company*/
206 select max(sal) from emp;
207
208 /*who is the highest salary in the company*/
209 select ename from emp where sal = (select max(sal) from emp);
210
211 /*the highest salary in the department*/
212 select deptno, max(sal) from emp group by deptno;
213
214 select to_char(avg(sal), ‘99999999.99‘) avgsal, deptno from emp group by deptno;
215
216 /* having is limited with grouping*/
217 select to_char(avg(sal), ‘99999999.99‘) avgsal, deptno from emp group by deptno having avg(sal) > 2000;
218
219 select deptno, max(sal) from emp where SAL > 1000 group by deptno having avg(sal) > 2000 order by deptno desc;
220
221 select deptno, to_char(avg(sal), ‘99999999.99‘) from emp where sal > 1200 group by deptno having avg(sal) > 1500 order by avg(sal) desc;
222
223
224 select ename, sal from emp where SAL = (select max(sal) from emp);
225
226 select ename, sal from emp where sal > (select avg(sal) from emp);
227
228 select ename, sal from emp join (select max(sal) maxsal, deptno from emp group by deptno) t on (emp.sal = t.maxsal and emp.deptno = t.deptno);
229
230 select * from SALGRADE;
231
232 select deptno, to_char(avg(sal), ‘999999999.99‘) s from emp group by deptno;
233
234 SELECT dname,grade,to_char(S, ‘999999.999‘) FROM dept,(SELECT deptno,grade,s FROM (SELECT deptno,grade,s FROM (SELECT deptno,avg(sal) s FROM emp GROUP BY deptno),salgrade WHERE s BETWEEN losal AND hisal ORDER BY grade DESC) t WHERE ROWNUM=1) t WHERE dept.deptno=t.deptno;
235
236 SELECT dname,grade,to_char(S, ‘999999.999‘) FROM dept,(SELECT deptno,grade,s FROM (SELECT deptno,grade,s FROM (SELECT deptno,avg(sal) s FROM emp GROUP BY deptno),salgrade WHERE s BETWEEN losal AND hisal ORDER BY grade DESC) t WHERE ROWNUM=1) t WHERE dept.deptno=t.deptno;
237
238
239 /*self table connection*/
240
241 select empno, ename, mgr from emp;
242
243 select e1.ename, e2.ename from emp e1, emp e2 where e1.MGR = e2.EMPNO;
244
245 select ename, dname from EMP, DEPT where emp.DEPTNO = dept.DEPTNO;
246
247 select ename, dname from EMP join DEPT on (emp.DEPTNO = dept.DEPTNO);
248
249 select ename, dname from EMP join DEPT using (deptno);
250
251 select ename, grade from emp e join salgrade s on (e.SAL between s.LOSAL and s.HISAL);
252
253 select ename, dname, grade from emp e join dept d on (e.DEPTNO = d.DEPTNO) join salgrade s on (e.SAL between s.LOSAL and s.HISAL) where ename not like ‘_A%‘;
254
255 /*left join == left outer join*/
256 select e1.ename, e2.ename from emp e1 left join emp e2 on (e1.mgr = e2.empno);
257
258 select e1.ename, e2.ename from emp e1 left outer join emp e2 on (e1.mgr = e2.empno);
259
260 select * from dept;
261
262 select ename, dname from emp e right join DEPT d on (e.DEPTNO = d.DEPTNO);
263
264 select ename, dname from emp e right outer join DEPT d on (e.DEPTNO = d.DEPTNO);
265
266 /* full join */
267 select ename, dname from emp e full join DEPT d on (e.DEPTNO = d.DEPTNO);
268
269 /*department avg salary*/
270 select deptno, to_char(avg(sal), ‘9999999.99‘) from emp group by deptno;
271
272 /*department avg salary‘s grade*/
273 select deptno, avg_sal, grade
274 from (select deptno, to_char(avg(sal), ‘999999.99‘) avg_sal from emp group by deptno) t
275 join SALGRADE s
276 on (t.avg_sal between s.LOSAL and s.HISAL);
277
278 /*salary grade for every employee*/
279 select ename, deptno, grade from emp e join SALGRADE s on (e.SAL between s.LOSAL and s.HISAL);
280
281 select deptno, to_char(avg(grade), ‘9.9‘) avg_grade
282 from (select ename, deptno, grade from emp e join SALGRADE s on (e.SAL between s.LOSAL and s.HISAL)) t
283 group by t.deptno;
284
285 /* who is manager*/
286 select ename from emp where EMPNO in (select mgr from emp);
287
288 select ename from emp where EMPNO in (select distinct mgr from emp);
289
290 select * from emp;
291
292 /*select highest salary*/
293 select max(sal) from emp;
294
295 select distinct e1.sal from emp e1 join emp e2 on (e1.SAL < e2.SAL);
296
297 /* please don‘t use group function to find the max salary*/
298 select distinct sal from emp where SAL not in (select distinct e1.sal from emp e1 join emp e2 on (e1.SAL < e2.SAL));
299
300 select deptno, avg_sal from (select to_char(avg(sal), ‘99999.99‘) avg_sal, deptno from emp group by deptno)
301 where avg_sal = (select max(avg_sal) from (select to_char(avg(sal),‘999999.99‘) avg_sal, deptno from emp group by deptno));
302
303
304 select max(avg_sal) from (select to_char(avg(sal),‘999999.99‘) avg_sal, deptno from emp group by deptno);
305 select to_char(avg(sal), ‘99999.99‘) avg_sal, deptno from emp group by deptno;
306
307
308 /*avg salary is highest*/
309 select deptno, avg_sal from (select to_char(avg(sal), ‘99999.99‘) avg_sal, deptno from emp group by deptno) where avg_sal = (select max(avg_sal) from (select to_char(avg(sal),‘99999.99‘) avg_sal, deptno from emp group by deptno));
310
311 /*the depatname of the highest avg salary*/
312 select dname from dept where deptno =
313 (select deptno from (select to_char(avg(sal), ‘99999.99‘) avg_sal, deptno from emp group by deptno) where avg_sal = (select max(avg_sal) from (select to_char(avg(sal),‘99999.99‘) avg_sal, deptno from emp group by deptno)));
314
315
316 select avg(sal) sal_avg from emp group by deptno;
317
318 select deptno, avg(sal) sal_avg from emp group by deptno;
319
320 select deptno, to_char(sal_avg, ‘999999.99‘) sal_avg, grade
321 from (select deptno, avg(sal) sal_avg from emp group by deptno) t
322 join salgrade s
323 on (t.sal_avg between s.LOSAL and s.HISAL);
324
325
326 select min(grade) from (
327     select deptno, to_char(sal_avg, ‘999999.99‘) sal_avg, grade
328     from (select deptno, avg(sal) sal_avg from emp group by deptno) t
329     join salgrade s
330     on (t.sal_avg between s.LOSAL and s.HISAL)
331 );
332
333
334 select * from dept;
335
336 /*selected the lowest avg salary‘s deptment‘s deptname*/
337 select t1.deptno, dname, sal_avg, grade from
338     (
339         select deptno, to_char(sal_avg, ‘999999.99‘) sal_avg, grade
340         from (select deptno, avg(sal) sal_avg from emp group by deptno) t
341         join salgrade s
342         on (t.sal_avg between s.LOSAL and s.HISAL)
343     ) t1
344 join
345     dept
346 on
347     t1.deptno = dept.DEPTNO
348 where
349     t1.grade =
350     (
351         select min(grade) from (
352             select deptno, to_char(sal_avg, ‘999999.99‘) sal_avg, grade
353             from (select deptno, avg(sal) sal_avg from emp group by deptno) t
354             join salgrade s
355             on (t.sal_avg between s.LOSAL and s.HISAL)
356         )
357     );
358
359 /*create view*/
360 create or replace view v$_dept_avg_sal_info as
361     select deptno, to_char(sal_avg, ‘999999.99‘) sal_avg, grade
362     from (select deptno, avg(sal) sal_avg from emp group by deptno) t
363     join salgrade s
364     on (t.sal_avg between s.LOSAL and s.HISAL)
365
366 select * from V$_DEPT_AVG_SAL_INFO;
367
368
369 /*selected the lowest avg salary‘s deptment‘s deptname by view*/
370
371 select t1.deptno, dname, sal_avg, grade from
372     V$_DEPT_AVG_SAL_INFO t1
373 join
374     dept
375 on
376     t1.deptno = dept.DEPTNO
377 where
378     t1.grade =
379     (
380         select min(grade) from V$_DEPT_AVG_SAL_INFO
381     );
382
383 select max(sal)
384 from
385     emp
386 where
387     EMPNO not in (select distinct mgr from emp where MGR is not null);
388
389
390 select ename
391 from
392     emp
393 where
394     empno in (select distinct mgr from emp where MGR is not null)
395     and
396     SAL > (
397         select max(sal)
398         from
399             emp
400         where
401             EMPNO not in (select distinct mgr from emp where MGR is not null)
402     )
403
404
405 select * from user_views;
406
407 select empno, ename, rownum from emp order by empno desc;
408
409 select empno, ename from emp where rownum <= 5;
410
411 select rownum r, ename from emp;
412
413 select ename from (select rownum r, ename from emp) where r > 10;
414
415 select ename, sal from emp order by sal desc;
416
417 select ename, sal from (select ename, sal from EMP order by sal desc) where rownum <= 5;
418
419 select ename,sal
420 from (select ename, sal, rownum r from (select ename, sal from emp order by SAL desc))
421 where r >= 6 and r <= 10;
422
423
424
425 select * from PRESENT;
时间: 2024-11-10 02:17:07

常用SQL语句2(Oracle)的相关文章

Oracle数据库常用Sql语句大全

一,数据控制语句 (DML) 部分 1.INSERT  (往数据表里插入记录的语句) INSERT INTO 表名(字段名1, 字段名2, --) VALUES ( 值1, 值2, --); INSERT INTO 表名(字段名1, 字段名2, --)  SELECT (字段名1, 字段名2, --) FROM 另外的表名; 字符串类型的字段值必须用单引号括起来, 例如: 'GOOD DAY' 如果字段值里包含单引号' 需要进行字符串转换, 我们把它替换成两个单引号''. 字符串类型的字段值超过

oracle常用SQL语句(汇总版)

Oracle数据库常用sql语句 ORACLE 常用的SQL语法和数据对象 一.数据控制语句 (DML) 部分 1.INSERT (往数据表里插入记录的语句) INSERT INTO 表名(字段名1, 字段名2, ……) VALUES ( 值1, 值2, ……); INSERT INTO 表名(字段名1, 字段名2, ……) SELECT (字段名1, 字段名2, ……) FROM 另外的表名; 字符串类型的字段值必须用单引号括起来, 例如: ’GOOD DAY’ 如果字段值里包含单引号’ 需要

Oracle 数据库常用sql语句及知识

<Oracle 数据库> 一.常用sql语句: 1.连接系统管理员账号:conn system/system(安装时口令); 2.创建新账号:create user Leo(账号名) identified by Leo(密码): 3.给新账号授权:grant connect,resource to Leo; 4.从某个账户收权:revoke resource from Leo; 5.连接新账号:conn Leo/Leo; 6.显示当前客户:show user; 7.查看表结构:desc s_e

Oracle维护常用SQL语句

数据库人员手边系列:Oracle维护常用SQL语句 1.查看表空间的名称及大小 select t.tablespace_name, round(sum(bytes/(1024*1024)),0) ts_size from dba_tablespaces t, dba_data_files d where t.tablespace_name = d.tablespace_name group by t.tablespace_name; 2.查看表空间物理文件的名称及大小 select tables

常用sql语句及案例

目录 1)基本 2)数学函数 3)rownum 4)分页 5)时间处理 6)字符函数 7)to_number 8)聚合函数 9)学生选课 10)图书馆借阅 基本 --新建表: create table table1( id varchar(300) primary key, name varchar(200) not null); --插入数据 insert into table1 (id,name) values ('aa','bb'); --更新数据 update table1 set id

经典MSSQL语句大全和常用SQL语句命令的作用

下列语句部分是Mssql语句,不可以在access中使用. SQL分类: DDL类型包括数据库.表的创建,修改,删除,声明—数据定义语言(CREATE,ALTER,DROP,DECLARE) DML类型包括数据表中记录的查询,删除,修改,插入—数据操纵语言(SELECT,DELETE,UPDATE,INSERT) DCL类型包括数据库用户赋权,废除用户访问权限, 提交当前事务,中止当前事务—数据控制语言(GRANT,REVOKE,COMMIT,ROLLBACK) 首先,简要介绍基础语句: 1.说

MySQL创建用户,常用SQL语句以及数据库备份与恢复

一.创建普通用户并授权 1.创建用户并授权 [[email protected] ~]# mysql -uroot -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 1 Server version: 5.6.36 MySQL Community Server (GPL) Copyright (c) 2000, 2017, Oracle a

2.MySQL用户管理,常用SQL语句,MySQL数据库备份与恢复

[toc] MySQL用户管理,重用SQL语句,MySQL数据库备份与恢复 一.MySQL用户管理 1.创建一个普通用户并授权 首先启动mysql,然后进入 [[email protected] ~]# /etc/init.d/mysqld start Starting MySQL... SUCCESS! [[email protected] ~]# mysql -uroot -pxavilinux Warning: Using a password on the command line in

96.创建普通用户并授权,常用SQL语句,MySQL数据库备份与恢复

一.创建普通用户并授权 1.创建用户并授权 [[email protected] ~]# mysql -uroot -pEnter password:Welcome to the MySQL monitor. Commands end with ; or \g.Your MySQL connection id is 1Server version: 5.6.36 MySQL Community Server (GPL) Copyright (c) 2000, 2017, Oracle and/o

常用sql语句总结(一)(查询)

常用sql语句总结(一)(查询) 数据操作语句:DML 数据定义语句:DDL 数据控制语句:DCL (执行顺序------序号) 一.基本查询: 1. SELECT * ----- 2 FROM 数据来源,- ----- 1; ---数据来源可以是多个表或者其他范围 或者 SELECT 字段,字段- -----可以列出想要查询的字段名 FROM 数据来源,--; 2.去重复查询(DISTINCT): SELECT DISTINCT 字段,字段-.. FROM 数据来源,-; 3.查询取别名: S