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、第三范式:在第二范式的基础上,要求每张表除了主键之外其他字段只能和主键有决定依赖性关系

例:

原文地址:https://www.cnblogs.com/-gongxue/p/14256135.html