关闭

韩顺平oracle视频笔记三

231人阅读 评论(0) 收藏 举报

查看一个表的结构
desc scott.dept;

打开显示操作的开关,即相关操作显示多长时间
set timing on;

指定查询列比查询所有列要快

create tables users(
userid varchar2(20),
username varchar2(20),
password varchar2(20)
);
insert into users(userid,username,password)select * from users;
按照上面的操作将会是呈指数增长


select distinct deptno from emp;
select distinct * from emp;

SQL语句的where区分大小写
SQL> select deptno,job,sal from emp where ename='smith';
SQL> select deptno,job,sal from emp where ename='SMITH';
但是SQL语句的关键字——列明、表明、关键字都不区分大小写

select sal*13 as "年工资",ename from scott.emp;
注意:上面的重命名使用的是“双引号”
select sal*13+comm as "年工资",ename from scott.emp;
注意:上面的查询结果可以发现有些人的工资是没有的,因为oracle查询运算发现如果有一个值为空则值的结果就位空
select sal*13+nvl(comm,0) as "年工资",ename from scott.emp;
备注:nvl(comm,0),如果comm的值为空就变为0,如果不为空就是comm

如何根据时间条件查找?查找大于1982年入职的同时信息
select * from emp where emp.hiredate>'1-1月-1982';
查询工资大于2000小于2500的员工信息
select * from emp where sal between 2000 and 2500;

%表示0到多个字符
_表示任意单个字符
如何显示首字母为S的员工的姓名?
SQL> select * from emp where ename like 'S%';
如何显示第三个字符为大写O的所有员工的信息?
select * from emp where ename like '__O%';

尽量使用in这种方式,效率比or快多了
SELECT * FROM EMP WHERE EMPNO IN(7369,223,4,12,32,4,324);

显示没有“上级”领导的信息
select * from emp where mgr is null;

查询工资大于500或者是职位为经理并且名字是已J开头的
select * from emp where (sal>500 or job='MANAGER')AND ENAME LIKE 'J%';

select * from emp order by desc;//降序
select * from emp order by asc;//升序,默认的

查询部门号降序,工资降序排列——先排列deptno降序,然后再在同deptno情况下对sal再次降序排列
select * from emp order by deptno desc ,sal desc;
select  ename,(sal*13+nvl(comm,0)) "年薪" from emp order by "年薪" desc;


数据分组——max,min,avg,sum,count
显示员工的最高和最低工资
select max(sal) as "最高工资",min(sal) as "最低工资" from emp;
显示最高薪水员工的信息
select * from emp where sal in(select max(sal) as "最高工资" from emp);
select * from emp where sal=(select max(sal) as "最高工资" from emp);

显示所有员工的平均工资和工资总和
SQL> select avg(sal) from emp ;
查询大于平均工资的员工信息
select * from emp where sal < (select avg(sal) from emp );
计算共有多少员工
select count(*)from emp;

group by对查询结果分组统计
显示每个部门的平均工资和最高工资
select deptno,avg(sal),max(sal) from emp group by deptno;
显示每个部门的每种岗位的平均工资和最低工资
SQL> select deptno,job,avg(sal),max(sal) from emp group by deptno,job;
显示平均工资低于2000的部门号和他的平均工资
select deptno,avg(sal)from emp group by deptno having avg(sal)>2000;
having子句用于限制分组显示结果

如果一个查询语句如果同时包含下面三个限制条件,顺序如下
group by --> having --> order by

多表查询(就是多张表记录的成积即“”)笛卡尔积
select dept.dname from dept,emp where dept.deptno=emp.deptno;
select distinct dept.dname from dept,emp where dept.deptno=emp.deptno;


自连接查询
查询某个员工的上级领导的姓名,比如是FORD
select boss.* from emp worker,emp boss where worker.ename='FORD' and worker.mgr=boss.empno;

嵌套查询
显示与SMITH同一部门的所有员工
select * from emp where deptno = (select deptno from emp where ename='SMITH');
select * from emp where deptno in (select deptno from emp where ename='SMITH');
备注:数据库的执行时“从左到右”
查询和部门10的工作相同的雇员的名字、岗位、工资、部门号
SQL> select * from emp where emp.job in  (select job from emp where emp.deptno=10);

关于多列嵌套查询
查询与SMITH部门和工作相同的人员信息;
select * from emp where (deptno,job)=(select deptno,job from emp where ename='SMITH');

高于自己部门平均工资的员工信息
1、查询各个部门的平均工资和部门编号
select deptno,avg(sal) from emp group by deptno;
2、把上面的查询看做是一张子表
select a1.*,a2.mysal from emp a1,(select deptno,avg(sal) as mysal from emp group by deptno) a2 where a1.sal > a2.mysal and a1.deptno = a2.deptno;
备注:(在这里针对ORACL)在给表取别名的时候不要用as,否则会报错,但是可以给列取别名用as
当from子句中使用子查询时,该子查询会被作为一个视图来对待,因此叫作内嵌视图,当在from子句中使用子查询时,必须给子查询指定别名


ORACL分页查询
1、rownum分页
select * from emp;
2、找到rownum属性的值
select a1.*,rownum rn from (select * from emp) a1;
3、查询rn小于10的数据
select * from (select a1.*,rownum rn from (select * from emp) a1) a2 where a2.rn<10;
4、限定查询的rn大于6的数据
select * from (select * from (select a1.*,rownum rn from (select * from emp) a1) a2 where a2.rn<10)a3 where a3.rn>6;

倒表(创建一个已有表的一部分或者是全部,也把数据复制了)
SQL> create table my_emp(id,name,sal)as select empno,ename,job from emp;
SQL> desc my_emp;
Name Type         Nullable Default Comments
---- ------------ -------- ------- --------
ID   NUMBER(4)    Y                        
NAME VARCHAR2(10) Y                        
SAL  VARCHAR2(9)  Y                        
SQL> select * from my_emp;

希望SCOTT的岗位、工资、补助和SMITH一样
update emp set(job,sal,comm)=(select job,sal,comm from emp where ename='SMITH') where ename='SCOTT';

 

  • 大小: 4.4 KB
  • 大小: 9.1 KB
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:281909次
    • 积分:8447
    • 等级:
    • 排名:第2300名
    • 原创:1096篇
    • 转载:14篇
    • 译文:0篇
    • 评论:4条
    最新评论