多表查询 子查询

多表查询

连接查询:也可以叫跨表查询,需要关联多个表进行查询

笛卡尔集:select * from students,score; 会有重复数据
查询表时给表起别名:例子  SELECT * FROM stu st,score sc;
数据不会重复:select * from students st,score sc where st.id = sc.sid; 99写法
主外键保持一直,是如何做到去除笛卡尔集的(原理)

内连接
例子:select * from students st inner join score sc on st.id=sc.sid;
多表联查约束主外键一样,只是写法改变了
ON后面只写主外键
(对于结果)如果还有条件直接在后面写WHERE
多表联查后还有条件就直接写AN

左连接:左边表数据全部查询出来,右边表只查询满足条件的 on后面的就是条件
例子:select * from students left join score on student.id = score.sid;

右连接:右边表数据全部查询出来,左边表只查询满足条件的 on后面的就是条件 on st.id=sc.sid 是去除笛卡尔集的
例子:select * from student st right join score sc on st.id = sc.sid;

非等值连接数据:comment后面可以写注释

99法:select * from emp e,dept d, salgrade s
where
e.deptno = d.deptno
and e.salary >= s.lowsalary #between lowsalary and highsalary
and e.salary <=s.highsalary
内连接:select *
from emp e
join dept d
on e.deptno = d.deptno
join salgrade s
on e.salary between s.lowsalay and s.highsalary;

自然连接:连接查询会产生无用笛卡尔集,我们通常使用主外键关系等式来去除它.而自然连接无需你去给出主外键等式,它会自找到这一等式也就是说不用去写条件
要让主外键的字段名相同才能连接

子查询

一个select语句中包含另外一个完整的select语句
或者说两个以上select,那么就是子查询语句了

子查询出现的位置: where后,把select查询出的结果当做另外一个select的条件值
from后,把查询出的结果当作一个新表

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 需求 用户在某个活动中最多领取N张优惠券。 每个活动中最多领取M张(优惠券发放总量)。 分析 当每一个用户领券时,...
    youthcity阅读 1,148评论 0 50
  • 一夫 我是一粒尘埃 一粒飘荡千年的尘埃 微小自卑孤独 直到有一天我遇到了你 我黏在你的鞋子下 悄悄陪着你踏过万水千...
    镜愚阅读 284评论 2 0
  • 缘分是一种很玄妙的东西。 当我随手从几箱书里抽出这本美国作家艾伦·格林的《记得那些甜蜜的事》,就注定我要了解另一番...
    茉莉橘子pure阅读 308评论 0 0
  • 1.分析阅读的三个规则: 读书前首先知道书是哪一类,越早知道越好 使用单一句子或者最多一组句子(一段)来概述书的内...
    风不停留ken阅读 217评论 0 0

友情链接更多精彩内容