选课系统——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表中的数据量少,而且访问量不是很多,但是当大数据量访问时如何进行优化,后面再讨论哈。
- 选课系统——JOIN多表查询
- join 多表查询
- CAML——Join多表连接查询
- sql多表连接查询inner join, left join , right join ,full join ,cross join
- sql多表连接查询inner join, left join , right join ,full join ,cross join
- sql多表连接查询inner join, left join , right join ,full join ,cross join
- sql多表连接查询inner join, left join , right join ,full join ,cross join
- sql多表连接查询inner join, left join , right join ,full join ,cross join
- sql 多表连接查询inner join, left join , right join ,full join ,cross join
- mysql多表连接查询inner join, left join , right join ,full join ,cross join
- sql多表连接查询inner join, left join , right join ,full join ,cross join
- SQL多表连接查询INNER JOIN, LEFT JOIN , RIGHT JOIN ,FULL JOIN ,CROSS JOIN
- sql多表连接查询inner join, left join , right join ,full join ,cross join
- sql多表连接查询inner join, left join , right join ,full join ,cross join
- sql 多表查询--join
- hibernate多表查询 join
- C小项目 —— 学生选课系统
- 选课系统
- hdu1418(欧拉公式)
- jQuery对象常用方法
- 黑马程序员,学习笔记01
- 输出蛇形矩阵(java版)
- HDU 2147 kiki's game
- 选课系统——JOIN多表查询
- 最快速度求两个数组之交集算法与hash
- 最小生成树,并查集的思想 nyoj1239
- 豆瓣书籍信息转存到EXCEL表格
- 望日后斩获奖项 冯绍峰首次出席金像奖
- assert在工程中的运用
- 黑马程序员-学习笔记02
- 【BZOJ1455】罗马游戏
- 【java】concurrentHashMap与HashMap的区别