MySQL之三张表关联

创建三张表

1、学生表

mysql> create table students(
 sid int primary key auto_increment,
 sname varchar(100) not null,
 age int,
 address varchar(100),
 courseid int,
 constraint fk_stu_cid foreign key(courseid)
 references course(cid)
 );
mysql> insert into students(sname,age,address,courseid) values('小海子',23,'北京',1003);
mysql> insert into students(sname,age,address,courseid) values('小沈阳',45,'沈阳',1003);
mysql> insert into students(sname,age,address,courseid) values('刘阳',25,'山东',1002);
mysql> insert into students(sname,age,address,courseid) values('甘能',22,'广东',1002);
mysql> select * from students;
+-----+--------+-----+---------+----------+
| sid | sname  | age | address | courseid |
+-----+--------+-----+---------+----------+
|   1 | 小海子 |  23 | 北京    |     1003 |
|   2 | 小沈阳 |  45 | 沈阳    |     1003 |
|   3 | 刘阳   |  25 | 山东    |     1002 |
|   4 | 甘能   |  22 | 广东    |     1002 |
+-----+--------+-----+---------+----------+

2、老师表

mysql> create table teacher(
    -> tid int(5) primary key auto_increment,
    -> tname varchar(100) not null,
    -> age int(4),
    -> address varchar(100),
    -> courseid int
    -> )engine=innodb auto_increment=101;
mysql> insert into teacher(tname,age,address) values('马云',50,'杭州');
mysql> insert into teacher(tname,age,address) values('赵本山',52,'沈阳');
mysql> insert into teacher(tname,age,address) values('刘强东',45,'北京');
mysql> select* from teacher;
+-----+--------+-----+---------+----------+
| tid | tname  | age | address | courseid |
+-----+--------+-----+---------+----------+
| 101 | 马云   |  50 | 杭州    | NULL     |
| 102 | 赵本山 |  52 | 沈阳    | NULL     |
| 103 | 刘强东 |  45 | 北京    | NULL     |
+-----+--------+-----+---------+----------+

3、课程表

mysql> create table course(
    -> cid int primary key auto_increment,
    -> cname varchar(100) not null,
    -> xuefen int,
    -> tid int,
    -> constraint fk_course_tid foreign key(tid)
    -> references teacher(tid)
    -> )engine=innodb auto_increment = 1001;
mysql> insert into course(cname,xuefen,tid) values('C++',3,'101');
mysql> insert into course(cname,xuefen,tid) values('java',5,'101');
mysql> insert into course(cname,xuefen,tid) values('相声表演',2,'102');
mysql> insert into course(cname,xuefen,tid) values('电子商务',3,'103');
mysql> select * from course;
+------+----------+--------+-----+
| cid  | cname    | xuefen | tid |
+------+----------+--------+-----+
| 1001 | C++      |      3 | 101 |
| 1002 | java     |      5 | 101 |
| 1003 | 相声表演 |      2 | 102 |
| 1004 | 电子商务 |      3 | 103 |
+------+----------+--------+-----+

 学生修了哪些课程

mysql> select s.sname,c.cid,c.cname
    -> from students s left join course c
    -> on s.courseid = c.cid;
+--------+------+----------+
| sname  | cid  | cname    |
+--------+------+----------+
| 刘阳   | 1002 | java     |
| 甘能   | 1002 | java     |
| 小海子 | 1003 | 相声表演 |
| 小沈阳 | 1003 | 相声表演 |
+--------+------+----------+

学生修的课程有哪些老师教

mysql> select s.sname,c.cid,c.cname,t.tname
    -> from students s,course c,teacher t
    -> where s.courseid = c.cid and c.tid = t.tid;
+--------+------+----------+--------+
| sname  | cid  | cname    | tname  |
+--------+------+----------+--------+
| 刘阳   | 1002 | java     | 马云   |
| 甘能   | 1002 | java     | 马云   |
| 小海子 | 1003 | 相声表演 | 赵本山 |
| 小沈阳 | 1003 | 相声表演 | 赵本山 |
+--------+------+----------+--------+

或者

mysql> select s.sname,c.cid,c.cname,t.tname
    ->  from students s inner join course c inner join teacher t
    -> on  s.courseid = c.cid and c.tid = t.tid;

+--------+------+----------+--------+
| sname  | cid  | cname    | tname  |
+--------+------+----------+--------+
| 刘阳   | 1002 | java     | 马云   |
| 甘能   | 1002 | java     | 马云   |
| 小海子 | 1003 | 相声表演 | 赵本山 |
| 小沈阳 | 1003 | 相声表演 | 赵本山 |
+--------+------+----------+--------+

其他关联不行。left join ,right join

 2018年1月17日01:07:40

原文地址:https://www.cnblogs.com/liangwh520/p/8299744.html