ARTICLE DETAIL

资讯详情

深耕网站SEO优化与搜索引擎排名提升的一线实战洞察。

【数据库】联合查询

【数据库】联合查询 第六章 联合查询文章目录第六章 联合查询前言一、联合查询二、join on实现内链接三、外连接四、自连接五、单行子查询六、多行子查询七、from表中进行子查询八、合并查询总结前言呱唧呱唧一、联合查询查询的时候通常把多个实体的信息放到一起进行查询 , 联合查询也称作“多表查询” , 比单个表查询更加复杂更低效select * from 表1 , 表2 ;笛卡尔积是两张表之间进行的预算 , 其结果是一个更大的表列的个数列数是两个表的列数之和行数是两个表行数之积笛卡尔积存在一些有效数据或无效数据无效数据 : 学生表的 classid 与 班级表的 classid 对不上可以给表起别名 , 同时用 where 语句筛选有效数据如用where语句不能直接写列列 , 要用 表名 . 列名二、join on实现内链接join一样效果 , 也可算出笛卡尔积select * form 表1 join 表2 ;指定条件 , 同样可以其别名select * from 表1 as 别名 join 表2 as 表名 on 条件 ;可以用where对条件进行进一步补充select * from 表1 as 别名 join 表2 as 表名 on 条件 where 条件;join前面可以有个inner , 可以省略用where无论几张表都是一样的 , join on是不一样的多表查询是个低效操作不要拿两个很大的表进行联合查询即使是小的表也不要一次性联合太多表因为SQL执行的非常慢容易系统卡顿我们可以多次查询三、外连接以上都是内连接 , mysql还提供了外连接也能进行联合查询, 外链接得到的结果和内链接有些不同左外链接 : 当左侧表拥有的数据在右侧表没有相匹配的时候 , 仍然会有显示select * from 表名 left join 表名 on 条件 ;右外连接 : 与左外连接相反select * from 表名 right join 表名 on 条件 ;有全外连接mysql不支持oracle支持全外连接用于行和行之间的比较四、自连接提问:select * from score , score ;这句SQL是正确的吗?错 ! 两个不能是同名所以我们需要用别名自连接代价非常明显 , 笛卡尔积开销非常大针对这样的问题如果表很大不方便进行自连接 , 先通过普通SQL查询出每个同学所有课程成绩转成JAVA对象保存到一个list中接下来再通过JAVA代码遍历list挑选出这里面符合条件的有效数据实际开发中数据库大多情况是通过代码来操控的五、单行子查询本质是把多个查询合成一个SQL , 这个引以为戒实际开发中慎用除非还是比较好理解如果括号里的查询结果有多个 , 会报错 , 需要用到多行子查询六、多行子查询多行用in七、from表中进行子查询前面几个子查询都是在条件中使用的~~还可以在from中使用 , 把select查询的结果作为一个“临时表”后续的其他查询就可以基于这个临时表做进一步的查询八、合并查询两表合并并且去重 , 并且看这一操作列名的个数和类型不一样 , 和名字没有干系select 语句 union select 语句 ;不想去重select 语句 union all select 语句 ;总结好多好多东西 , 一起加油吧 !
返回列表