当前位置:Gxlcms > 数据库问题 > 常用SQL语句2(Oracle)

常用SQL语句2(Oracle)

时间:2021-07-01 10:21:17 帮助过:3人阅读

/********************************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

人气教程排行