SQL语言多表查询

这篇具有很好参考价值的文章主要介绍了SQL语言多表查询。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

    多表查询的基础是单表查询,一些基本的语句都在单表查询中介绍过了

目录

主外键相等链接(两个表)

join链接(两个表)

子查询(两个表)

自链接(两个表)

别名

为什么加>或

多表查询(多于两个表)


主外键相等链接(两个表)

 需要明确的是,原本的结构不能变,所以

提到多表查询,是什么将多个表连接在一起的呢?

数据库中的表可通过键将彼此联系起来。主键(Primary Key)是一个列,在这个列中的每一行的值都是唯一的。在表中,每个主键的值都是唯一的。这样做的目的是在不重复每个表中的所有数据的情况下,把表间的数据交叉捆绑在一起。

                                                                                                                --摘自w3school

通过不同表中的相同键来连接,其中一个表的主键=另外一个表中的列,两者表示的是同一组数据,只不过是不同的表现形式

例子一

SELECT customerName
FROM customers ,payments
WHERE customers.customerNumber = payments.customerNumber

若不同表中的列名相等,那么需要在前面加上表名称

例子二

 SELECT customers.customerNumber
FROM customers ,payments
WHERE customers.customerNumber = payments.customerNumber
AND customers.limit>500

限定链接的行

join链接(两个表)

所有的列名都需要明确

join被用于where语句中用于提供链接条件

SQL JOIN (w3school.com.cn)

子查询(两个表)

子查询或嵌套查询时放置在另一个查询中的内部查询,子查询是从另一个表中(可能与主表相同,也可能不同)提取主表的限制条件。

使用条件:查询结果处理需要两个或两个以上的步骤,外部查询结果作用于子查询结果

如何写子查询呢?

子查询同外部查询的结构一样,都是由select from 的大框架组成的

外部查询:用于查询结果展示

子查询(内部查询):用于限制条件,返回符合子查询条件的查询结果

注意:子查询得出的结果一定要与外部查询的条件相对应

子查询返回一条结果,直接用等号链接查询结果就行了

SELECT `customerName` FROM `customers` 
WHERE `salesRepEmployeeNumber`=(
    SELECT `employeeNumber`
    FROM `employees` 
    WHERE employees.firstName='Pamela'
    AND employees.lastName='Castillo')

首先从employees 表单中查找   

'employees.firstName'='Pamela' 并且 employees.lastName='Castillo'的员工(employee),子查询返回该员工的员工编号,返回值为salesRepEmployeeNumber的左值,之后在customers之中查找指定编号的customerName

子查询返回多个结果(一个列表),使用IN语句

SELECT `customerNumber`,`customerName`,`salesRepEmployeeNumber`
FROM `customers` 
WHERE `salesRepEmployeeNumber` IN(
	SELECT `employeeNumber` 
   FROM `employees` 
	WHERE `officeCode`=6)

寻找officeCode=6的员工编号,并且打印该员工的顾客信息

小tips:可以现在子查询(内部查询)的表中把子查询先写出来,之后再粘贴到相应位置处会比较方便。

力扣题目  586. 订单最多的客户

自链接(两个表)

什么叫自查询?同一个表中元素的查询。

自查询将同一个表变成两个相同的大表,但是要对两个表起别名

别名

在from语句中直接添加在一个表名后面,用空格与原表隔开,

SELECT C.customerNumber, O.orderDate
FROM customers C, orders O
WHERE c.customerNumber=o.customerNumber
AND o.orderDate>'2005-05-01'

给表格customer起一个别名叫C,orders起一个别名叫O (SQL语句不区分大小写),并且可以讲起的别名应用到其他的SQL语句中

customerNumber是customer表的主键,是orders表中的外键,使用此方法来链接两个表格

讲完了别名,回过头再继续讲自链接

例子一:

查询employees表中firstName相同的员工名称(不包括同一个员工)

SELECT F.firstName,f.lastName,S.firstName,s.lastName
FROM employees F,employees S
WHERE F.firstName=S.firstName
AND f.employeeNumber>s.employeeNumber

 对于同一个表employees起了两个别名F 和 S (不区分大小写),通过相同的firstName链接。使用不同的employeeNumber区别同一个人。

为什么使用>区分相同的人?使用<>或 != 不可以吗?

AND f.employeeNumber>s.employeeNumber

链接不是等号而是>或者<用于排除相同的

他怎么能够排除与自己相同的呢?必须要加入其他的条件

为什么加>或<?

而不是<>

每次比较,都是将F表中的firstName挨个与S表中的firstName相比较,为了区分相同的行,用AND语句增加了一个条件使把自己排除在外

SQL语言多表查询

主键自查询

力扣例题

182. 查找重复的电子邮箱

select distinct(p1.Email) 
from Person p1  ,Person  p2 
where p1.Email = p2.Email #链接
AND p1.Id<p2.Id

多表查询(多于两个表)

多个表需要两两相连

SELECT o.ordernumber, productname
FROM `orders` O, orderdetails OD, Products P
WHERE o.ordernumber = OD.orderNumber
AND OD.productCode = P.productCode
AND o.`orderNumber` = 10177

