设为首页 收藏本站
查看: 736|回复: 0

[经验分享] oracle简单笔记学习2

[复制链接]

尚未签到

发表于 2016-7-18 07:06:30 | 显示全部楼层 |阅读模式
select from wheregroup byhaingorder by
先看一下表的大小:         select count(*) from table _name;
min /max/avg/sum/count忽略空值
group by
having
部门的平均工资大于2000的
select deptno,avg(sal) from emp group by deptno
having avg(sal)>2000;
---------|凡是对组函数过滤分组以后使用的是having
select deptno,count(*)
from emp
group by deptno
having count(*)>=5
order by count(*);
where-->group by-->having
关联查询
内连接 t1  joint2  on t1.c1=t2.c2
外连接t1 left/right/full outerjoin t2
on t1.c1=t2.c2

子查询   (非关联子查询)//内表的查询的次数为整个的查询依据
select ename from emp where sal>
(select sal from emp where ename='FORD');
select  *from emp
where sal=(select min(sal) from emp);
如果子查询,返回一个数据。可以使用=><=这些单行比较运算符号
如果子查询返回多行数据,必须使用多行比较运算符号:in
------------------------>把每一个部门下的clerk都列出来的人都列出来
select  ename,job
from emp
where deptno in(select deptno from emp where job='CLERK');
------>如果子查询返回结果中有null值,且使用not in运算符号,则无结果
select ename from emp
where empno not in (select mgr from emp)  //无结果

每个部门最多薪水的人
select deptno,ename,sal
from emp
where (deptno,sal) in
(select deptno,max(sal) from emp group by deptno);
多行与多行匹配的时候where以后要与子查询select后面的匹配相同

对分组结果进一步过滤
----比部门20的平均薪水高的是
select deptno,avg(sal)
from emp
group by deptno
having avg(sal)>
(select avg(sal) from emp where deptno=20);

关联子查询
loop的方式
求那些员工比本部门的平均工资要高
select deptno,ename,sal
from emp o
where sal>(select avg(sal) from emp where deptno=o.deptno)
---group by deptno;

exists------>只判断是否有下属,遍历完外层为止,取决于外表的记录条数
查询出所有有下属 的员工(是其他人的经理)
select ename,job,deptno
from emp outer
where exists(select 'x'from emp where mgr=outer.empno);
exists如果outer.empno每一个去遍历mgr,一旦存在,就return返回true

not exists
查询出没有员工的部门
select deptno,dname
from dept outer--外层主查询中的表,,从外层开始循环,判断外层在内层中是否存在
where not exists(select 'X' from emp where deptno=outer.deptno);
not exists如果outer.deptno的每一个被emp中的deptno去遍历,返回false的时候,就存在结果集中

集合操作
union去掉重复的值的/union all不去掉重复的数值并
intersect交集
minus差
A={1,2,3,4,5,6,7}
B={2,4,5,6}
A union B={1,2,3,4,5,6,7}
A union all B={1,2,2,3,4,4,5,5,6,6,7,}
A intersect B={2,4,5,6}//交集合
A minus B={1,3,6,7}
数据类型和个数都是相同的

union all

select worker.ename,manager.ename
from emp worker join emp manager
on worker.mgr=manager.empno
union all
select ename ,'BOSS'
from emp where mgr is null;

select job from emp where deptno=10;
select job from emp where deptno=20;

约束条件。
主键primary key,,,PKunique+not null
外键foreign key .,,,FK--------------->描述两个表之间的关系
唯一:unique
非空:not null
检查:check

建表
---------------create table
create table student_sun(
id number primary key,
name varchar2(20),
emailchar(40),
registtimedate   default sysdate
)
varchar2(size)变长的

insert into student_sun
(id,name,email,registtime)
values
(001,'sunzongbao','sunzongbao@sina.com',to_date('2000-12-12','yyyy-mm-dd'));
===insert into student_sun values(2,'chris','chris@1.com',sysdate);
如果增加的不是全部的字段,必须提供字段列表
insert into student_ning(id,name) values(3,'zhangbuji');

char如果不写的话就一个字节,varchar2按照字符的长度去存,varchar是按照指定的长度
Number(4,3)总共4位,小数点后面有3位
Number(2,4)有效数字是2位,小数点后要有4位    0.0011;

------------>一次增加多条语句
insert into student_sun(id,name)
select empno,ename from emp
where deptno=20;

在sqlplus中调整格式
以列宽为例子
------将指定列名调整为指定的10个字符长度(a)
column 列名 format a10
column  name format a15
col email for a15

--创建主键约束
---1)建表时创建,可以建立在列级或表级
constraint
例1.----yi   student_sun为例
create table student_sun(
id number primary key,
name varchar2(20),
emailchar(40),
registtimedate   default sysdate
)
1)select  constraint_name,constraint_type
from user_constraints
where table_name='STUDENT_SUN';--保存当前信息不能修改的表
2)创建主键约束,自己命名,建立在表级
create table student_sun1(
id number,
name varchar2(20),
CONSTRAINT student_sun1_id_pk primary key(id)
);--student_sun1_id_pk是约束条件的名字
3)--建表后创建主键约束
--->约束条件名称自定义(studentsun2_id_pk),最好有意义
create table student_sun2(
id number,
name varchar2(20)
);
alter table student_sun2  add constraint studentsun2_id_pk primary key(id);
--------->了解主键约束条件的作用
insert into student_sun(id,name) values (1,'sun');
--重复执行上一条语句ORA-00001违反唯一约束
--不提供主键值,将返回"id不能为空"错误
insert into student_sun(name) values('pert');

--删除表->
drop table student_sun2;
drop table student_sun1;
create table student_sun1(
id number primary key,
name varchar2(20) not null
);
--要求此列上必须有值,错误的sql
insert into  student_sun1(id) values(1);
-->创建唯一约束
---email建立在列级
--nickname建立在表级别
create table student_sun1(
id  number primary key,
name varchar2(20),
nickname varchar2(20),
emailchar(30)unique,
constraintstudent_sun1_nickname_uk unique(nickname)
);
insert into student_sun1(id,name,nickname,email)
values
(1234,'perter','monkeystar','s');
----唯一约束允许为空,但不允许重复
------4 check约束
create table student_sun2(
id numberprimary key,
namevarchar2(20),
sexchar,
constraintstudent_sun2_sex_ckcheck(sex in('M','F'))
);
insert into student_sun2 values(1234,'dsad','M');
insert into student_sun2 values(1234,'dsad','A');--错误

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-245461-1-1.html 上篇帖子: oracle简单笔记学习 下篇帖子: oracle简单笔记学习3
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表