msyql三表命令

一、建表

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');

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);

二、查看表

表结构:

Student学生表(学号、姓名、性别、年龄、编辑)
Course课程表(课程编号、课程名称)
sc选课表(选课编号、学号、课程编号、成绩)


都和sc表有关系

三、三表连接

1、三表隐藏内连接;
格式:select * from 表1,表2,表3 where 表1.关联字段1=表3.关联字段3 AND 表2.关联字段2=表3.关联字段 3;
案例:select * from student as a ,course as b,sc as c where a.stu_no=c.stu_no AND b.c_no=c.c_no ;

** 2、三表内连接**

内连接 格式:select * from 表1 INNER JOIN 表3 on 表1.关联字段1=表3.关联字段3 INNER JOIN表2 on 表2.关联字段2=表3.关联字段3

案例:select * from student as a INNER JOIN sc as c on a.stu_no=c.stu_no INNER JOIN course as b on b.c_no=c.c_no

** 3、三表左连接**
格式:select * from 表1 left JOIN 表3 on 表1.关联字段1=表3.关联字段3 left JOIN表2 on 表2.关联字段2=表3.关联字段3
案例:select * from student as a left JOIN sc as c on a.stu_no=c.stu_no left JOIN course as b on b.c_no=c.c_no

4、三表右连接
格式:格式:select * from 表1 right JOIN 表3 on 表1.关联字段1=表3.关联字段3 right JOIN表2 on 表2.关联字段2=表3.关联字段3
案例:select * from student as a right JOIN sc as c on a.stu_no=c.stu_no right JOIN course as b on b.c_no=c.c_no

** 5、先合两表在和一表**
格式:select * from (select * from 表1 right JOIN 表3 on 表1.关联字段1=表3.关联字段3 ) 临时表s iner join 表2 on 临时表. 字段3=表2.字段2

案例: select * from (select c.stu_no,stu_name,sex,age,edit,sc_no,c_no,score from student as a right JOIN sc as c on a.stu_no=c.stu_no ) s INNER JOIN course as b on s.c_no =b.c_no ;

select * from
(select a.*,c.sc_No,c.c_no,c.score from
student AS a right JOIN sc c on a.stu_no=c.stu_no)
as s INNER JOIN course as b on s.c_no=b.c_no

注意:重复列的错误

6、去除重复字段
在显示字段中直接更改
select * from (select a.* ,b.*,c.sc_no,c.score= from student AS a right JOIN sc c on a.stu_no=c.stu_no right JOIN course as b on b.c_no=c.c_no)s where s.c_name="计算机原理"

四、作业

(1)写一个SQL语句,查询选修了“计算机原理”的学生学号和姓名

方法1:

select s. stu_name,s.stu_no from (select a.* ,b.*,c.sc_no,c.score from student AS a right JOIN sc c on a.stu_no=c.stu_no right JOIN course as b on b.c_no=c.c_no)s where s.c_name="计算机原理"

(2)写一个SQL语句,查询“小明”同学选修的课程名称

方法1:

select s. c_name from (select a.* ,b.*,c.sc_no,c.score from student AS a right JOIN sc c on a.stu_no=c.stu_no right JOIN course as b on b.c_no=c.c_no)s where s.stu_name="小明"

(3) 写一个SQL语句,查询选修了5门课程的学生学号和姓名

方法1

select s. stu_no,s.stu_name from (select a.* ,b.*,c.sc_no,c.score from student AS a right JOIN sc c on a.stu_no=c.stu_no right JOIN course as b on b.c_no=c.c_no)s GROUP BY s.stu_no having count(s.stu_no)=5

posted @   君庭  阅读(1)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
点击右上角即可分享
微信分享提示