【第七弹】数据库设计

1.数据库设计简介

2.表关系之一对多

3.表关系之多对多

4.表关系之一对一

5.数据库设计案例

分析

音乐专辑表名:Music

字段名

数据类型

说明

title

varchar(32)

专辑名

alias

varchar(32)

专辑别名

image

varchar(64)

封面图片

style

varchar(8)

流派(如经典、流行、民谣、电子等)

type

varchar(4)

类型(专辑、单曲等)

medium

varchar(4)

介质(CD、黑胶、数字等)

publish_time

date

发行时间

publisher

varchar(16)

出版者

number

tinyint

唱片数

barcode

bigint

条形码

summary

varchar(1024)

简介

artist

varchar(16)

艺术家

id

int

编号(唯一)

曲目表名: Song

字段名

数据类型

说明

name

varchar(32)

歌曲名

serial_number

tinyint

歌曲序号

id

int

编号(唯一)

评论表名:Review

字段名

数据类型

说明

content

varchar(256)

评论内容

rating

tinyint

评分(1~5)

review_time

datetime

评论时间

用户表名:User

字段名

数据类型

说明

username

varchar(16)

用户名(唯一)

image

varchar(64)

用户头像图片地址

signature

varchar(64)

个人签名,例如(万般各所是 一切皆圆满)

nickname

varchar(16)

用户昵称

id

int

用户编号(主键)

表关系:

答案:

-- 1.查询所有员工信息。查询员工编号,员工姓名,工资,职务名称,职务描述

/*

分析:

1. 员工编号,员工姓名,工资 信息在emp 员工表中

2. 职务名称,职务描述 信息在 job 职务表中

3. job 职务表 和 emp 员工表 是 一对多的关系 emp.job_id = job.id

*/

-- 隐式内连接

SELECT

emp.id,

emp.ename,

emp.salary,

job.jname,

job.description

FROM

emp,

job

WHERE

emp.job_id = job.id;

SELECT

*

FROM

emp;

SELECT

*

FROM

job;

-- 显式内连接

SELECT

emp.id,

emp.ename,

emp.salary,

job.jname,

job.description

FROM

emp

INNER JOIN job ON emp.job_id = job.id;

-- 2.查询员工编号,员工姓名,工资,职务名称,职务描述,部门名称,部门位置

/*

分析:

1. 员工编号,员工姓名,工资 信息在emp 员工表中

2. 职务名称,职务描述 信息在 job 职务表中

3. job 职务表 和 emp 员工表 是 一对多的关系 emp.job_id = job.id

4. 部门名称,部门位置 来自于 部门表 dept

5. dept 和 emp 一对多关系 dept.id = emp.dept_id

*/

-- 隐式内连接

SELECT

emp.id,

emp.ename,

emp.salary,

job.jname,

job.description,

dept.dname,

dept.loc

FROM

emp,

job,

dept

WHERE

emp.job_id = job.id

and dept.id = emp.dept_id

;

-- 显式内连接

SELECT

emp.id,

emp.ename,

emp.salary,

job.jname,

job.description,

dept.dname,

dept.loc

FROM

emp

INNER JOIN job ON emp.job_id = job.id

INNER JOIN dept ON dept.id = emp.dept_id

;

-- 3.查询员工姓名,工资,工资等级

/*

分析:

1. 员工姓名,工资 信息在emp 员工表中

2. 工资等级 信息在 salarygrade 工资等级表中

3. emp.salary >= salarygrade.losalary  and emp.salary <= salarygrade.hisalary

*/

SELECT

emp.ename,

emp.salary,

t2.*

FROM

emp,

salarygrade t2

WHERE

emp.salary >= t2.losalary

AND emp.salary <= t2.hisalary

-- 4.查询员工姓名,工资,职务名称,职务描述,部门名称,部门位置,工资等级

/*

分析:

1. 员工编号,员工姓名,工资 信息在emp 员工表中

2. 职务名称,职务描述 信息在 job 职务表中

3. job 职务表 和 emp 员工表 是 一对多的关系 emp.job_id = job.id

4. 部门名称,部门位置 来自于 部门表 dept

5. dept 和 emp 一对多关系 dept.id = emp.dept_id

6. 工资等级 信息在 salarygrade 工资等级表中

7. emp.salary >= salarygrade.losalary  and emp.salary <= salarygrade.hisalary

*/

SELECT

emp.id,

emp.ename,

emp.salary,

job.jname,

job.description,

dept.dname,

dept.loc,

t2.grade

FROM

emp

INNER JOIN job ON emp.job_id = job.id

INNER JOIN dept ON dept.id = emp.dept_id

INNER JOIN salarygrade t2 ON emp.salary BETWEEN t2.losalary and t2.hisalary;

-- 5.查询出部门编号、部门名称、部门位置、部门人数

/*

分析:

1. 部门编号、部门名称、部门位置 来自于部门 dept 表

2. 部门人数: 在emp表中 按照dept_id 进行分组,然后count(*)统计数量

3. 使用子查询,让部门表和分组后的表进行内连接

*/

select * from dept;

select dept_id, count(*) from emp group by dept_id;

SELECT

dept.id,

dept.dname,

dept.loc,

t1.count

FROM

dept,

(

SELECT

dept_id,

count(*) count

FROM

emp

GROUP BY

dept_id

) t1

WHERE

dept.id = t1.dept_id

所学内容均来自于黑马程序员

所学内容均来自于黑马程序员

所学内容均来自于黑马程序员

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值