Mysql条件查询(4)分表的必要性、多表关联查询

在这里插入图片描述
数据的重复叫做冗余

多表操作

1、为什么需要分表?
数据的重复叫做冗余,占据大量的数据存储空间,一旦数据发生变化,此时需要大量改动,容易出错。这时就需要分表 。将一张表分离成多张表,取消数据的冗余。
在这里插入图片描述

CREATE  TABLE classroom(
  id INT PRIMARY KEY auto_increment,
  name VARCHAR(100) NOT NULL UNIQUE,
  descs VARCHAR(255)
)
CREATE TABLE student(
  id INT PRIMARY KEY auto_increment,
  name VARCHAR(50) NOT NULL,
  age int DEFAULT 18,
  gender CHAR(2) DEFAULT '男',
  address VARCHAR(255) DEFAULT '',
  cls_id int 
) 
INSERT INTO classroom(name,descs)VALUES("java开发班","很容易掉头发");
INSERT into classroom VALUES(null,"Python班","不容易掉头发的");
INSERT INTO classroom(name,descs)VALUES("PHP开发班","打游戏");
INSERT INTO classroom(name,descs)VALUES("WEB测试班","唱歌");

INSERT INTO student(name,age,gender,address,cls_id)VALUES("李雷",22,"男","西安",1);
INSERT INTO student(name,age,gender,address,cls_id)VALUES("韩梅梅",19,"女","西安",4);
INSERT INTO student(name,age,gender,address,cls_id)VALUES("张三",16,"男","北京",2);
INSERT INTO student(name,age,gender,address,cls_id)VALUES("李四",18,"女","西安",3);
INSERT INTO student(name,age,gender,address,cls_id)VALUES("王五",15,"男","西安",1);

在这里插入图片描述

2、多表关联查询

在这里插入图片描述
自然、交叉连接查询
SQL92 查询多表,必须声明这几张表的关系

SELECT * FROM classroom,student;

SQL98 查询多表,

SELECT * FROM classroom CROSS JOIN student;

上面的查询叫做全连接查询(cross join)查出两表行乘
– 因为没有告诉两张表关联关系,所以进行自动关联,产生笛卡尔积现象

内连接查询
SQL92

-- SQL92标准下
SELECT * FROM classroom,student WHERE classroom.id=student.cls_id;

继续有条件用and连接
在这里插入图片描述
SQL98标准下(inner join)

-- SQL98标准下
SELECT * from classroom INNER JOIN student ON(classroom.id=student.cls_id);

继续有条件用where连接。

当学生表有一个没有班级时,班级编号为空时 ,内连接就不管用。内连接不能查到空白的,必须查到两张表有关联关系的。
外连接(outer join)
只有SQL98标准

  • 左外连接(left outer join)#左边的表数据全部显示,另一侧如果没有关联关系用null补齐
  • 右外连接(right outer join)#右边的表数据全部显示,另一侧如果没有关联关系用null补齐

在这里插入图片描述

在这里插入代码片

在这里插入图片描述
原来用内连接只能查17条数据,使用外连接可以18条数据

自连接
在这里插入图片描述

#自查询,表的外键是指向自身的

-- 查询所有的顶级板块
SELECT * FROM board WHERE parent_id=0;
-- id_1的版本的所有子版本
SELECT boardName FROM board WHERE id=1;
-- 查询id_1的所有子版本
SELECT * FROM board WHERE parent_id=1;

在这里插入图片描述

外键约束

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值