Oracle
99语法
--表连接 99语法
--笛卡尔积 cross join
select * from emp,dept;
select * from emp cross join dept;
--等值连接 | 非等值连接
--join ..on
--等值
select empno,ename,emp.deptno,dname from emp join dept on emp.deptno = dept.deptno;
--30部门员工信息 薪资等级信息
select e.deptno,max(sal),count(grade) from emp e join salgrade s on sal between losal and hisal where e.deptno in( 10,30) group by e.deptno;
--查询所有员工的员工信息以及上级经理人信息
select * from emp e1 join emp e2 on e1.mgr = e2.empno order by e1.empno;
--外连接
--主表 : 无论是否满足连接条件,都能显示主表中的数据
--left join : 主表在左边
--right join : 主表在右边
select * from emp e1 left join emp e2 on e1.mgr = e2.empno order by e1.empno;
select * from emp e2 right join emp e1 on e1.mgr = e2.empno order by e1.empno;
select *
from emp e
join dept d
on e.deptno = d.deptno
join salgrade
on sal between losal and hisal;
创建表结构
--在创建表的同时字段后面添加约束,指定约束名
--数据类型(默认字节) 如果想要以字符个数为单位 varchar2(5 char)
create table school(
sid number(5) constraints pk_school primary key,
--唯一约束
sname varchar2(5 char) constraints unique_sname unique,
--学校位置
location varchar2(30),
--表结构结束之前添加约束
constraint loc_not_null check(location not null)
)
主键:primary key —>外加起主键别名constraints
外键:例如要在表结构里面创建那么使用:references 表名(表的主键),倘若在表结构外面那么就用追加字段:foreign key(外键的主表id) —>外加起主键别名constraints
例如:
--DDL
--添加结构中的外键
alter table student add constraint FK_CID foreign key(cid) references clazz(cid);
--修改结构中的删除约束
alter table student drop constraints FK_CID;
删除数据(delete)
- 解说遇到的问题
/*删除数据:
删除的是从表中的数据->正常删除
删除的是主表中的没有被从表数据引用的主表数据的时候,可以直接删除
但是删除的是主表中被从表数据所引用的主表数据的时候
1) 先删除从表中引用了当前主表数据的那些从表数据,然后再删除当前主表数据
2) 删除主表数据的同时,为从表中引用了当前主表数据的外键字段设置为null on delete set null
3) 删除主表数据的同时,删除那些引用了当前主表数据的从表数据 on delete cascade
*/
--外键约束
cid number(5) constraint fk_cid references class(cid) on delete cascade --on delete set null