练习:将多个join串联起来进行查询

数据参考:https://www.cnblogs.com/jingzhenhua/p/5947416.html

我将数据改成了适用于MySQL的格式,具体脚本如下:

create table student(

sno   varchar(5) primary key,

sname varchar(9) not null,

ssex  varchar(3) not null,

sbirthday date,

sclass varchar(5)

);

 

create table course(

cno       varchar(5) primary key,

cname     varchar(15) not null,

tno       varchar(3) not null

);

 

create table score(

sno   varchar(3) not null,

cno   varchar(5) not null,

degree   double(4,1)

);

 

create table teacher(

tno   varchar(3) primary key,

tname varchar(9) not null,

tsex  varchar(3) not null,

tbirthday date,

prof  varchar(9),

depart varchar(15) not null

);

 

--student

insert into student(sno,sname,ssex,sbirthday,sclass) values(108,'曾华','男','1977-09-01',95033);

insert into student(sno,sname,ssex,sbirthday,sclass) values(105,'匡明','男','1975-10-02',95031);

insert into student(sno,sname,ssex,sbirthday,sclass) values(107,'王丽','女','1976-01-23',95033);

insert into student(sno,sname,ssex,sbirthday,sclass) values(101,'李军','男','1976-02-20',95033);

insert into student(sno,sname,ssex,sbirthday,sclass) values(109,'王芳','女','1975-02-10',95031);

insert into student(sno,sname,ssex,sbirthday,sclass) values(103,'陆君','男','1974-06-03',95031);

 

--teacher

insert into teacher(tno,tname,tsex,tbirthday,prof,depart) values(804,'李诚','男','1958/12/02','副教授','计算机系');

insert into teacher(tno,tname,tsex,tbirthday,prof,depart) values(856,'张旭','男','1969/03/12','讲师','电子工程系');

insert into teacher(tno,tname,tsex,tbirthday,prof,depart) values(825,'王萍','女','1972/05/05','助教','计算机系');

insert into teacher(tno,tname,tsex,tbirthday,prof,depart) values(831,'刘冰','女','1977/08/14','助教','电子工程系');

 

--course表(添加外键后要先填teacher表中数据去满足外键约束)

insert into course(cno,cname,tno) values('3-105','计算机导论',825);

insert into course(cno,cname,tno) values('3-245','操作系统',804);

insert into course(cno,cname,tno) values('6-166','数字电路',856);

insert into course(cno,cname,tno) values('9-888','高等数学',831);

 

 

--score表(添加外键后要先填student,course表中数据去满足外键约束)

insert into score(sno,cno,degree) values(103,'3-245',86);

insert into score(sno,cno,degree) values(105,'3-245',75);

insert into score(sno,cno,degree) values(109,'3-245',68);

insert into score(sno,cno,degree) values(103,'3-105',92);

insert into score(sno,cno,degree) values(105,'3-105',88);

insert into score(sno,cno,degree) values(109,'3-105',76);

insert into score(sno,cno,degree) values(101,'3-105',64);

insert into score(sno,cno,degree) values(107,'3-105',91);

insert into score(sno,cno,degree) values(108,'3-105',78);

insert into score(sno,cno,degree) values(101,'6-166',85);

insert into score(sno,cno,degree) values(107,'6-166',79);

insert into score(sno,cno,degree) values(108,'6-166',81);

接下来测试left join的串联使用:

#左连接

select a.*,b.* from student as a left join score as b on a.sno=b.sno where a.sno='101';

#左连接

select a.*,b.*,c.cname from student as a left join score as b on a.sno=b.sno  \

left join course as c on c.cno=b.cno;

 

#左连接,只挑出101

select a.*,b.*,c.cname from student as a left join score as b on a.sno=b.sno  \

left join course as c on c.cno=b.cno where a.sno='101';

 

#错误:where只能写在最后面,写在中间报错

select a.*,b.*,c.cname from student as a left join score as b on a.sno=b.sno  where a.sno='101' \

left join course as c on c.cno=b.cno;

#继续串联更多的左连接

select a.*,b.*,c.cname,d.tname from student as a   \

left join score as b on a.sno=b.sno  \

left join course as c on c.cno=b.cno \

left join teacher as d on c.tno=d.tno   \

where a.sno='101'

;

以上内容仅供参考。

你可能感兴趣的:(练习:将多个join串联起来进行查询)