只要主键彼此连接上了其他的就可以比较随意地使用了。文章来源地址https://www.toymoban.com/news/detail-454949.html

到了这里,关于SQL语言多表查询的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 六、MySQL---综合练习题(单表、多表、分组函数以及等级查询)

    数据库:dept_emp 1. dept表 :deptno’部门编号’、dname’部门名称’、loc’地理位置’; 2. emp表 :empno ‘员工编号’、ename ‘员工名字’、job ‘职位’、mgr ‘上司’、hiredate ‘入职时间’、sal ‘基本工资’,comm ‘补贴’,deptno ‘所属部门编号’; 3. salgrade :grade ‘工资等级’

    2024年01月21日
    浏览(51)
  • 数据库系统头歌实验一 SQL的DDL语言和单表查询

    第1关:创建供应商表S(SNO,SNAME,STATUS,CITY) 供应商表S由供应商代码(SNO)、供应商姓名(SNAME)、供应商状态(STATUS)、供应商所在城市(CITY)组成;S表如下 第2关:将P表中的所有红色零件的重量增加6。 零件表P由零件代码(PNO)、零件名(PNAME)、颜色(COLOR)、重量(WEIGHT)组成;

    2024年02月07日
    浏览(52)
  • mybatis-plus分页查询(springboot中实现单表和多表查询)

    一、mybatis-plus单表查询 使用mybatis-plus实现单表分页查询 非常方便,主要操作步骤如下: 配置分页查询拦截器 进行分页查询 1.首先,打开mybatis-plus官网的插件(插件主体) 或者点击mybatis-plus插件 我是配置在springboot项目中,所以找到springboot的分页配置 2.配置分页查询拦截器

    2024年02月08日
    浏览(42)
  • 【从删库到跑路】MySQL数据库的查询(单表查询,多表查询,内外连接,联合查询,子查询)

    🎊专栏【MySQL】 🍔喜欢的诗句:更喜岷山千里雪 三军过后尽开颜。 🎆音乐分享【如愿】 大一同学小吉,欢迎并且感谢大家指出我的问题🥰 在项目开发中,在进行数据库表结构设计时,会根据业务需求以及业务模块之间的关系,分析并设计表结构,由于业务之间相互关联

    2024年02月10日
    浏览(48)
  • MySQL基础篇补充 | 多表查询中使用SQL99实现7种JOIN操作、SQL99语法新特性

    目录 一:多表查询中使用SQL99实现7种JOIN操作  二:SQL99语法新特性 1. 自然连接Natural 2. USING连接 在多表查询中,除了遇到最多的内连接、左外连接和右外连接,还有其它的连接方式;接下来就聊聊其它的连接方式,如下图:  ​​​​​​ 并且在正式讲解之前,需要先了解

    2024年02月03日
    浏览(46)
  • 基于SqlSugar的开发框架循序渐进介绍(31)-- 在查询接口中实现多表联合和单表对象的统一处理

    在一些复杂的业务表中间查询数据,有时候操作会比较复杂一些,不过基于SqlSugar的相关操作,处理的代码会比较简单一些,以前我在随笔《基于SqlSugar的开发框架循序渐进介绍(2)-- 基于中间表的查询处理》介绍过基于主表和中间表的联合查询,而往往实际会比这个会复杂

    2024年02月07日
    浏览(51)
  • SQL Server 单表数据查询

    提示: 本篇文章详细介绍怎样向SQLServer中导入表格数据,导入之后根据不同的查询条件完成查询任务. 导入成功之后,可以点开表格查看内容: (如下图即导入成功) 其他表同理可得,也可以同时导入 (1)方法一 (2)方法二 (1)方法一 (2)方法二 (1)方法一 (2)方法二 (1)方法一 (2)方法二

    2023年04月08日
    浏览(41)
  • 【SQL开发实战技巧】系列(二):简单单表查询

    【SQL开发实战技巧】系列(一):关于SQL不得不说的那些事 【SQL开发实战技巧】系列(二):简单单表查询 【SQL开发实战技巧】系列(三):SQL排序的那些事 【SQL开发实战技巧】系列(四):从执行计划讨论UNION ALL与空字符串UNION与OR的使用注意事项 【SQL开发实战技巧】系列

    2024年01月16日
    浏览(40)
  • SQL查询优化---单表使用索引及常见索引失效优化

    系统中经常出现的sql语句如下: 优化后 建立索引前 索引后 如果系统经常出现的sql如下: 或者 那原来的idx_age_deptid_name 还能否正常使用? 如果索引了多列,要遵守最左前缀法则。指的是查询从索引的最左前列开始并且不跳过索引中的列。 如果系统经常出现的sql如下: 那么

    2024年02月08日
    浏览(62)
  • SQL查询数据之多表(关联)查询

      数据表: 关联查询主要分为:(inner join)交叉关联、(left join)左关联、(right join)右关联 (inner join)交叉关联: 定义:(inner join)交叉关联只返回两个表联结相等的字段的行 语法:select * from 表1 inner join 表2 on 表1.字段号=表2.字段号 比如我要查学生表和成绩表的交叉

    2023年04月08日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包