SQL之连接查询

一、连接查询的分类

sql中将连接查询分成四类:

  •   内链接
  •   外连接
    •  左外连接
    • 右外连接   
  •   自然连接
  •   交叉连接

二、连接查询的分类

  数据库表如下:

  1.学生表

  

  2.老师表

  

  3.班级表

  

  表用于连接查询教学,不要纠结表的设计~

三、连接查询之内连接

概念

  内链接[inner]join,从左表中取出每一条记录,去右表中与所有记录进行匹配;
    是某个条件在左表中与右表中相同最终才会有保留结果,否则不保留。 

基本语法
  左表[inner] join 右表 on 左表.字段=右表.字段;on表示连接条件;条件字段就是代表相同的业务含义

例子

  查询sql语句如下

  SELECT
      student.s_name,
      student.c_id,
      class.id,
      class.c_name
  FROM
      student
  INNER JOIN class ON student.c_id = class.id;

  查询结果

  

  分析:从查询结果不难看出,student的c_id和class的id是连接条件,以左表student为主表,以student表中每一条记录的c_id作为右表class的id主键的查询条件去匹配相关的信息。

  

  扩展:内连接还可以使用where 代替on关键字,或者如下写法代替:

  SELECT
      student.s_name,
      student.c_id,
      class.id,
      class.c_name
  FROM
      student,
      class
  where student.c_id = class.id;

四、连接查询之外连接

概念

  外连接:outer join,以某张表为主,取出里面所有的记录,每条与另外一张表进行连接,不管能不能匹配上条件,最终都会保留;能匹配正确保留,不能匹配,其他标的字段都是空null

  外连接分为两种;是以某张表为主表;
      left join:左连接,已左表为主表;
      right join:右链接 ,以左表为主表。

基本语法

  左表left/right join 右表 on 左表.字段=右表.字段

例子

  (1)左连接

  sql语句:  

  SELECT
      student.s_name,
      student.c_id,
      class.id,
      class.c_name
  FROM
      student
  left JOIN class ON student.c_id = class.id;

  查询结果

  

  分析:左连接,以左表student为主表,每条与另外一张表进行连接,多余同学的c_id在class匹配不上,并没有这个班级,但是依旧保留下来,其他字段显示NULL。

  

  (2)右连接

  sql语句:

  SELECT
      student.s_name,
      student.c_id,
      class.id,
      class.c_name
  FROM
      student
  right JOIN class ON student.c_id = class.id;

  查询结果

  

  这里我就不再分析啦~都很好理解,不懂的看看上面的左连接自己推导一下~

五、连接查询之自然连接

概念

  自然连接;natural join,自然连接,就是自动匹配连接条件;系统以字段名字作为匹配模式(同名字段就作为条件,多个同名字段都作为条件)

  ps:   自然连接很没有用!!!实际开发中并不会用到所以了解就好了!!!

    内链接和外连接都可以模拟自然连接

    使用同名字段,合并字段
    左表 left/right/inner join 左表 using(字段名);

六、连接查询之交叉连接

概念

  交叉连接; cross join,从一张表中循环取出每一条记录,每条记录都去另外一张表进行匹配,匹配一定保留(没有条件匹配),而连接本身字段就会增加(保留),最终形成的结果叫做笛卡尔积。

基本语法

  左表 cross join右表;也可以携程  from 左表,右表。

例子

  sql语句:

  SELECT
      *
  FROM
     student,
        class ;

  查询结果

  

  分析:简单来说就是,左表中的每一条记录都与由表中的每一条记录匹配一遍。

  ps:  交叉连接没什么用,只是保证连接这种结构的完整性!!!

笔记就到这了,但是上面说到的都是两个表的连接查询,那么,是否可以多个表进行连接查询呢?当然是可以的。

多表连接查询

sql语句如下:

  SELECT
      student.s_name,
      student.c_id,
      class.id,
      class.c_name,
          class.t_id,
          teacher.id as tid,
          teacher.t_name
  FROM
      student
  left JOIN class ON student.c_id = class.id
  left JOIN teacher ON class.t_id = teacher.id;

查询结果:

  

分析:多表连接查询,其实就是两个表连接查询组成一个新的表,这个新的表再与第三个表进行连接查询,以此类推,不懂的,思考一下?

转载于:https://www.cnblogs.com/wwjchina/p/9328472.html

