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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM