--创建学生表
create table students (
id int unsigned not null auto_increment primary key,
name varchar(20) default '',
age tinyint unsigned default 0,
high decimal(5,2),
gender enum('男', '女', '中性', '保密') default '保密',
cls_id int unsigned default 0,
is_delete bit default 0
);
 
--创建班级表    
create table classes(
id int unsigned auto_increment primary key not null,
name varchar(20) not null
);
--往students表里插入数据
insert into students values
(0,'小明',18,180.00,2,1,0),
(0,'小玥玥',19,180.00,2,2,0),
(0,'彭于晏',28,185.00,1,1,0),
(0,'刘德华',58,175.00,1,2,0),
(0,'黄蓉',108,160.00,2,1,0),
(0,'凤姐',44,150.00,4,2,1),
(0,'王祖贤',52,170.00,2,1,1),
(0,'周杰伦儿',34,null,1,1,0),
(0,'程坤',44,181.00,1,2,0),
(0,'和珅',55,166.00,2,2,0),
(0,'刘亦菲',29,162.00,3,3,0),
(0,'金星',45,180.00,2,4,0),
(0,'静香',18,170.00,1,4,0),
(0,'郭静',22,167.00,2,5,0),
(0,'周杰',33,178.00,1,1,0),
(0,'钱小豪',56,178.00,1,1,0),
(0,'谢霆锋',38,175.00,1,1,0);
 
--向classes表里插入数据
insert into classes values (0, '云唯_01期'),(0, '云唯_02期');
 
 
-- 连接查询
-- inner join ... on
-- 两个表连接查询
select * from students inner join classes
-- 查询能够对应班级的学生以及班级信息
select * from students inner join classes on students.cls_id=classes.id;
-- 按照要求显示姓名,班级
select students.*, classes.name from students inner join classes on students.cls_id=classes.id;
 
-- 给数据表起名字
select s.name, c.name from students as s inner join classes as c on s.cls_id=c.id;
 
-- 查询 有能够对应班级的学生以及班级信息,显示学生的所有信息,只显示班级名称
select students.*, classes.name from students inner join classes on students.cls_id=classes.id;
 
-- 在以上查询中将班级姓名显示在第一列
select classes.name,students.* from students inner join classes on students.cls_id=classes.id;
 
-- 查询有能够对应班级的学生以及班级信息,按照班级进行排序
select classes.id, students.* from students inner join classes on students.cls_id=classes.id order by classes.id;
 
-- 当是同一个班级的时候,按照学生的id从小到大
select classes.id, students.* from students inner join classes on students.cls_id=classes.id order by classes.id, students.id;
 
-- 自关联
create table areas(
aid int primary key auto_increment,
name varchar(20),
pid int
);
-- 查询出河北省所有市
select * from areas as province inner join areas as city on province.aid=city.pid having name='河北省';
select province.name,city.name from areas as province inner join areas as city on province.aid=city.pid having province.name='河北省';
 
-- 子查询
-- 标量子查询
-- 查询出北京市所有区的信息
select * from areas where pid=(select aid from areas where name='北京市');
 
 
select * from areas where pid in (select aid from areas where name='北京市');
 

数据库设计

1.第一范式(确保每列保持原子性)

第一范式是最基本的范式。如果数据库表中的所有字段值都是不可分解的原子值,就说明该数据库表满足了第一范式。

2.第二范式(确保表中的每列都和主键相关)

第二范式在第一范式的基础之上更进一层。第二范式需要确保数据库表中的每一列都和主键相关,而不能只与主键的某一部分相关(主要针对联合主键而言)。也就是说在一个数据库表中,一个表中只能保存一种数据,不可以把多种数据保存在同一张数据库表中。

3.第三范式(确保每列都和主键列直接相关,而不是间接相关)

第三范式需要确保数据表中的每一列数据都和主键直接相关,而不能间接相关。
 
  • 1.1第一范式

 
 
  • 2.1第二范式  

  • 3.1第三范式

   
  • 最终实现的目标

 

E-R模型

E-R模型的基本元素是:实体、联系和属性
  • E表示entry,实体:一个数据对象,描述具有相同特征的事物
  • R表示relationship,联系:表示一个或多个实体之间的关联关系,关系的类型包括包括一对一、一对多、多对多
  • 属性:实体的某一特性称为属性

关系也是一种数据,需要通过一个字段存储在表中

1、实体A对实体B为1对1,则在表A或表B中创建一个字段,存储另一个表的主键值
2、实体A对实体B为1对多:在表B中创建一个字段,存储表A的主键值
 
3、实体A对实体B为多对多:新建一张表C,这个表只有两个字段,一个用于存储A的主键值,一个用于存储B的主键值
 
 

最新文章

  1. Difference Between HashMap and IdentityHashMap--转
  2. Xcode_cocoaPods-超详细傻瓜式安装教程
  3. SVN提交注意点
  4. 通信原理读书笔记:常规AM调制的功率
  5. 你一定能用的上的iOS第三方库
  6. NSFileManager 沙盒文件管理
  7. main()函数的输入参数 main(int argc, char** argv)
  8. Win32下 Qt与Lua交互使用(二):在Lua脚本中使用Qt类
  9. poj 2432 Around the world bfs+哈希
  10. The Embarrassed Cryptographer(高精度取模+同余模定理)
  11. hdu1535(最短路)
  12. 《剑指offer》— JavaScript(1)二维数组中的查找
  13. webpack2学习日志
  14. iOS多线程基本使用
  15. 在没联网环境下,启动tomcat出错
  16. Vue 2.6 中部分引入 TypeScript 的方法
  17. 设置ul的指定li 样式
  18. 小程序循环多个picker选择器,实现动态增、减
  19. hbase 知识点
  20. BFC 从了解到放弃

热门文章

  1. 第一天——编程语言与python
  2. 【升级版】如何使用阿里云云解析API实现动态域名解析,搭建私有服务器【含可执行文件和源码】
  3. Python 最简单的数字相乘
  4. Presto安装完成之后需要做的
  5. [论文分享]Channel Pruning via Automatic Structure Search
  6. 面试常问:Mybatis使用了哪些设计模式?
  7. C# 打开Excel文件
  8. 自动化运维工具-Ansible之2-ad-hoc
  9. 如何解决 ajax跨域被阻止 CORS 头缺少 'Access-Control-Allow-Origin'的问题?
  10. hadoop目录结构