浅谈sql之连接查询相关推荐

  1. 浅谈SQL Server内部运行机制

    原文:浅谈SQL Server内部运行机制 对于已经很熟悉T-SQL的读者,或者对于较专业的DBA来说,逻辑的增删改查,或者较复杂的SQL语句,都是非常简单的,不存在任何挑战,不值得一提,那么,SQL ...

  2. 浅谈 SQL Server 内部运行机制

    对于已经很熟悉T-SQL的读者,或者对于较专业的DBA来说,逻辑的增删改查,或者较复杂的SQL语句,都是非常简单的,不存在任何挑战,不值得一提,那么,SQL的哪些方面是他们的挑战 或者软肋呢? 那就是 ...

  3. 浅谈SQL注入风险 - 一个Login拿下Server(转)

    前两天,带着学生们学习了简单的ASP.NET MVC,通过ADO.NET方式连接数据库,实现增删改查. 可能有一部分学生提前预习过,在我写登录SQL的时候,他们鄙视我说:"老师你这SQL有注 ...

  4. sql语句连接查询.

    sql语句连接查询. 接触sql语句这么长时间了,牵涉到连接的时候,总是google别人的. 今天好好学学sql 的连接查询 准备工作 : mysql5.6 建表语句 查询语句 select p.id ...

  5. MySQL子查询的优缺点_浅谈mysql的子查询

    浅谈mysql的子查询 mysql的子查询的优化一直不是很友好,一直有受业界批评比较多,也是我在sql优化中遇到过最多的问题之一,你可以点击这里 ,这里来获得一些信息,mysql在处理子查询的时候,会 ...

  6. 浅谈 MySQL 连表查询

    浅谈 MySQL 连表查询 连表查询是一把双刃剑, 优点是适应范式, 减少数据冗余; 缺点是连表查询特别是多张表的连表会增加数据库的负担, 降低查询效率. 简介 连表查询就是 2 张表或者多张表的联合 ...

  7. mysql groupby having_浅谈sql语句中GROUP BY 和 HAVING的使用方法

    在介绍GROUP BY 和 HAVING 子句前,我们必需先讲讲sql语言中一种特殊的函数:聚合函数, 例如SUM, COUNT, MAX, AVG等.这些函数和其它函数的根本区别就是它们一般作用在多 ...

  8. 事物日志恢复 mysql_浅谈SQL Server中的事务日志(五)----日志在高可用和灾难恢复中的作用...

    本篇文章是系列文章中的第五篇,是对前一个日志系列的补充篇.如果您对日志的基本概念还没有一个比较系统的了解,可以参看本系列之前的文章: 浅谈SQL Server中的事务日志(一)----事务日志的物理和 ...

  9. 浅谈SQL Server 数据库的触发器

    浅谈SQL Server 数据库的触发器   触发器的特征: 1.触发器是在对表进行增.删.改时,自动执行的存储过程.触发器常用于强制业务规则,它是一种高级约束,通过事件进行触发而被执行. 2.触发器 ...

最新文章

  1. 中体骏彩C++面试题
  2. 4G EPS 中的随机接入
  3. 【转】ArcGIS API for Silverlight/WPF 2.1学习笔记(二)
  4. 洛雪音乐助手 0.18.2 — 音乐下载工具
  5. 跨品种套利 - 期货
  6. Elasticsearch入门教程(六):Elasticsearch查询(二)
  7. 怎样有效率地进行外文文献检索?
  8. 更新驱动后重启黑屏且进不了bios时的一个解决办法
  9. 拦截电话--- 关于利用反射 调用系统 hiden的 方法
  10. 写作的意义,从一枚勋章开始
  11. 产品经理撰写需求文档
  12. 08音视频设备类、09信息技术设备、16电信终端设备CCC认证流程费用及周期
  13. OLED显示技术的发展趋势浅析
  14. OpenBmc开发8:devtool简介与使用
  15. 11月21至28号总结
  16. Python:30行代码,使用POST登录山大的教务处系统(附完整源码)
  17. HTML5生日快乐祝福网页制作【蛋糕烟花+蓝色梦幻海洋3D相册】HTML+CSS+JavaScript
  18. “北京大妈”名下拥上千车牌被查
  19. e站app里站hosts_“科普e站”启用 让科学触手可及
  20. oracle11g数据库版本号,Oracle数据库之关于oracle db 11gR2版本号上的參数和scn headroom补丁问题...

热门文章

  1. oracle 创建备份目录,Oracle rman创建和自动化备份
  2. MPlayer 使用手册中文版
  3. android碎片实验报告,《Android 移动应用开发》实验报告-范本78(29页)-原创力文档...
  4. 使用阿里云镜像仓库构建国外 Docker 镜像
  5. JVM面试重点总结(二)——垃圾收集器(GC)与内存分配策略
  6. 【CCCC】L3-009 长城 (30分),计算几何+凸包,极角排序
  7. android c博客园,android上进行c/C 开发测试(转) - 奋进 - 博客园
  8. python引入redis_实操演练解读非关系型数据库—Redis
  9. mongodb和mysql空间占用_MongoDB的存储结构及对空间使用率的影响
  10. jquery中的html代码、文本以及值