JavaWeb开发思维导图之——MySQL数据库多表操作(21)

一 概述

  • 概念
  • 分类
  • 多表查询

二 内容详情

2.1 概念

  • 多张表
  • 表与表之间由关联关系
  • 关系通过外键约束实现

2.2 分类

1-1对1

  • 使用场景: 人和身份证
  • 建表原则: 在任意一个表建立外键,去关联另外一个表的主键
  • 表: 1-人(person)、2-身份证(card)
  • 示例:1-create table peson(id int primmary key auto_increment,name varchar(20));//person表

2-1对多

  • 使用场景:1-用户和订单(1用户多订单)、2-商品分类和商品(1分类多商品)
  • 建表原则:在多的一方建立外键约束,关联少的一方主键
  • 表:1-用户表(user)、2-订单表(orderlist)
  • 示例:create table orderlist(id int primary key auto_increment,number varchar(20),uid int, constraint ou_fk1 foreign key (uid) references user(id));//orderlist创建约束

3-多对多

  • 使用场景:学生和课程
  • 建表原则:需要借助第三张表,中间至少包含两个列、两个列作为中间表的外键,分别关联两张表的主键
  • 表:1-学生表(stuent)、2-课程表(course)、3-中间表(stu_course)
  • 示例:create table stu_course(id int primary key auto_increment,sid int, cid int, constraint sc_fk1 foreign key (sid) references student(id),constraint sc_fk2 foreign key (cid) references course(id));//中间表

2.3 多表查询

1-内连接查询

  • 查询原理: 内连接查询的是两张表有交集的部分数据(有主外键关联的数据)
  • 查询语法:1-显式内连接: select 列名 from 表名1 [inner] join 表名2 on 条件;、2-隐式内连接: select 列名 from 表名1,表名2 where 条件;
  • 示例:查询用户姓名, 年龄。和订单编号: select u.name,u.age,o.number from user u inner join orderlist o on o.uid=u.id;

2-外连接查询

  • 左外连接:查询语法: select 列名 from 表名1 left [outer] join 表名2 on 条件;
  • 右外连接:查询语法: select 列名 from 表名1 right [outer] join 表名2 on 条件;

3-子查询

  • 概念:查询语句中嵌套了查询语句,我们将嵌套的查询称为子查询
  • 分类:1-结果是单行单列的、2-结果是多行单列的、3-结果是多行多列的

4-自关联查询

  • 1-要求:查询所有员工的姓名极其上级的姓名, 没有上级的员工也要查询
  • 3-示例:select e1.id,e1.name,e1.mgr,e2.id,e2.name from employee e1 left outer join employee e2 on e1.mgr=e2.id;

三 思维导图

javaweb-ximd-mysql-table-5