数据库数据的查询----连接查询

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

  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 ;

时间: 2024-08-12 20:50:58

数据库数据的查询----连接查询的相关文章

Hibernate批量处理数据、HQL连接查询

一.批量处理操作 批量处理数据是指在一个事务场景中处理大量数据.在应用程序中难以避免进行批量操作,Hibernate提供了以下方式进行批量处理数据: (1)使用HQL进行批量操作     数据库层面 (2)使用JDBC API进行批量操作  数据库层面 (3)使用Session进行批量操作   会进缓存 1.使用HQL进行批量操作 HQL可以查询数据,也可以批量插入.更新和删除数据.HQL批量操作实际上直接在数据库中完成,处理的数据不需要加载到Session缓存中.使用Query接口的execu

【大数据】SparkSql连接查询中的谓词下推处理(一)

本文首发于 vivo互联网技术 微信公众号 作者:李勇 目录: 1.SparkSql 2.连接查询和连接条件 3.谓词下推 4.内连接查询中的谓词下推规则 4.1.Join后条件通过AND连接 4.2.Join后条件通过OR连接 4.3.分区表使用OR连接过滤条件 1.SparkSql SparkSql 是架构在 Spark 计算框架之上的分布式 Sql 引擎,使用 DataFrame 和 DataSet 承载结构化和半结构化数据来实现数据复杂查询处理,提供的 DSL可以直接使用 scala 语

MySQL数据库实验三:连接查询

实验三    连接查询 实验名称:连接查询(2课时) 一.实验目的 理解JOIN语句的操作和基本使用方法,掌握内连接.外连接.自身连接的概念和使用. 二.实验环境 是MS SQL SERVER 2005的中文客户端. 三.实验示例 1. 查询每个学生及其选修课程的情况 SELECT  Student.*,SC.* FROM     Student,SC WHERE  Student.Sno = SC.Sno: 2.检索至少选修课程号为C2和C4的学生学号 SELECT X.S# FROM SC

MySql学习 - 查询/子查询/连接查询/联合查询

数据库查询 设定两张数据库表 第一个表格user包含: user_id username age sex 1 Alps1992 22 man 第二个表格toy包含 user_id toyname 1 OnePiece 普通查询: 查询关键字: AS, SUM, DESC, GROUP BY, ORDER BY, AVG, MIN, MAX, COUNT, LIMIT; 关键字查询例子 select * from user as u order by age limit 5; // as 用来做别

MySQL复杂查询:连接查询+取某个类型的最大值

本文链接:https://blog.inchm.cn/default/38.html 需求 假设有一个考试,比如CET(包括CET-4和CET-6),学生可以多次报考刷分.现在某教育单位要从考试结果中把每个学生的CET-6最高分拿出来,然后进行一个排名. 表结构 现在有两个数据表:student 和 exam_result,分别表示学生的基本信息和每次考试结果(包括CET-4和CET-6的结果). 这里不考虑表结构的优化和完整,只给出必要字段. student: 字段名 含义 id ID(主键)

MySQL多表查询 三表查询 连接查询的套路

多表查询 * 当我们的一条记录 分散不同的表中时,就需要进行多表查询 例如 一对一 一对多 多对多 1.笛卡尔积查询 意思是将两个表中的所有数据 全部关联在一起   例如 a表 有2条 b表有3条   一共6条   会产生大量的错误数据 需要用添加来过滤select *from 表1,表2,....... where 过滤条件?连接查询内连接查询 inner jon   select *from 表1 join 表2 on 关系过滤条件   两边的数据必须完全匹配成功才显示     select

MySql高级查询--连接查询

前言 我们使用SQL查询不能只使用很简单.最基础的SELECT语句查询.如果想从多个表查询比较复杂的信息,就会使用高级查询实现. 常见的高级查询包括多表连接查询.内连接查询.外连接查询与组合查询等,今天我们先来学习最常用.面试也很容易被问到的连接查询. 我们今天以一个简单的学生信息表(学生ID.学生姓名.学生性别)与一个学生成绩表(学生ID.学生成绩.成绩等级)作演示: student_info表: student_score表: 一.内连接(INNER JOIN) 1.等值连接 概述:指使用等

MySQL数据库联合查询与连接查询

联合查询 基本概念 联合查询是可合并多个相似的选择查询的结果集.等同于将一个表追加到另一个表,从而实现将两个表的查询组合在一起,使用为此为UNINO或UNION ALL 联合查询:将多个查询的结果合并到一起(纵向合并):字段数不变,多个查询的记录数合并 应用场景 1.将同一张表中不同的结果(需要对应多条查询语句来实现),合并到一起展示数据 2.最常见:在数据量大的情况下,会对表进行分表操作,需要对每张表进行部分数据统计,使用联合查询来将数据存放到一起显示 基本语法 select 语句 union

数据库 - 连接查询、嵌套查询、集合查询

连接查询 连接查询:同时涉及多个表的查询 连接条件或连接谓词:用来连接两个表的条件 一般格式: [<表名1>.]<列名1> <比较运算符> [<表名2>.]<列名2> [<表名1>.]<列名1> BETWEEN [<表名2>.]<列名2> AND [<表名2>.]<列名3> 连接字段:连接谓词中的列名称 连接条件中的各连接字段类型必须是可比的,但名字不必是相同的 嵌套循环法(