oracle学习笔记

表为emp,dept
网页sql:http://localhost:port/isqlplus/
sqlplus SYSTEM/密码 as sysdba;
alert user scott account unlock;
conn scott/tiger;
clear scr;
查看表结构
desc table名
oracle 中专门有一张空表供开发人员使用,用来算各种各样表达式。如:2*3
select 2*3 from dual;
给表行起别名
select sal*12 salYear from emp; FAQ:salYear 为(sal*12)别名
select sal*12 "salYear" from empl;
字符串连接符号: ||
sql 语句中表示字符串用单引号。
sql语句中用两个单引号表示一个单引号。
select distinct name from emp; distinct表示取消重复行。
找到值为null的行
select no from emp where name is null;
字符串用单引号
select * from emp where ename=‘’;




sql函数




单行函数(表有几行数据就输出几行结果,也就是说每一行有一个结果)
小写
select * from emp where lower(ename) like '_a%';
substring 
select substr(ename,1,3) from emp;(从第一个字符开始截取三个)
chr
select chr(65) from dual;(将65转换为其所对应的ASCII码值)
ascii
select ascii('A') from dual;
round
select round(23.4) from dual;(四舍五入)
select round(23.45,1) from dual;(四舍五入到小数点第一位)
to_char(将数字和字符串转换为特定的格式)
select to_char(hiredate,‘YYYY-MM-DD HH24:MM:SS') from emp;
to_date讲给定的格式转化为日期
select ename,hiredate from emp where hiredate> to_date('1999-12-23 12:12:12','YYYY-MM-DD HH:MI:SS');
nvl(如果值为空转换为0)
selelct ename,sal*12+nvl(comm,0);




多行函数也成组函数(不管表中有几行数据都返回一个结果)如:AVG,max,min,count,sum *****(很重要)
select count(distinct deprno) from emp;
select max(sal) from emp group by deptno,job;
select avg(sal) from emp group by deptno;
group by 规则
如果在select后的字段没有出现在组函数里必须出现在group by 里
select ename,max(sal) from emp group by deptno;为错误语句
having表示分组后的筛选条件。
where表示单条数据的帅选条件
select deptno,avg(sal) from emp group by deptno having avg(sal)>2000;


语句执行过程******************(牢记)
select * from emp
where sal>2000
group by deptno
having 
order by 


先执行select在执行where筛选,在执行分组group by ,接着执行组函数限制条件having最后执行排序。


子查询


select ename,sal from emp where sal=(select max(sal) from emp);




理解子查询要把子查询当作一张表来看待
(求部门中谁的工资最高)
select ename,sal from emp 
join (select deptno,max(sal)max_sal from emp)t
on(emp.sal=t.max_sal and emp.deptno=t.deptno);
其中t为子查询后给表的名字,max_sal为max(sal)列的别名。


表的自连接
select e1.ename,e2.ename from emp e1,emp e2 where e1.mgr=e2.empno;


sql1999表链接的新语法
select ename,dname from emp join dept on(emp.deptno = dept.deptno);
其中on为链接条件。筛选条件用where。


表的外连接
左外链接
select e1.ename,e2.ename from emp e1 left join emp e2 on(e1.mgr=e2.empno);
左外连接是把左边表的全部数据显示出来,不管条件匹不匹配。
全链接用full把左右两边的全部显示。
(求部门平均工资等级) 
select deptno,grade from 
(select avg(sal)sal_avg,deptno from emp group by deptno)t
 join salgrade 
on(t.avg_sal between salgrade.losal and salgrade.hisal);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值