当前位置: 首页 > news >正文

肖sir__mysql之三表__008

mysql之三表

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’);
#drop 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 student;
select * from course;
select * from sc;
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Student学生表(学号、姓名、性别、年龄、编辑)

Course课程表(编号、课程名称)

sc选课表(选课编号、学号、课程编号、成绩)

(1)写一个SQL语句,查询选修了“计算机原理”的学生学号和姓名
结果:学生学号(stu_no)和姓名(stu_name)
条件:选修了“计算机原理” c_name=‘“计算机原理” ’
思路:合表 and 条件(c_name=’“计算机原理” ') 显示学生学号(stu_no)和姓名(stu_name)
方法1:
select t.stu_no ‘学号’,t.stu_name ‘姓名’ from student t,course c,sc s where t.stu_no = s.stu_no and c.c_no = s.c_no and c.c_name = ‘计算机原理’;
方法2:
select student.stu_no,student.stu_name from student LEFT JOIN sc on sc.stu_no=student.stu_no LEFT JOIN course on course.c_no=sc.c_no where course.c_name=‘计算机原理’
方法3:
select stu_no,stu_name from student where stu_no in(SELECT stu_no from sc c where c_no=(select c_no from course b where c_name=‘计算机原理’))

(2)写一个SQL语句,查询“小明”同学选修的课程名称
结果:课程名称 c_name
条件:“小明”同学 stu_name= ‘ 小明’
思路:合表 接条件 stu_name= ‘ 小明’
方法1·:select c.c_name ‘课程名称’ from student t,course c,sc s where
t.stu_no = s.stu_no and c.c_no = s.c_no and t.stu_name = ‘小明’;

(3)写一个SQL语句,查询选修了5门课程的学生学号和姓名
结果:学生学号、姓名
条件:选修了5门课程 count(c_name)=5
思路:合表 ,函数count =5
方法1:(错误)
select stu_name,a.stu_no from student a inner join sc b on a.stu_no=b.stu_no inner join course c on b.c_no=c.c_no group by stu_name having count(stu_name)=5 ;

方法2:(错误)

select student.stu_no,student.stu_name from student LEFT JOIN sc on sc.stu_no=student.stu_no LEFT JOIN course on course.c_no=sc.c_no GROUP BY sc.stu_no HAVING count(sc.stu_no)=5

方法3:

SELECT stu_no,stu_name from student where stu_no=(
select a.stu_no from student a inner join sc b on a.stu_no=b.stu_no inner join course c on b.c_no=c.c_no group by a.stu_no having count(a.stu_no)=5 );

总结格式:
1、三表隐藏内连接
格式:
select * FROM 表1 ,表2,表3 where 表1.关联字段=表3.关联字段 and 表2.关联字段=表3.关联字段 ;
案例:select * FROM student a,sc b,course c where a.stu_no=b.stu_no and b.c_no=c.c_no ;
2、三表普通内连接
格式:select * FROM 表1 inner join 表3 on 表1.关联字段=表3.关联字段 inner join 表2 on 表3.关联字段=表3.关联字段 ;
案例:select * FROM student a INNER JOIN sc b on a.stu_no=b.stu_no INNER JOIN course c on b.c_no=c.c_no ;

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

4、三表右连接
格式:select * FROM 表1 right join 表2 on 表1.关联字段=表3.关联字段 right join 表2 on 表2.关联字段=表3.关联字段 ;
案例:select * FROM student a right JOIN sc b on a.stu_no=b.stu_no right JOIN course c on b.c_no=c.c_no ;
5、先合两个表,在合另一张表
格式:select * from (select 字段名 FROM 表1 right join 表2 on 表1.关联字段=表3.关联字段 )别名,表2 where
合表.关联字段=表3.关联字段
select * from (select a.stu_no,stu_name,sex ,age ,edit ,sc_no ,c_no ,score FROM student a right JOIN sc b on a.stu_no=b.stu_no)s ,course c where s.c_no=c.c_no ;
6、把三表单成单表理解
(SELECT b.,c. FROM sc a,student b,course c WHERE a.stu_no=b.stu_no AND a.c_no=c.c_no)s 当成单表
select * from (SELECT b.,c. FROM sc a,student b,course c WHERE a.stu_no=b.stu_no AND a.c_no=c.c_no)s

http://www.lryc.cn/news/170158.html

相关文章:

  • 【Linux】常用工具(上)
  • 【kafka】可视化工具KAFKA EAGLE安装分享
  • 【深度装机】深度U盘装机后黑屏闪光标
  • 【性能测试】JMeter:集合点,同步定时器的应用实例!
  • 21天学会C++:Day11----运算符重载
  • 面经pc端项目
  • 三步在两台服务器间迁移conda环境
  • websocket服务部署在内网,app无法访问
  • vs2010对于c++11的支持
  • OpenCV cv::Mat和QImage互相转换
  • pgsql 主从搭建
  • JS中的数值精度问题(二)
  • WPF——Control与Template理解
  • 华为HCIA学习(一)
  • 使用jmeter+ant+jenkins+git搭建自动化测试平台
  • C# Winform中在DataGridView中添加Button按钮,操作Button按钮
  • Docker 网络学习
  • django创建web服务器
  • 极光笔记 | 推送服务数据中心选择:合规性与传输效率的双重考量
  • Python灰帽编程——初识Python上
  • OLED透明屏交互技术:开创未来科技的新篇章
  • 揭秘Spring Boot内嵌Tomcat原理
  • 分类散点图 stripplot() 加辅助线axhline() 多图合一
  • 一文告诉你为什么时序场景下 TDengine 数据订阅比 Kafka 好
  • reg与wire的用法,证明reg可以在右边,wire型在左边,来作组合逻辑处理。
  • Studio One6.2简体中文免费最新版本宿主软件
  • 算法刷题 week2
  • 子网的划分
  • Docker安装与卸载
  • 【Davinci开发】:开发过程问题记录及总结