SYS口令:change_on_install
SYSTEM口令:manager
username:scott
password:tiger
--解锁用户
alter user scott account unlock;
--描述表
desc emp;
--dual表是空表,只有一个字段,用于计算数学表达式等使用
select 2*3 from dual;
--任何含有空值的数学表达式,最后计算的结果都是空值
-- || 表示字符串连接
-- 两个单引号里面(中间)的两个单引号代表一个单引号字符
-- distinct关键字用于去除重复,修饰多个字段时,去除的是多个字段的组合重复
-- between and 相当于 “>= <=”
-- 空值条件查询不使用“==”,而是使用is null或者is not null
-- in() 包括哪些值;not in 不包含
-- where、and(并且)、or(或者)、like(模糊查询,%代表多个,_代表一个,\是转义字符)
select ename from emp where ename like '%\%%';
--排序 order by asc / desc
-- function
-- lower():转化为小写;substr(字段,1,3):从第1个字符开始截取,一共截取3个字符;chr(65):把ascii码转化为字母;
-- ascii('A'):把字母转化为ascii码;round():四舍五入;
-- to_char():可以转化数字,也可以转化日期
-- to_date():日期转换
-- to_number()
select to_char(sal,'$99,999.9999') from emp;
select to_char(hiredate,'YYYY-MM-DD HH24:MI:SS') from emp;
select sal from emp where sal > to_number('$1,250.00','$9,999.99');
select * from emp where hiredate>to_date('1981-2-24','YYYY-MM-DD');
-- nvl()
select ename, sal*12 + nvl(comm,0) from emp;
-- group function
-- max()、min()、avg()、sum()、count():会把很多条记录组合在一起,最后产生一个输出;
select count(distinct deptno) from emp;
-- group by
-- 求不同部门的平均薪水
select avg(sal), deptno from emp group by deptno;
-- 求最高薪水的人的名字和薪水
select ename,sal from emp where sal=(select max(sal) from emp);
-- 求各个部门中薪水最高的人的名字和薪水
select ename,sal from emp where sal in(select max(sal) from emp group by deptno) --这是错误的答案
正确答案如下:
select ename,sal from emp join
(select max(sal) as max_sal,deptno from emp group by deptno) t
on (emp.sal = t.max_sal and emp.deptno = t.deptno);
-- having:是对分组进行限制
-- 求不同部门的平均薪水,并且平均薪水大于2000的
select avg(sal), deptno from emp group by deptno
having avg(sal)>2000 order by deptno;
-- 子查询
-- 有哪些人的薪水位于所有人的平均工资之上
select ename,sal from emp where sal>(select avg(sal) from emp)
--求每个部门的平均薪水的等级
select grade from salgrade s join
(select avg(sal) avg_sal from emp group by deptno) t
on (t.avg_sal>s.losal and t.avg_sal<s.hisal);
--求每个人的薪水等级(显示名字、部门、薪水等级)
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)
--求某个人的名字,以及经理人的名字查出来(提示:当成两个表来看待)
select e1.ename,e2.ename from emp e1,emp e2 where e1.mgr = e2.empno; --这种写法叫做自连接
另一种写法:select e1.ename,e2.ename from emp e1 join emp e2 on(e1.mgr = e2.empno);
加入left结果是不一样的:select e1.ename,e2.ename from emp e1 left join emp e2 on(e1.mgr = e2.empno)
--右连接、全连接
select ename,dname from emp e right join dept d on(e.deptno=d.deptno);
select ename,dname from emp e full join dept d on(e.deptno=d.deptno);