目录
多表查询
1.准备工作
2--创建表格
3--插入数据
2.笛卡尔积查询
3.内连接查询
1--隐式内连接
格式
查询
2--显示内连接(Inner join .. on )
格式
查询
4.外连接查询
1--左外连接查询(LEFT OUTER JOIN .. ON )
格式
查询
2-- 右外连接查询(RIGHT OUTER JOIN .. ON )
格式
查询
5.总结
多表查询
1.准备工作
2--创建表格
-- 创建表格 CREATE table class ( class_id INT PRIMARY KEY AUTO_INCREMENT, class_name VARCHAR(20) ); create table student ( id INT PRIMARY KEY AUTO_INCREMENT; student_name VARCHAR(30), student_sex char(1), student_info VARCHAR(500), student_class_id int, -- 添加主键约束 CONSTRAINT student_class_fk FOREIGN KEY(student_class_id) REFERENCES class(class_id) );
![]()
3--插入数据
-- 插入数据 insert into class VALUES (null, '一班'), (null, '二班'), (null, '三班') ; INSERT into student VALUES (null, '偷走晚霞的人', '男', '一个学生', 1), (null, '惜.己', '男', '一个学生', 2), (null, '小玖', '女', '一个学生', 1), (null, '张三', '男', '一个学生', 3), (null, '莉莉', '男', '一个学生', 1), (null, '雪夜', '男', '一个学生', 2), (null, '小明', '女', '一个学生', 1), (null, '小新', '男', '一个学生', 3) ;
2.笛卡尔积查询
select * from 表名1, 表名2, 表名3......
-- 对student表和class表进行笛卡尔积查询 select * from class, student;
可以发现有很多重复的数据。
3.内连接查询
1--隐式内连接
通过where 条件 把 两个表有外键关联的地方进行查询
格式
注意:这里 表1是主表,表二是从表
select * from 表名1, 表名2 where 表名1.主键字段 = 表名2.外键字段
查询
-- 这里是通过有外键关联的字段相等去查询 select * from class, student where class.class_id = student.student_class_id ;
注意:这里可以使用起别名 引用表1和表二。这里不再演示了。
2--显示内连接(Inner join .. on )
格式
select *(或者字段的名字) from 左表 inner Join 右表 on 条件
查询
查询一班 '叫偷走晚霞的人'
-- 查询一班 '叫偷走晚霞的人' select * from class as c INNER JOIN student as s on c.class_id=s.student_class_id WHERE s.student_name = '偷走晚霞的人';
4.外连接查询
1--左外连接查询(LEFT OUTER JOIN .. ON )
左表为准,匹配到正常显示,匹配不到显示为null
格式
select 字段 from 表名1 left outer join 表名2 on 表名1.字段 = 表名2.字段;
查询
-- 左查询 SELECT * from class c LEFT OUTER JOIN student s ON c.class_id = s.student_class_id;
我这里没有准备为空的数据,这里没有显示到。
2-- 右外连接查询(RIGHT OUTER JOIN .. ON )
右表为准,匹配到正常显示,匹配不到显示为null
格式
select 字段 from 表名1 right outer join 表名2 on 表名1.字段 = 表名2.字段;
查询
-- 右查询 SELECT * from class c RIGHT JOIN student s ON c.class_id = s.student_class_id;
我这里没有准备为空的数据,这里没有显示到。
5.总结
内连接:查询两张表共有部分
左外:左表为准,查询左表中所有的数据与右表中有共有的部分
右外:右表为准,查询右表中所有的数据与左表中有共有的部分