多测师课堂010_mysql之三表(001)高级讲师肖sir

-- 表结构:
-- Student学生表(学号、姓名、性别、年龄、编辑)
-- Course课程表(编号、课程名称)
-- sc选课表(选课编号、学号、课程编号、成绩)
-- (1)写一个SQL语句,查询选修了“计算机原理”的学生学号和姓名
-- (2)写一个SQL语句,查询“小明”同学选修的课程名称
#(3)写一个SQL语句,查询选修了5门课程的学生学号和姓名

-----------------------------------------------------------------------------------------------------------------------

 建表语句:
drop table student ;

create table student(
stu_no int,
stu_name varchar(10),
sex char(1),
age int(3),
edit varchar(20) )
DEFAULT charset=utf8;
insert into student values
(1,'wang','男',21,'hello'),
(2,'小明','女',22,'haha2'),
(3,'hu','女',23,'haha3'),
(4,'li','男',25,'haha4');

create table course(
c_no int,
c_name varchar(10)
)
DEFAULT charset=utf8;
insert into course values
(1,'计算机原理'),
(2,'java'),
(3,'c'),
(4,'php'),
(5,'py');

#rop table sc;
create table sc(
sc_no int,
stu_no int,
c_no int,
score int(3))
DEFAULT charset=utf8;
insert into sc values
(1,1,1,80),
(2,2,2,90),
(3,2,1,85),
(4,2,3,70),
(5,2,4,95),
(6,2,5,89);

select * from sc ;
select * from student ;
select * from course ;

------------------------------------------------------------------------------------------------------

表的内容:sc选修表

 student学生表 

course课程表

 

三表合表图:

 -----------------------------------------------------------------------------------------------------

三表:

格式一:select   *  from   a, b, c where a.id=c.id and b.no=c.no

例题:

select a.stu_no,a.stu_name from  student a,course b,sc c where a.stu_no=c.stu_no and b.c_no=c.c_no and c_name='计算机原理';

格式二:select * from  a,b where a.id=b.id and b.no =(SELECT c_no from c where 条件);

例题:先找一个1表的条件,在合并23表用1表的结果做条件

select student.stu_no,stu_name from student,sc where student.stu_no=sc.stu_no and sc.c_no =(SELECT c_no from course where c_name='计算机原理');

格式三:select  *  from   a  inner  join  b  on  a.id=b.id  inner  Join  c  on   b.no=c.no ;

格式四:select  *  from   a  left  join  b  on  a.id=b.id  left    Join  c  on   b.no=c.no ;

格式五:select  *  from   a  right  join  b  on  a.id=b.id  right    Join  c  on   b.no=c.no ;

 -----------------------------------------------------------------------------------------

练习:

-- (1)写一个SQL语句,查询选修了“计算机原理”的学生学号和姓名 
-- (2)写一个SQL语句,查询“小明”同学选修的课程名称
#(3)写一个SQL语句,查询选修了5门课程的学生学号和姓名

第一题:

方法一:

select s.stu_no ,s.stu_name from student s ,sc,course c where s.stu_no=sc.stu_no and sc.c_no=c.c_no and c.c_name='计算机原理';

方法二:

select s.stu_no,s.stu_name from student s ,sc where s.stu_no=sc.stu_no and sc.c_no=(select c_no from course where c_name='计算机原理');

方法三:

select stu_no, stu_name from student where stu_no in (select stu_no from sc where c_no=(select c_no from course where c_name='计算机原理'));

方法四:

select stu_no,stu_name from student where stu_no in(select stu_no from course inner join sc on course.c_no=sc.c_no where c_name="计算机原理");

方法五: innere  join   

select student.stu_no,stu_name from student inner join sc on student.stu_no=sc.stu_no INNER JOIN course on sc.c_no=course.c_no where c_name='计算机原理';

方法六:left  join   


select student.stu_no,stu_name from student left join sc on student.stu_no=sc.stu_no left JOIN course on sc.c_no=course.c_no where c_name='计算机原理';

方法七: right  join

select student.stu_no,stu_name from student right join sc on student.stu_no=sc.stu_no right JOIN course on sc.c_no=course.c_no where c_name='计算机原理';

第二题:

方法一:

select course.c_name from course ,sc where course.c_no=sc.c_no and sc.stu_no=(select stu_no from student where stu_name="小明" );

方法二:

select w.c_name from (select stu_name,c_name from student,sc,course where student.stu_no=sc.stu_no and sc.c_no=course.c_no) w where w.stu_name='小明';

方法三:

select c_name from course where c_no in (select c_no from student inner join sc on student.stu_no=sc.stu_no where stu_name="小明");

方法四:

select c.c_name from student s ,sc, course c  where s.stu_no=sc.stu_no and sc.c_no=c.c_no and stu_name='小明';

方法五:

select c_name from course where c_no  in(select c_no from sc where stu_no=(select stu_no from student where stu_name ='小明'));

 备注:c_no是选修课程1,2,3,4,5 表示5门,2表示stu_no 学生号;

第三题:

方法一:

select s.stu_no ,s.stu_name from student s ,sc, course c where s.stu_no=sc.stu_no and c.c_no=sc.c_no group by stu_name having count(stu_name)=5;

方法二:

select w.stu_no,w.stu_name from (select student.stu_no,stu_name from student,sc,course where student.stu_no=sc.stu_no and sc.c_no=course.c_no) w group by w.stu_name having count(w.stu_name)=5;

方法三:

select student.stu_no,student.stu_name from student ,
(select s1.stu_no,count(s1.stu_no) c from sc s1 right join student s2 on s1.stu_no=s2.stu_no
group by s1.stu_no having count(s1.stu_no)=5)h where
student.stu_no=h.stu_no;

原文地址:https://www.cnblogs.com/xiaolehua/p/14005636.html