0109 子查询/数据库设计
1、子查询
子查询就是把一个查询的结果当作另一个查询的条件
(1)用等于号
例:查询张三的部门名称
select dname from dept where did=(
select did from emp1 where ename='张三'
)
(2)in 子查询
例:查询开发部的员工信息
select * from emp where did in(
select did from dept where dname='开发部'
)
例:查询测试部和运维部的员工姓名
select ename from emp where did in(
select did from dept where dname='测试部' or dname='运维部'
)
2、联合查询
关键字union 含义是硬将两个表放在一起的结果集
例:查询员工姓名,员工编号,部门编号,部门名
select eid, enamefrom emp
union
select did,dname from dept
注:两个select语句的输出段(结果字段)数目一样,应用中通常类型一样才有意义
结果集中的字段以第一个select语句的字段为准
--
--
数据库设计
MySQL建模过程
(前期三阶段)
1、需求分析阶段:分析客户的业务和数据处理需求
(1)了解需求,(2)标识实体(3)标识实体之间的属性(4)标识实体之间的关系
2、概要设计阶段:设计数据库E-P模型图,确认需求信息准确无误
E-P模型图:方框代表实体,菱形代表关系,椭圆代表属性
绘制E-P模型图的时候 首先要分析实体与实体之间的关系(要以实际业务需求判断关系,不要主观意识)
(1)关系1:一对一:x中的一个实体,最多与Y中的一个实体关联,并且Y中实体最多与x中的一个实体关联
例:一个人只有一张身份证并且一张身份证只能被一个人所拥有
若是1:1关系:将实体转换成表,将任意一端的主键拿到另外一端做外键
(2)关系2:一对多:x中的一个实体,可以与y中的任意一个实体关联,但y中的一个实体只能与x中的一个实体想关联
例:一个班级中右多个学生,但学生只能属于一个班级
若是1:n关系:将实体转换成表,将1端的主键拿到n端的表中做外键
(3)关系3:多对多:x中的一个实体,可以与y中的任意一个实体关联,并且y中的一个实体 可以与x中的任意一个实体相关联
例:学生可以选多门选修课,并且一门选修课可以被多名学生选择
若是m:n关系:将实体转换成表,再建立关系表,将m和n端的主键拿到该表中做外键
例:
某医院病房计算机管理中心需要如下信息:
科室:科室id、科名、科地址、科电话
病房:病房id、床位号、所属科室id
医生:医生id、姓名、职称、所属科室id、年龄、工作证号
病人:病历id、姓名、性别、诊断、主管医生id、病房id
其中,一个病房只能属于一个科室,一个科室可以有多个病房,//那么科室和病房之间的关系是1:n
一个医生只属于一个科室,一个科室可以有多名医生,//科室和医生之间的关系是:1:n
一个医生可负责多个病人的诊治,一个病人的主管医生只有一个。//医生和病人之间的关系是1:n
一个病人只能住一间病房,一间病房可以入住多名病人。//病房与病人之间的关系是1:n
e-r模型图为:
3、详细设计阶段:应用三大范式审核数据库
1、第一范式:要求数据表中的每个字段是不可分割的独立字段
例:
2、第二范式:在第一范式的基础上,要求每张表只表达一个意思,表的每个字段都和主键有依赖
例:
3、第三范式:在第二范式的基础上,要求每张表除了主键之外其他字段只能和主键有决定依赖性关系
例: