Oracle学习笔记(三)
Oracle学习笔记(三)过滤分组结果selectfromwheregroup byhavingorder by--凡是对组函数过滤,使用havingselect deptno, avg(sal)from empgroup by deptnohaving avg(sal) > 2000;where -> group by -> havingselect deptno, count(*)from empgroup by deptnohaving count(*) >= 5order by count(*);非关联子查询select sal from empwhere ename = 'FORD';select ename from empwhere sal > 3000;--子查询select ename from empwhere sal >(select sal from empwhere ename='SMITH');select ename, salfrom empwhere sal = (select min(sal) from emp);--如果子查询返回一个数据,可以使用=,>,<,>=,<=这些单行比较运算符.--如果子查询返回多行数据,必须使用多行比较运算符:inselect ename, jobfrom empwhere deptno in(select deptno from empwhere job = 'CLERK');--如果子查询返回结果中有null值,且使用not in 运算符,则无结果.select ename from empwhere empno not in(select mgr from emp);--整个emp表中薪水最高的人select ename, salfrom empwhere sal = (select max(sal) from emp);--每个部门薪水最高的人select deptno, ename, salfrom empwhere (deptno, sal) in(select deptno, max(sal)from empgroup by deptno);--比部门20的平均薪水高的部门select deptno, avg(sal)from empgroup by deptnohaving avg(sal) >(select avg(sal) from empwhere deptno = 20) ;关联子查询--哪些员工的薪水比本部门的平均薪水高select ename, sal, deptnofrom emp outerwhere sal > (select avg(sal) from empwhere deptno = outer.deptno);select ename, job, deptnofrom emp outerwhere exists (select 'a' from empwhere mgr = outer.empno);--哪些部门没有员工select deptno, dnamefrom dept outerwhere not exists (select 'x' from empwhere deptno = outer.deptno);--集合操作A = {1,2,3,4,5,6}B = {2,4,6,8}A union B = {1,2,3,4,5,6,8}A union all B = {1,2,2,3,4,4,5,6,6,8}A intersect B = {2,4,6}A minus B = {1,3,5}--union allselect worker.ename, manager.enamefrom emp worker join emp manageron worker.mgr = manager.empnounion allselect ename, 'boss'from empwhere mgr is null;--将sql中的union换成--union all/intersect/minus试一下select job from emp where deptno = 10unionselect job from emp where deptno = 20;约束条件主键:primary key, PK = unique + not null外键:foreign key, FK唯一:unique非空:not null检查:checkF:female / M:maleMajor: 专业--建表create table student_ning(id number primary key,name varchar2(20),email char(40),registtime date default sysdate);--新增记录INSERT INTO student_ning(id,name,email,registtime)VALUES(1,'peter','peter@123.com',sysdate);--如果新增全部字段,可以省略字段名称INSERT INTO student_ning VALUES (3,'chris','chris@1.com',sysdate);--如果增加的不是全部字段,必须提供字段列表INSERT INTO student_ning(id, name) VALUES(13,'bono');--一次增加多条记录--使用子查询代替valuesinsert into student_ning(id, name)select empno, ename from empwhere deptno = 10;--在sqlplus中调整格式,以列宽为例--特别强调:sqlplus命令,非sql语句.--将指定列明调整为10个字符长度column 字符列名 format a10column 数字列名 format 9999column sal for 9999column ename for a8column job for a9column mgr for 9999col comm for 9999select * from emp;--创建约束条件--如果创建的约束条件没有命名,由系统自动命名的.SYS_Cn.--1.创建主键约束:--1)建表时创建,可以建立在列级或表级.--2)在建表后创建,建立在表级.例1. --以student_ning为例--创建主键约束,不命名,由系统命名,建立在列级.create table student_ning(id number primary key,name varchar2(20),email char(40),registtime date default sysdate);例2.--创建主键约束,自己命名,建立在表级--约束条件命名为:stuning1_id_pkCREATE TABLE student_ning1(id NUMBER,name VARCHAR2(20),CONSTRAINT stuning1_id_pk PRIMARY KEY(id));例3.--建表后创建主键约束--约束条件名称自定义(stuning2_id_pk),最好有意义.create table student_ning2(id number,name varchar2(20));alter table student_ning2add constraint stuning2_id_pk primary key (id);--查看主键约束条件select constraint_name, constraint_typefrom user_constraintswhere table_name='STUDENT_NING2';--了解主键约束条件的作用.insert into student_ning(id, name)values(1234, 'peter');--重复执行上一条语句,试图插入重复id上一个:Oracle学习笔记(四)
下一个:Oracle学习笔记(二)
- 更多Oracle疑问解答:
- 运行exp备份oracle数据库提示oracle-12154错误
- 有没有,生产Oracle Rman 备份脚本的工具啊!
- 初学orcle,希望有大大帮忙解说一下详细步骤,从登录oracle到创建表的过程
- oracle语句问题:一张user表,三个字段,id,name,time,插入记录比如:张三2007,李四2008,张三2011
- 如何写一个ORACLE触发器同步两个表中的数据?
- oracle 如何查看一个服务器上有多少个数据库.
- oracle 创建包的时候错误 求解
- oracle 重复列的问题
- oracle 中如何查处2星期前的数据
- 请教oracle数据库安装中的问题
- 请问谁能提供给我标准的oracle ERP的数据库表结构并详细说明各表主要的作用?
- 安装oracle遇到的问题 invalid entry CRC (expected 0x3e12e795 but got 0x9db0e9fd)
- 我的是ORACLE 10G,在RMAN中如何按指定的时间恢复数据文件啊?
- oracle为什么没有自动增长列
- oracle快捷键都有哪些啊?