博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数据库数据的查询----连接查询
阅读量:4873 次
发布时间:2019-06-11

本文共 1775 字,大约阅读时间需要 5 分钟。

  关系型数据库中允许表和表之间存在关系,这种关系可以把两个甚至多个表的数据联系在一起。利用这种关系,可以查询出某种符合条件的数据,这些数据将是一套符合实际业务逻辑的数据,而数据中这些表和表之间的关系将不存在。换句话说,获取真实世界的原始数据后,根据某种规则吧它们拆分成各种独立的数据,加入想从数据库中再次获取数据,那么需要依靠当初拆分的规则。而这种规则也可以看成表和表之间的联系,要再次实现这种联系,需要用到连接查询。连接分为内连接、外链接和全连接,还有一种叫做自连接,其中最常用的是内连接和外连接。

  1、最简单的连接查询

  最简单的逻辑查询是利用逗号完成的,它利用逗号把FROM后的表名分隔开,这就构成了最简单的逻辑查询。但这样做的意义不大。

例如:teacher表中有4行,course表中有4行,  

使用  SELECT  te.*,co.*  FROM teacher te , course co   则返回一个有16行的表。

利用这种方式查询数据将得到两个表的笛卡尔积,也就是得到两个表中记录数的乘积。而这么做没什么意义。关于笛卡尔积,就是一个表中的每一行与另一个表中的每一行连接在一起而形成的新表,也就是查询结果。查询结果的记录数就是这两个记录数的乘积。

  2、内连接

  内连接也称为简单连接,它会把两个或多个表进行连接,只能查询出匹配的记录,不匹配的记录将无法查询出来,这种连接查询是平时常用的查询。内连接中最常用的就是等值连接 和不等值连接。

  (1)等值连接:连接条件中使用“=”连接两个条件列表。

SELECT  te.*,co.*  FROM teacher te ,course co where te.tno= co.tno 

SELECT  te.*,co.*  FROM teacher te INNER JOIN course co ON te.tno= co.tno 

  这两段脚本的功能是一样的。只是写法不同

  (2)不等值连接:是指连接条件中使用>,<,<=,>=,!=,between...and ,in 等连接两个条件列表,但这种方式通常需要和其它等值运算一起使用,否则检索出的数据很可能没有实际意义

  内连接中的关键字inner  join 可以直接写成   join,系统会把join识别成内连接。但是on关键字不能省略。

  3、自连接

  所谓自连接,就是把自身表的一个引用作为第二个表来处理,这样就会获取表内一些特殊的数据。

例如:获取主键列不同,而其它列相同的内容。获取表PRODUCTINFO中数量相同的不同产品。

  select p.productname,  p.productrice,  p.quantity  

        from productinfo p,  productinfo pr

         where p.productid != pr.productid  and p.quantity = pr.quantity

  4、外连接

  外连接分为左外连接、右外连接和全外连接。它们所表示的含义:

  • 左外连接:又称为左向外连接。使用左外连接的查询,返回的结果不仅仅符合连接条件的记录,还包含了左边表中的全部记录。也就是说,如果左边的某行记录在右边表中没有匹配项,则在返回结果中右表的所有选择列表项都为空。
  • 右外连接:又称为右向外连接。它与左外连接相反,将右边表中所有的数据与左边进行匹配,返回的结果除了匹配成功的记录,还包含了右表中未匹配成功的记录,并在其左表对应的列补空值。
  • 全外连接:返回所有匹配成功的记录,并返回左表未匹配成功的记录,也返回右表未匹配成功的记录

(1)左外连接    

  示例 :检索出productinfo表中每个产品对应的产品类型名称。

  select  p.productname, p.productprice, p.category,c.categoryid, c.categoryname

      from  productinfo  p  left join categoryinfo c on  p.category = c.categoryid ;

转载于:https://www.cnblogs.com/sdlzspl/p/7349822.html

你可能感兴趣的文章
jQuery 获取父窗口的元素 父窗口 子窗口(iframe)
查看>>
VM安装OracleLinux
查看>>
如何提高PHP应用的性能
查看>>
Python-----带参数的装饰器以及补充
查看>>
用asp.net MVC3 简单实现毕业设计 (强转)
查看>>
ADB抓取日志和日志过滤
查看>>
20941输入输出系统
查看>>
使用 Flash 描述复杂的社交网络
查看>>
唐骏十年管理经验谈:管理者要学会让员工感动
查看>>
几道和「黑洞照片」那种海量数据有关的算法问题
查看>>
为什么有禁用Mac系统的Spotlight的需求:
查看>>
paip. 定时 关机 休眠 的总结
查看>>
Oracle core02_数据块
查看>>
检查用户名是否存在jsp——access
查看>>
AmazeUI 保存浏览器数据 永久性
查看>>
使用内存数据库进行单元测试
查看>>
centos7 64位系统jdbc连接oracle报错问题
查看>>
最清晰细致的教程!一步步教你打造Win7+CentOS双系统
查看>>
移动端部分安卓手机(三星,小米)竖拍上传图片预览的时候发生旋转问题
查看>>
Visual Studio 11 Beta 官方下载地址
查看>>