联合查询
1.为什么要使用联合查询联合查询也叫多表查询。在设计数据库表时由于范式的要求数据被拆分到多个表中在查询一条数据的完整信息就要从多个表中获取数据。2.多表查询时MySQl内部是怎样计算的笛卡尔积多表查询是一个低效操作如果一次联合的表过多SQL执行的会很慢造成系统卡顿3.内连接1.语法或2.查询学生的班级及班级名称MySQL内部进行笛卡尔运算后得到的结果是混乱的需要加上条件得到期望结果3.查询学生姓名为孙悟空的个人信息和班级信息alter内连接还可写为4.查询唐三藏同学的成绩alter5.查询所有同学的总成绩6.查询每个同学每门课的成绩4.外连接外连接与内连接得到的结果可能不同1.外连接的结果与表内数据对应关系有关1.当两个表一一对应时1.内连接2.左外连接3.右外连接2.当两个表数据不一一对应时注意补充在MysQl安全更新模式下要删除表内全部数据先关闭安全模式才能进行删除MySQL认为delete from stu;delete from score;不安全的原因是没有where条件1.内连接得到两个中同时存在的结果2.左外连接左表的全部内容3.右外连接右表的全部内容5.全外连接MySQL不支持6.自连接1.自连接可以比较行与行的关系where条件语句只能比较列于列之间的关系当需要比较行与行之间的关系时就需要表和表自身自连接但是需要注意表名需要不同正确写法得到的结果数据混乱须加条件控制2.查询Java班MySQL比Java成绩高的学生信息1.原始scores表共有28条数据没有条件一条数据和自身表的28条数据笛卡尔积。自连接后新查询的表有28*28条数据2.用学号相等控制后一个学号下有4条数据相等学号的进行笛卡尔积后一个学号有4*4条数据3.4.5.3.显⽰所有MySQL成绩比JAVA成绩⾼的学⽣信息和班级以及成绩信息7.在条件里使用子查询子查询是指把一个select语句当作另一个select语句的查询条件1.单行子查询——返回一个列的一个数据1.查询“不想毕业”同学的同班同学先查询该同学所在班级根据所查到的班级号再查询他的同班同学用子查询语句写就是之所以叫做单子行查询就是因为自句的select的返回一个列的一个值2.多行子查询——返回一个列的多个数据3.多行子查询——返回多个列的数据1.查询重复录入的分数重复录入group by的作用:把两条记录一样的数据分为一组having的作用原本正常记录的数据再group by之后每条各自为一组countx1重复的记录countx2.其作用是过滤掉正常记录8.在from语句中使用子查询为什么from语句里可以使用子查询当一个查询产生结果时MySQL自动创建一个临时表把结果集放在这个临时表中最终输出查询结果。在from子句中可以使用临时表进行子查询或表连接操作1.查询所有比“Java01班”平均分高的成绩信息9.合并查询为了合并多个select操作返回的结果可以使用集合操作符unionunion all1.union2.union all要合并的两个表列的数据类型必须完全一致