Rumah  >  Artikel  >  pangkalan data  >  数据库SQL之表关系&连接查询

数据库SQL之表关系&连接查询

WBOY
WBOYasal
2016-06-07 15:42:261428semak imbas

/* 表关系:一对多:多端加外键,一端加主键 多对多:添加一个关系表,变为一对多的关系 一对一:外键--唯一键 E-R图:实体--表 属性--列 元组--行 主键列:唯一仅有的 外键列:用来约束主键列关联项的取 */ --创建 create table book( bid number(5), bname


/*
  表关系:一对多:多端加外键,一端加主键
  多对多:添加一个关系表,变为一对多的关系
  一对一:外键-->唯一键

  E-R图:实体-->表
  属性-->列
  元组-->行
  主键列:唯一仅有的
  外键列:用来约束主键列关联项的取值
 
 
*/

--创建
create table book(
  bid number(5),
  bname varchar2(20),
  slid number(5)
)
--建立主键
alter table book
add constraints PK_BOOKlei
primary key(bid)
--建立外键
alter table book
add constraints FK_BOOK_BOOKlei
foreign key(slid)
references booklei(blid)
--创建
create table booklei(
  blid number(5),
  blname varchar2(20)
)

--多对多 

create table student(
  sid number(5) primary key,
  sname varchar2(20)
)

create table tea_stu(
  tid number(5) references student(sid),
  tid number(5) references teacher(tid)
)

create table teacher(
  tid number(5) primary key,
  tname varchar2(20)
)

--一对一
create table person(
  pid number(5) primary key,
  pname varchar2(20),
  cid number(5) unique references idcard(cid)
)

create table idcard(
  cid number(5) primary key,
  cnumber varchar2(20)
)


--连接查询(笛卡尔积)
--等值连接(不一定是=号,两张表也不一定是有主外键关系)
select * from emp e,dept d where e.deptno = d.deptno
--查询部门为'ACCOUNTING'的员工(***连接查询和嵌套子查询的扫描次数不同***)
select * from emp e,dept d where e.deptno = d.deptno and d.dname = 'ACCOUNTING'
select * from emp where deptno = (select deptno from dept where dname = 'ACCOUNTING')
--查询员工的薪金等级
select * from SALGRADE s,emp e where e.sal between s.losal and s.hisal
--查询各个工资等级的人数
select s.grade,count(*) from emp e,salgrade s
where e.sal between s.losal and s.hisal
group by s.grade
--查询每个部门每种工资等级的人数
select s.grade,d.dname,count(*) from emp e, dept d,salgrade s
where e.deptno = d.deptno and e.sal between s.losal and s.hisal
group by s.grade,d.dname
order by s.grade


--外连接:左外连接 (以左边的表为标准) / 右外连接(以右边的表为标准)
select * from emp e left join dept d on d.deptno = e.deptno

select * from dept d left join emp e on d.deptno = e.deptno
where empno is null

--自连接
select e1.ename,count(*) from emp e,emp e1 where e.mgr = e1.empno
group by e1.ename




Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn