选课系统——JOIN多表查询

来源:互联网 发布:便利店文化知乎 编辑:程序博客网 时间:2024/04/30 08:49

   最近做选课的系统中要关联多张表进行数据的查询,所以总结回顾下JOIN是的使用和执行过程!


  *1.JOIN

          *1.1:建立测试表

         *1.2:内联接

         *1.3:JOIN...ON...

         *1.4:JOIN多张表

         *1.5:Left Join (right join)

         *1.6总结

  *2.执行过程:

         FROM -->JOIN --> ON -->AND-->LEFT--> WHERE-->GROUP BY--> HAVING-->SELECT-->ORDER BY

  *3.选课sql语句与问题


1.1建立测试表


1.2.内联接(笛卡儿积)

<span style="font-family:SimSun;font-size:18px;">    select e.id,e.`name`,s.id,s.money from employ as e JOIN salary s</span>

    employ第一条记录到最后一条记录循环连接dapartmet中的每一条记录,
    最后的记录数:count(employ)*count(dapartment)两张表的乘积,
    默认的JOIN为inner join,join也可以用,来代替。

    执行结果:

            

1.3.JOIN...ON...

     通过on设定条件从JOIN的结果中筛选出所需要的数据

<span style="font-family:SimSun;font-size:18px;">     select e.id,e.`name`,s.id,s.money from employ as e  JOIN salary s on e.id = s.id</span>
     

1.4.JOIN多张表

     上面JOIN了两张表,可以join多张表,通过联接条件进行联接,join过程可以通过下图来实现,所以我们可以一直join多张表


1.5.LEFT JOIN   

1.6总结:

    join(inner join)根据条件选择出符合条件的列

    left join在join的基础上补全左表中的数据,如果右表中没有符合条件的数据,以NullL来代替。

    right join是在join的基础上补全右表的数据,如果左边中没有符合条件的数据,以Null来代替。



2.1.JOIN...ON ...WHERE: 查询条件在ON..WHERE之间和WHERE之后的不同:

      图-2.2.1(图下)

      

       图:2.1.2

     

        图:2.1.3

        

       可以看出,条件在on和where之间,查出来结果,然后left 补全左表。 而在where之后的条件,是以left补全左边之后的数据为结果集,在查找符合where条件的数据!


2.执行过程:

<span style="font-family:SimSun;font-size:18px;">     SELECT e.id,e.`name`,d.deptno,d.deptname  FROM employ as e LEFT JOIN dapartment as d ON e.deptno = d.deptno where d.deptname='市场部'</span>

     FROM --> JOIN --> ON -->AND-->LEFT--> WHERE -->GROUP BY--> HAVING-->SELECT-->ORDER BY

    (逻辑上的思考过程,不涉及数据库的具体查询方式)
       A步骤. 先将两张表根据ON 条件 作连接(逻辑上,相等于将两张表笛卡尔集) 
     B步骤. 根据ON 后面,WHERE 之前 的 AND 条件筛选数据
     C步骤. 跟据LEFT 无论如何,要保证employ表的数据完整性。所以在上一步骤产生的结果集中补齐A表因无法比与B表匹配而被AND 条件筛选的掉的数据;
     D步骤. 再根据WHERE筛选结果集。
         group by:通过列来分组查询。
                 具体用法推荐博客: http://www.cnblogs.com/rainman/archive/2013/05/01/3053703.html 
         having:分完组之后,查询出符合having条件的数据。


3.选课sql语句:查询学生所有的可选课程

<span style="font-family:SimSun;font-size:18px;">SELECT crrn.teachClassId, cg.courseRoundId, crsd.remainCapacity,tea.`name`,drn.content,cif.courseName,cif.classPoint from itoo_basic.tb_student stut LEFT JOIN itoo_basic.tb_classes clss on stut.classesId = clss.id left JOIN itoo_basic.tb_institution i on i.id=clss.institutionId LEFT JOIN itoo_basic.tb_choosecourseroundgradecollege cg on cg.insititutionID=i.pid and cg.levelId=i.levelId AND cg.gradeID= clss.gradeId LEFT JOIN itoo_basic.tb_courseround crsd on crsd.roundId=cg.courseRoundId LEFT JOIN  itoo_basic.tb_publicchoosecourse pch on crsd.publicchoosecourseId=pch.id LEFT JOINitoo_basic.tb_curriculumschedule_now crrn on pch.CurriculumsheduleId=crrn.id LEFT JOIN itoo_basic.tb_teacher tea on tea.id=crrn.teacherID LEFT JOIN itoo_basic.tb_dictionary_now drn ON crrn.weekID = drn.id  LEFT JOIN itoo_basic.tb_trainingprograms_now tgn ON crrn.trainingProgramsID = tgn.id LEFT JOIN itoo_basic.tb_courseinfo cif on tgn.courseID = cif.id LEFT join itoo_basic.tb_dictionary_now drnb ON cif.courseNatureId = drnb.id LEFT join itoo_basic.tb_coursetype cty on cif.courseTypeId = cty.id where stut.id ='12CxmvvEbM2FtRDXGfGVnr' and cty.courseTypeName='公共选修课' and cif.isDelete=0 and cg.isDelete=0</span>
     

    查询的功能能实现,但是现在只是开发的时候mysql表中的数据量少,而且访问量不是很多,但是当大数据量访问时如何进行优化,后面再讨论哈。




1 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 头发可以种植吗如果是秃顶怎么办 前额头发少怎么办如何使头发增多 头发又细又软又少怎么办 宝宝一岁了头发又少又黄怎么办 生完孩子头发掉的厉害怎么办 洗完头发后头发很蓬松怎么办 头发掉的厉害怎么办吃什么好得快 头发掉的很厉害怎么办吃什么好 我头发掉的厉害怎么办吃什么药 头发干枯毛躁掉发怎么办吃什么 最近洗头时头发掉的厉害怎么办 生完小孩头发掉的厉害怎么办 生完小孩后头发掉的厉害怎么办 生完孩子后严重掉头发怎么办 生过孩子后掉头发严重怎么办 孩孑16岁了高中没考上怎么办 小孩的嘴巴里有点点该怎么办 小孩从出生哭笑嘴巴有点歪怎么办 儿童耳朵受伤后嘴巴歪了怎么办 手机锁屏图案忘了怎么办求解锁 忘给仓鼠买吃的了怎么办 两岁宝宝不爱吃饭只喝奶粉怎么办 下载百度云压缩包要提取密码怎么办 微信表情包图片过大无法添加怎么办 管理员吧群员全部踢了群主怎么办 微信笑脸表情斗图文字没有了怎么办 钨珠钢笔头用完笔墨了怎么办 暴走大事件被禁六一红鼻子节怎么办 弯腰推东西把腰闪了怎么办 怀孕初期弯腰捡东西腰不舒服怎么办 突然弯腰捡东西腰闪了怎么办 跑步机上的磁铁掉了怎么办 微信解封辅助申诉信息不一致怎么办 穿越火线进游戏字体变小了怎么办 微信登录显示版本过低登不上怎么办 手机显示主题版本过低不能用怎么办 杨豹平全民k歌qq登不上去怎么办 画画时桌面会有许多橡皮渣怎么办 瑜伽体式小人图大全不会画怎么办 微信公众号的字体变得不认识怎么办 三菱按动笔摔了一下断墨怎么办