09-mysql多表查询
来源:互联网 发布:网络密匙 编辑:程序博客网 时间:2024/05/23 13:32
今日任务
完成对MYSQL数据库的多表查询及建表的操作
教学目标
掌握MYSQL中的表关系分析并能正确建表
掌握MYSQL中多表的查询
一、使用SQL 创建多表及分析多表的关系
需求分析:
技术分析:
1多表的关系及创建
1.1多表之间的关系
关联关系:在实际开发中,需要根据实体的内容设计数据表,实体间会有各种关联关系,所以根据实体设计的数据表之间也存在着各种关联关系,MySQL中数据表的关联关系有三种,具体如下:- 一对多/多对一
- 多对一是数据表中最常见的一种关系,比如,员工和部门之间的关系,一个部门可以有多个员工,而一个员工不能属于多个部门,也就是说部门表中的一行在员工表中可以有许多匹配行,但员工表中的一行在在部门表中只能有一个匹配行。
- 表之间的关系通过外键建立的,在多对一的表关系中,应该将外键建在多的一方,否则造成数据的冗余。
- 多对多
- 多对多也是数据表中的一种关系,比如学生与课程之间的关系,一个学生可以选择多门课程,当然一门课程也供多个学生选择,也就是说学生表中的一行在课程表中可以有许多匹配行,课程表中的一行在学生表中的也有许多匹配行。
- 通常情况下,为了实现这种关系,需要定义一张中间表(称为连接表),该表会存在两个外键,分别参考课程表和学生表,在多对多关系中,需要注意的是,连接表的两个外键都是可以重复的,但是两个外键之间的关系是不能重复的,所以这两个外键又是连接表的联合主键
- 一对一
- 一对一关系在实际生活中比较常见,例如人与身份证之间就是一对一的关系,一个人对应一张身份证,一张身份证只能匹配一个人,那么一对一关系的两张表如何建立外键?
- 首先要分清主从关系,从表需要主表的存在才有意义,身份证需要人的存在才有意义。因此人为主表,身份证为从表,要在身份证中建立外键,由实际的经验可知,身份证中的外键必须是非空唯一的,因此会直接用从表(表身份证)的主键作为外键。
--外键约束(多表约束): 外键是指引用另一张表中的一列或多列,被引用的列应该具有主键约束或唯一性约束**.外键用于建立和加强两个表数据之间的连接,实际上是用来约束两张表,约束从表中的记录必须存在于主表中
作用:就是确保表中数据的完整性
从表:商品表依赖于分类表,所以商品称为从表
主表:分类表
书写语法:
注意:
- 插入数据: 数据必须先存在于主表,然后再插入从表中的数据
- 删除主表数据时候: 必须先删除从表中已引用了主表中数据,再删除主表中的数据
- 删除表的时候,如果有从表里面有外键约束,必须先删除从表再删除主表
- 从表在添加外键约束的时候,外键必须是主表中的主键
- 一对多:
- 建表原则: 在多的一方添加一个键,然后让它作为外键指向一的一方
- 例如:学生和班级,一个班级对多个学生,一个学生只属于一个班级,那么就可以在学生表里面建立外键指向班级表的主键
- 商品分类和商品,一个分类下可以有多个商品,一个商品只属于一个分类,那么就可以在商品表里面建立外键指向商品分类表
- 多对多:
- 建表原则:创建一张中间表,将多对多的关系,拆分成一对多的关系, 中间表至少要包含两个外键,这两个外键分别指向各自原来的表
- 例如:学生和选课
- 一对一:
- 建表原则: 1. 将两张表的主键建立连接, 2. 将两张合并成一张表 3. 将一对一的关系,拆分成一对多的关系
- 合并表,拆表
- 例如公民和身份证号
- 网上商城表实例的分析: 用户购物流程
- 用户表
- 订单表
- 商品表
- 商品分类表
- 用户表 (用户的ID,用户名,密码,手机)
- 订单表 (订单编号,总价,订单时间 外键-->用户的ID)
- 分类表
- 商品表 (商品ID, 商品名称,商品价格,商品描述,外键cno)
- 订单项: 中间表(订单ID,商品ID,商品数量,订单项总价)
二、案例:使用商城表完成对商品信息的多表查询
需求分析:
在我们的商城案例中,我的订单中包含很多信息.打开我的订单需要去查询表技术分析:
2多表查询
概述:在关系型数据库管理系统中,建立表时各个数据之间的关系不必确定,通常将每个实体的所有信息存放在一个表中,当查询数据时候,通过连接操作查询多个表中的实体信息,当两个或多个表中存在相同意义的字段时候,便可以通过这些字段对不同的表进行连接查询,连接查询包括交叉连接查询,内连接查询,外连接查询.2.1 -交叉连接查询 (了解)
概述:交叉连接返回的结果是被连接的两个表中所有数据行的笛卡尔积,也就是返回第一个表中符合查询条件的数据行乘以第二个表中符合查询条件的数据行数,例如 department表中有4个部门,employee表中有4个员工,那么交叉连接的结果有4*4=16条数据,注意:交叉查询得到的是笛卡尔积 : 两张表的乘积, 实际没有意义2.2 -内连接查询:(重点学习)
概述:内连接(inner join) 又称为简单连接或自然连接,是一种常见的连接查询,内连接使用比较运算符对两个表中的数据进行比较,并列出与连接条件匹配的数据行,组合成新的结果,也就是说在内连接查询中,只有满足条件的记录才能出现在查询结果中,内连接查询的语法如下:
内连接查询语法:
注意:
- inner join 用于连接两个表
- on 用于指定连接条件
- 其中inner 可以省略
2.3 -外连接查询:(掌握)
概述:内连接查询中,返回的结果只包含符合查询条件和连接条件的数据,然而有时还需要包含没有关联的数据,即返回查询结果中不仅包含符合条件的数据,而且还包括左表(左连接或左外连接)/右表(右连接或右外连接)或者两个表(全外连接)中的所有数据,此时就需要使用外连接查询,外链接分为左连接和右连接.
外连接语法:
select 所查字段 from 表 1 left|right [outer] join 表2 on 表1.关系字段 = 表2.关系字段 where 条件;
- left join(左外连接): 以左表为基础,将左表中所有的记录都查询出来,如果没有对应的记录,用null值填充
- Right join(右外连接):以右表为基础,将右表中的所有记录都查询出来,如果没有对应的记录,用null值填充
其他查询:分页查询 : limit
limit : 起始索引, 查询几条; 索引是0开始--请听题: 每页显示3条数数据, 请查询出第2页的所有数据
select * from product limit 0,3; --第1页
select * from product limit 3,3; -- 第2 页
起始索引: (页数-1)*每页显示数量 ,页数是从1开始
(3-1)*3
(4-1)*3
select * from product limit 6,3;
多表查询练习
查询出(商品名称product,商品分类名称category)信息查询分类名称为手机数码(category)的所有商品(product)
查询1号订单的订单项信息(orderitem)和商品信息(product)
巩固练习
多表查询准备数据
- 员工信息表
- 部门信息表
- 基本查询
- 分组查询
- 多表查询
- 子查询(理解-----了解)
- 在一个查询语句里面需要依赖于另外一个查询语句结果
- -- 员工信息表 CREATE TABLE emp(
- 09-mysql多表查询
- 【MySQL】MySQL多表查询
- MySQL 多表查询
- mysql多表查询
- Mysql多表查询
- MySQL多表查询
- MYSQL多表查询
- MySQL多表查询
- MySQL多表查询
- MySQL多表查询
- MySQL多表查询
- MySQL多表查询
- MySQL多表查询
- mysql 多表查询
- MySQL多表查询
- MySQL多表查询
- MySQL多表查询
- MySql:多表查询
- 数据结构实验之查找三:树的种类统计
- 利用metasploit通过ms_08_067_netapi漏洞渗透winXp
- Day016
- jQuery中的load
- spring mvc 5.0 模型视图详解 07
- 09-mysql多表查询
- linux 命令(一)
- P1387 dp入门
- TabLayout+ViewPager实现tab和页面联动效果
- ElasticSearch-5.0安装head插件
- 自定义控件之AddItemView
- Day017
- 一行命令搞定node.js 版本安装、升级与卸载
- VMWare中创建用户,并与SecureCRT进行远程连接