Mysql 表与表之间的三种关系
- 表与表之间一般存在三种关系,即一对一,一对多,多对多关系。
article_cate 文章分类表
有id,title,state, 字段
article 文章表
有id,title,description,cate_id,state 字段
一个分类对应 多个文章
一条文章只对应 一个分类
article_cate 表中的ID 关联了 article表中的 cate_id 字段
-
一对一
查询 所有文章 及其 分类ID笛卡尔积连接 select article.id as id,article.title as title,article_cate.title as cate from article,article_cate Where article.cate_id=article_cate.id; 内连接 select article.id as id,article.title as title,article_cate.title as cate from article INNER JOIN article_cate ON article_cate.id=article.cate_id;
-
一对多
返回 分类ID 为 2 的数据
select * from article where cate_id=2
- 多对多
多对多的关系需要借助中间表来关联
三个表 课程表,中间表,学生表 lesson, lesson_student, student
表结构字段如下:
lesson[id,name],
lesson_student[lesson_id,student_id],
student[id,number,password,classId,name]
1、查询张三选修了那些课程
张三的 Id 为 1
普通查询:
SELECT * FROM lesson where id in (select lesson_id from lesson_student WHERE student_id=1);
笛卡尔积关联查询:
SELECT * FROM lesson,lesson_student where lesson.id=lesson_student.lesson_id AND lesson_student.student_id=1;
INNER JOIN(内连接查询):
SELECT * FROM lesson INNER JOIN lesson_student ON lesson.id=lesson_student.lesson_id AND lesson_student.student_id=1;
2、查询 Java 程序设计被那些学生选修了
Java 程序设计的 id 为 2
普通查询:
SELECT * FROM student where id in (select student_id from lesson_student WHERE lesson_id=2);
笛卡尔积关联查询:
SELECT * FROM student,lesson_student
where student.id=lesson_student.student_id AND lesson_student.lesson_id=2;
内连接:
SELECT * FROM student INNER JOIN lesson_student ON student.id=lesson_student.student_id AND lesson_student.lesson_id=2;
左外连接:LEFT JOIN ON
右外连接:RIGHT JOIN ON
左右连接 没有匹配上的数据不会返回