在from中使用子查詢(把子查詢的數(shù)據(jù)當(dāng)成新表)
問題:顯示高于自己部門平均工資的員工信息竿秆。
? ? ? ? ? ?select t1.ename,t1.sal from briup_emp,(select deptno,avg(sal) mysal from briup_emp group by deptno) t2 where t1.deptno=t2.deptno and t1.sal>t2.mysal;
在create中使用子查詢
create table myemp(id,name,sal) as (select empno,ename,sal from briup_emp);
在insert中使用子查詢
insert into myemp (select empno,ename,sal from briup_emp where ename='Smith');
在update中使用子查詢
把Larry的工資改成和Smith一樣幽勒。
update briup_emp set (sal,job)=(select sal,job from briup_emp where ename='Smith') where ename='Larry';
查詢某一個表中的前幾條數(shù)據(jù) :
在mysql中:limit
1切揭、查詢第1000條到1005條數(shù)據(jù)膛檀。
select * from tablename limit 999,6;
2俐筋、查詢前十條數(shù)據(jù)躲雅。
select * from tablename limit 10;
3籍凝、查詢第三條到最后一條數(shù)據(jù)路媚。
select * from tablename limit 2,-1;
Oracle rownum:rownum偽列黄琼,Oracle 8開始出現(xiàn)的,把每張表中的行數(shù)進行編號整慎,始終從1開始脏款。
問題:查詢員工表中的前十條數(shù)據(jù)。
? ? ? ? ? ?select rownum,ename from briup_emp where rownum<=10;
? ? ? ? ? ?查詢員工表中部門號為1的員工的前十條數(shù)據(jù)裤园。
? ? ? ? ? ?select * from (select rownum,ename from briup_emp where deptno=1) where rownum<=10;
? ? ? ? ? ?查詢員工表中第5條到第10條數(shù)據(jù)撤师。
? ? ? ? ? ?select?rownum,ename from briup_emp where rownum>=5 and rownum<=10;? ? error;
? ? ? ? ? ?把rownum實體化:
? ? ? ? ? ?select rownum rn,ename from (select rownum rn,ename from briup_emp where rownum<=10) where rn>=5;
合并查詢(合并多個select的結(jié)果):
查詢工資大于5000或者工種是java的員工的信息。
union并集拧揽,去掉重復(fù)行剃盾。
select ename,sal,job from briup_emp where sal>5000 union select ename,sal,job,from?briup_emp where job='java';
union all:包含重復(fù)行
select ename,sal,job from briup_emp where sal>5000 union all select ename,sal,job,from?briup_emp where job='java';
問題:工資大于5000且工種是java的員工信息。
select ename,sal,job from briup_emp where sal>5000 union intersert ename,sal,job,from?briup_emp where job='java';
Oracle中的函數(shù)
函數(shù)的作用:
1强法、方便對數(shù)據(jù)的統(tǒng)計
2万俗、處理查詢結(jié)果(通過身份證號得到生日)
——數(shù)值函數(shù)????????
? ? ? ?四舍五入:
? ? ? ?round(n【,m】)
select round(12345.678,2),(12345.678,-2) from dual;
取整函數(shù):
floor(n)向下取整
ceil(n)向上取整
select floor(12345.678),ceil(12345.678)?from dual;
常用計算:
abs(n)絕對值
select abs(10),abs(-10),abs(0) from dual;
mod(m饮怯,n)取余函數(shù)
select mod(10,3),mod(10,0) from dual;
power(m闰歪,n)求m的n次冪
select power(3,4) from dual;
sqrt(m)求m的平方根
select sqrt(9) from dual;
三角函數(shù):
sin(x)asin(x)
cos(x)acos(x)
tan(x)atan(x)
——字符函數(shù)
lower(s):將字符串轉(zhuǎn)成小寫格式
upper(s):將字符串轉(zhuǎn)成大寫格式
initcap(s):將首字母轉(zhuǎn)成大寫格式
length(s):獲取字符串長度
select ename from briup_emp where length(ename)=5;
substr(s,index蓖墅,length)
select substr('wangxiaohong',2,5) from dual;
select substr(ename,1,3) from briup_emp;
replace(s库倘,m,n)
select replace('abcde','a','哈哈') from dual;
綜合案例:顯示員工的姓名论矾,要求首字母小寫教翩,其他字母大寫。
select lower(substr(ename,1,1)) || upper(substr(ename,2,length(ename)-1)) from?briup_emp;
——日期函數(shù)
sysdate:系統(tǒng)時間
add_month(m,n)
select add_month(sysdate,5) from dual;
問題:查詢?nèi)肼殨r間超過八個月的員工贪壳。
select ename,startdate?from briup_emp where sysdate>add_month(startdate,8);
查詢?nèi)肼殨r間滿十年的員工的信息饱亿。
select ename,startdate?from briup_emp where sysdate>add_month(startdate,120);
next_day(m,n)
select next_day(sysdate,'星期一') from dual;
months_between(m,n)
select months_between('13-6月-1992','22-8月-1992') from dual;
last_day(m)
select last_day(sysdate) from dual;
問題:找出入職時間是入職當(dāng)月的倒數(shù)第三天入職的員工。
select ename,startdate from briup_emp where last_day(startdate)-2=startdate;
——轉(zhuǎn)換函數(shù)
日期轉(zhuǎn)換字符串
to_char(m[,n,params])
select to_char(sysdate,'yyyy-mm-dd') from dual;
字符串轉(zhuǎn)日期
to_date(s[,n,params])
select to_date('2001-01-01','dd-mm-yyyy') from dual;
數(shù)字轉(zhuǎn)換字符串
to_char(number[,params])
字符串轉(zhuǎn)數(shù)字
to_number(s)