Sql表间关系和连接查询应用举例

      以前学连接查询时看的书上举的例子都是没有实际意义的,随便凑上两个表格,只是了解的语法,但却不明白到底为什么要用连接查询,连接查询的好处是什么。最近在学Hibernate,重温sql时想到一个特别好的案例(体会:不学数据库方面的编程,很难学好SQL语句,因为数据库中的数据多数是为程序调用而设计的,不明白从数据库到应用中间这个转换过程,学起来体会的不深)。


    学sql语言按知识点学是学不深的,sql是关系型数据库的查询语言,学sql必须从关系入手。所谓关系,其实就是两个对象之间的存在的联系,比如学生和课程这两个独立对象是多对多关系,两者的联系纽带是学生选择课程,从而可以产生一个新表,选修表。sql中复杂的查询与重要的知识点往往都集中在两个对象产生的新表上,所以,抓住派生出来的表,在派生出来的表上多下功夫,就可以学好sql。还有一种是相似对象之间的一对多关系,两者相互独立,又密切相连,比如BBS系统中的主帖和跟帖,两者就像人与人之间上下级关系一样,两个人之间本来是独立的,但因为在一家单位,因为工作而联系在一起(与之相反的则是学生和班级这种一对多关系,两者差别很大)。

案例一:选修表(学生和课程产生的关系)

      上了大学以后,不再有纸质的成绩单,每当学期末的时候总是在学校教务系统上查成绩。现在想想,查看全班成绩用的就是连接查询。涉及两个表,学生表和成绩表。用到学生表的学号、姓名字段,成绩表的学号、课程号、成绩字段。模拟实现如下:

表结构:

成绩表:score

学生表:students

课程表:courses



内连接查询结果:学生表内连接成绩表,按班级筛选

查询语句

显示结果

select st.name,st.classId,sc.courseId,sc.score 

from students as st 

inner join scores as sc 

on st.id=sc.studentId

where st.classId='13';

左外连接查询结果:学生表左外连接成绩表,按班级筛选

查询语句

显示结果

select st.name,st.classId,sc.courseId,sc.score 

from students as st 

left outer join scores as sc 

on st.id=sc.studentId

where st.classId='13';

右外连接:结果和内连接一样,因为在这个例子中不可能出现有成绩无学生的情况

查询语句

select st.name,st.classId,sc.courseId,sc.score from students as st right outer join scores as sc 

on st.id=sc.studentId where classId=13;

案例二:课程表(授课表和班级表产生的关系)源自学生管理系统

案例三:电影主演表(电影与演员产生的关系)源自影片管理系统

案例四:文章分类表(文章和类型产生的关系)源自博客系统


未完待续……
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值