实例详解MySQL数据库的设计问题
技术百科
零到壹度
发布时间:2018-03-30
浏览: 次 本文主要为大家分享一篇关于MySQL数据库的设计问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧,希望能帮助到大家。
第一题:层级数据库设计
题目描述:现在有10万条左右的数据,记录一个部门的员工。大部门下是层级结构,有许多个子部门。比如,一级部分a,二级部门a’,b’,c’,三级部门a”,b”,c”。试问如何设计数据库,我们需要统计二级部分a’下的所有人数。
分析:
这里用到了一个层级数据库的设计。
CREATE TABLE DEPARTMENT(
DEP_ID INT UNSIGNED AUTO_INCREMENT,
DEP_NAME VARCHAR(10) NOT NULL,
PARENT_ID INT,
PRIMARY KEY(DEP_ID)
)CHARSET=utf8;
插入数据
单个插入
INSERT INTO DEPARTMENT (DEP_NAME, PARENT_ID)
VALUES
('A',NULL);
或者批量插入
INSERT INTO department VALUES(1,'A',NULL),(2,'B',1),(3,'C',1),
(4,'D',2),(5,'E',2),(6,'F',3),(7,'G',3);| dep_id | dep_name | parent_id |
|---|---|---|
| 1 | A | NULL |
| 2 | B | 1 |
| 3 | C | 1 |
| 4 | D | 2 |
| 5 | E | 2 |
| 6 | F | 3 |
| 7 | G | 3 |
显示层级,这里用到了left join,根据这一级的dep_id,寻找它的parent_id,然后通过左连接进行连接,得到当前部门以及他的父部门。
select d1.dep_name as level1, d2.dep_name as level2, d3.dep_name as level3, d4.dep_name as level4 from department as d1 left join department as d2 on d2.parent_id = d1.dep_id left join department as d3 on d3.parent_id = d2.dep_id left join department as d4 on d4.parent_id = d3.dep_id where d1.dep_name='A';
当存储好了部门的层级信息后,我们就开始设计一个部门人员的表。
创建表,并存储部门人员的信息
create table people(
id INT UNSIGNED AUTO_INCREMENT,
name varchar(10) not null,
dep_id INT UNSIGNED,
departname varchar(10),
FOREIGN KEY (dep_id) REFERENCES department(dep_id),
primary key(id)
)charset=utf8;
插入相关的测试数据。
INSERT INTO people VALUES(1,'hgy',4,'D'),(2,'abc',5,'E'),(3,'def',6,'F'),
(4,'ddd',2,'B'),(5,'eee',2,'B');
查找二级部门为B的人,并且列出了他的上级部门信息
select p.id, p.name, d1.dep_name as level1, d2.dep_name as level2, d3.dep_name as level3 from people as p left join department as d1 on d1.dep_id = p.dep_id left join department as d2 on d2.dep_id = d1.parent_id left join department as d3 on d3.dep_id = d2.parent_id where d1.dep_name='B' or d2.dep_name='B' or d3.dep_name='B';
查找二级部门为B的总人数
select count(*) as total from people as p left join department as d1 on d1.dep_id = p.dep_id left join department as d2 on d2.dep_id = d1.parent_id left join department as d3 on d3.dep_id = d2.parent_id where d1.dep_name='B' or d2.dep_name='B' or d3.dep_name='B';
| id | name | department_id | departname |
|---|---|---|---|
| 1 | hgy | 4 | D |
| 2 | abc | 5 | E |
| 3 | def | 6 | F |
| 4 | ddd | 2 | B |
| 5 | eee | 2 | B |
应该考虑到有的人在二级部门(可能没有三级部门,没有四级部门),有的人在一级部门,有的人在四级部门(有一级部门,二级部门,三级部门,四级部门)。
第二题:简单的统计
题目描述:现在有一批学生的成绩,求四门学科总分大于200的学生,并且按逆序排列。
CREATE TABLE STUDENT(
ID INT UNSIGNED AUTO_INCREMENT,
SCORE1 INT NOT NULL,
SCORE2 INT NOT NULL,
SCORE3 INT NOT NULL,
SCORE4 INT NOT NULL,
PRIMARY KEY(ID)
)CHARSET=utf8;INSERT INTO STUDENT VALUES(1,100,98,10,4),(2,100,9,10,4),(3,70,0,180,40),(4,10,98,1,4),(5,30,7,10,4),(6,8,88,1,43);
根据四门成绩的总分进行排序
SELECT id, score1,score2,score3,score4, score1+score2+score3+score4 as total FROM STUDENTwhere score1+score2+score3+score4 > 200 order by score1+score2+score3+score4 desc;
这里是一个不能直接用别名来排序的知识点,
# 很好
# 的人
# 是一个
# 出了
# 有的人
# 这一
# 好了
# mysql
# 四级
# 有许多
# 四门
相关栏目:
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
AI推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
SEO优化<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
技术百科<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
谷歌推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
百度推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
网络营销<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
案例网站<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
精选文章<?muma echo $count; ?>
】
相关推荐
- PHP cURL GET请求:正确设置请求头与身份
- php485在php5.6下能用吗_php485旧
- php485函数怎么捕获异常_php485错误处理
- 如何在 Go 中正确测试带 Cookie 的 HT
- Win11怎么设置屏保时间_调整Win11屏幕保护
- Windows10电脑怎么设置自动连接WiFi_W
- Win11怎么修改DNS服务器 Win11设置DN
- windows如何禁用驱动程序强制签名_windo
- 如何使用正则表达式提取以编号开头、后接多个注解的逻
- C#如何使用XPathNavigator高效查询X
- Python并发安全问题_资源竞争说明【指导】
- PHP接收参数值为空怎么办_判断和处理空参数方法说
- Python大型项目拆分策略_模块化解析【教程】
- Win10怎样卸载TeamViewer_Win10
- Win11怎么设置夜间模式_Windows11显示
- Python字符串处理进阶_切片方法解析【指导】
- php怎么下载安装后测试是否成功_简单脚本验证方法
- c++怎么处理多线程死锁_c++ lock_gua
- Win11怎样安装剪映专业版_Win11安装剪映教
- Python多进程教程_multiprocessi
- Windows10系统怎么查看显卡驱动_Win10
- Win11怎么关闭开机声音_Win11系统启动提示
- Windows10电脑怎么设置防火墙出站规则_Wi
- Windows怎样关闭锁屏广告_Windows关闭
- Win11怎么用设置清理回收站_Win11设置清理
- php会话怎么开启_session_start函数
- Win11怎么禁用键盘自带键盘_Win11笔记本禁
- 如何在Golang中实现自定义Benchmark_
- Windows10如何更改任务栏高度_Win10解
- VSC怎么创建PHP项目_从零开始搭建项目的步骤【
- Win11任务栏怎么固定应用 Win11将软件图标
- Python项目维护经验_长期演进说明【指导】
- Python解释执行模型_字节码流程说明【指导】
- SAX解析器是什么,它与DOM在处理大型XML文件
- Windows如何拦截腾讯视频广告_Windows
- MAC怎么使用表情符号面板_MAC Emoji快捷
- Windows10系统怎么查看系统版本_Win10
- Win11怎么打开旧版计算器_Win11恢复传统计
- 如何在Golang中处理模块包路径变化_Golan
- 如何在Golang中处理云原生事件_使用Event
- Win10如何卸载WindowsDefender_
- Win11怎么设置按流量计费_Win11限制后台流
- Windows蓝屏错误0x00000023怎么修复
- Win11怎么设置虚拟桌面 Win11新建多桌面切
- Drupal 中 HTML 链接被双重转义导致渲染
- 如何在 Go 中正确反序列化多个同级 XML 元素
- Win10怎样清理C盘Steam游戏缓存_Win1
- Windows蓝屏错误0x0000002C怎么解决
- 如何用正则表达式精确匹配最多含一个换行符的起止片段
- 如何使用Golang实现文件加密_Golang c

me as level4
from department as d1
left join department as d2 on d2.parent_id = d1.dep_id
left join department as d3 on d3.parent_id = d2.dep_id
left join department as d4 on d4.parent_id = d3.dep_id
where d1.dep_name='A';
QQ客服