首先掌握基本查询,深入点再掌握数据库表结构设计方法。以下我们以某oracle数据库中的表sys_user、sys_depetment和sys_employee举例
表结构如下:
(1)、sys_user(用户表)
(1)、sys_depetment(部门表)
(2)、sys_employee(雇员表)
ER图到关系模式集的转换
以二元联系类型的转换为例
1. (实体类型的转换):将每个实体类型转换成一个关系模式,实体的属性即为关系模式的属性,实体标识符即为关系模式的键。
2. (联系类型的转换):
1. 若实体间联系是1:1,可以在两个实体类型转换成的两个关系模式中任意一个关系模式的属性中加入另一个关系模式的键(作为外键)和联系类型的属性。
2. 若实体间联系是1:N,则在N端实体类型转换成的关系模式中加入1端实体类型的键(作为外键)和联系类型的属性。
3. 若实体间联系是M:N,则将联系类型也转换成关系模式,其属性为两端实体类型的键(作为外键)加上联系类型的属性,而键为两端实体键的组合。
实例:教学管理的ER图转换成关系模式集
教学管理的ER图
第一步:把三个实体类型转换成三个模式:
系(系编号,系名,电话)
教师(教工号,姓名,性别,职称)
课程(课程号,课程名,学分)
第二步:
1. 对于1:1联系“主管”,可以再“系”模式中加入教工号(教工号为外键,用波浪线表示);
2. 对于1:N联系“聘用”,可以再“教师”模式中加入系编号和聘期两个属性(系编号为外键);
3. 对于1:N联系“开设”,可以再“课程”模式中加入系编号(系编号为外键)
这样得到的三个模式成如下形式:
第三步:对于M:N联系“任教”,则生成一个新的关系模式:
第四步:整合后关系模式如下:
系统用户(用户编号,用户姓名,用户登录名,用户登录密码,雇员编号)
雇员(雇员编号,雇员姓名,年龄,性别,职务,部门编号)
部门(部门编号,部门名称,部门编号)
1、增
insert into sys_user (USERID, USERCODE, USERPASS, EMPID, USERNAME, VALIDFLAG, LASTCHANGEDATE)
values ('c9e5d6f90f02428ea8a9cc4410dc5c06', 'Daibz', 'c4ca4238a0b923820dcc509a6f75849b',
'fd767722ffa741cf89db964873bf4f75', '代邦振', '1', to_date('07-05-2018 13:54:25', 'dd-mm-yyyy hh24:mi:ss'));
2、删
delete from sys_user where usercode='Daibz'
3、改
update sys_user set userpass='c4ca4238a0b923820dcc509a6f75849b' where usercode='test'
update sys_user set userpass='1' where usercode='test'
4、查
select * from sys_user
select * from sys_employee
select * from sys_department
模糊查询:
select * from sys_user where username like '代__'
select * from sys_user where username like '%代%'
多表查询:
多表连接查询通过表之间的关联字段,一次查询多表数据。
下面将依次介绍 多表连接中的如下方法:
1、from a,b
2、inner join
3、left outer join
4、right outer join
两个表的deptno字段关联。
1、from 表1,表2
语法:select a.x,b.y from a,b where a.id=b.id;
实例:
返回所有满足where条件的行
select a.empid as 员工编号, a.empname as 员工名称, b.depname as 部门
from sys_employee a, sys_department b
where a.depid = b.depid; 扩展:查询用户名,姓名,部门,密码select u.username as 用户名,e.empname as 姓名,d.depname as 部门,u.userpass as 密码 from sys_user u,sys_employee e,sys_department d where u.empid=e.empid and e.depid=d.depid
2、inner join
语法:select a.x from a inner join b on a.id=b.id;
inner 可以省略.
实例:
select a.empid as 员工编号, a.empname as 员工名称, b.depname as 部门
from sys_employee a inner join sys_department b on a.depid = b.depid;
扩展:查询用户名,姓名,部门,密码
select u.username as 用户名,e.empname as 姓名,d.depname as 部门,u.userpass as 密码
from (sys_user u inner join sys_employee e on u.empid=e.empid)
inner join sys_department d on e.depid=d.depid
3、left outer join
查询结果除了返回包含连接条件的行,还包含左表(a)中不满足连接条件的行,
其中不满足连接条件的行中b表的字段值将被置为空。
语法:select a.x from a inner left outer join b on a.id=b.id;
outer 可以省略.
实例:
select a.empid as 员工编号, a.empname as 员工名称, b.depname as 部门
from sys_employee a left outer join sys_department b
on a.depid = b.depid;
当查询中出现过滤条件时:
1)当连接条件后面有where条件时:
select a.empid as 员工编号, a.empname as 员工名称, b.depname as 部门
from sys_employee a left outer join sys_department b on a.depid = b.depid where a.empname like '%00%';
解释:先根据连接条件a.depid = b.depid查询,再对查询结果按过滤条件查询。
2)当连接条件后面有and条件时:
select a.empno as 员工编号, a.ename as 员工名称, b.dname as 部门 from scott.emp a left outer join scott.dept b on (a.deptno = b.deptno and b.dname like 'SALES')
解释:先对b表按过滤条件查询,再对结果执行左连接查询。
select a.empid as 员工编号, a.empname as 员工名称, b.depname as 部门
from sys_employee a left outer join sys_department b on (a.depid = b.depid and a.empname like '%00%');
4 、right outer join
查询结果除了返回包含连接条件的行,还包含右表(b)中不满足连接条件的行,
其中不满足连接条件的行中a表的字段值将被置为空。
语法:select a.x from a inner right outer join b on a.id=b.id;
Copyright © 广州京杭网络科技有限公司 2005-2024 版权所有 粤ICP备16019765号
广州京杭网络科技有限公司 版权所有