当前位置: 首页 > news >正文

SQL入门:多表查询

SQL,或者说结构化查询语言(Structured Query Language),是用于管理和操作关系型数据库的标准语言。在本篇文章中,我们将重点介绍SQL中的多表查询,这是一种强大的工具,可以帮助我们从多个相关的表格中获取数据。

数据库和表的基本概念
在深入多表查询之前,我们首先需要理解数据库和表的基本概念。一个数据库可以看作是一个集合,其中包含了相关的数据。在数据库中,数据被组织成一个个的表。每个表都有一系列的列(字段)和行(记录)。

例如,假设我们有一个关于书籍的数据库,其中可能包含这样两个表:一个是“作者”表,记录了作者的信息,另一个是“书籍”表,记录了书籍的信息。这两个表可能通过“作者ID”字段相关联。

SQL多表查询
在SQL中,我们可以利用多表查询在一个查询中获取来自多个表的数据。最常用的多表查询类型有:

内连接(INNER JOIN)
左连接(LEFT JOIN)
右连接(RIGHT JOIN)
全连接(FULL JOIN)
内连接(INNER JOIN)
内连接返回两个表中匹配的行。如果在两个表中都存在匹配的行,那么结果集中就会包含这些行。

例如,假设我们有以下两个表:

作者表

author_id    author_name
1    张三
2    李四
3    王五
书籍表

book_id    book_name    author_id
1    书A    1
2    书B    2
3    书C    4
我们可以使用内连接查询来找出每本书的作者:

sql
Copy
SELECT book_name, author_name
FROM 书籍表
INNER JOIN 作者表 ON 书籍表.author_id = 作者表.author_id;
结果:

book_name    author_name
书A    张三
书B    李四
注意,书C并没有在结果集中显示,因为它的作者ID(4)在作者表中没有对应的记录。

左连接(LEFT JOIN)
左连接返回左表中的所有记录和右表中匹配的记录。如果在右表中没有匹配,结果是NULL。

使用上述的数据,我们可以使用左连接查询来找出每本书的作者,即使某些书没有在作者表中找到匹配的作者:

sql
Copy
SELECT book_name, author_name
FROM 书籍表
LEFT JOIN 作者表 ON 书籍表.author_id = 作者表.author_id;
结果:

book_name    author_name
书A    张三
书B    李四
书C    NULL
在这个例子中,书C的作者在作者表中没有找到,因此结果是NULL。

右连接(RIGHT JOIN)
右连接返回右表的所有记录和左表中匹配的记录。如果在左表中没有匹配,结果是NULL。

例如:

sql
Copy
SELECT book_name, author_name
FROM 书籍表
RIGHT JOIN 作者表 ON 书籍表.author_id = 作者表.author_id;
结果:

book_name    author_name
书A    张三
书B    李四
NULL    王五
全连接(FULL JOIN)
全连接返回左表和右表中所有的记录。如果在一边没有匹配,结果是NULL。

sql
Copy
SELECT book_name, author_name
FROM 书籍表
FULL JOIN 作者表 ON 书籍表.author_id = 作者表.author_id;
结果:

| book_name | author_name |
||-----------|-------------|
| 书A | 张三 |
| 书B | 李四 |
| 书C | NULL |
| NULL | 王五 |

注意:并非所有的数据库系统都支持全连接。例如,MySQL就不支持。在不支持全连接的数据库系统中,可以通过联合左连接和右连接的结果来模拟全连接。

多表查询中的 WHERE 与 ON
在进行多表查询时,经常会在 WHERE 或 ON 子句中设置条件。这两个子句的作用略有不同:

ON 子句在生成临时表时就进行条件判断,只有满足条件的记录会被插入到临时表中。
WHERE 子句在临时表生成完毕后,对临时表进行条件判断,只有满足条件的记录会被选择。
多表查询的性能优化
多表查询可能会涉及大量的数据处理,因此可能会出现性能问题。以下是一些优化策略:

尽可能减少查询的数据量。可以通过 WHERE 子句过滤出不需要的数据。
为经常用于连接的字段创建索引。索引可以加快查找速度和提高查询性能。
选择正确的连接类型。例如,如果只需要左表的数据,使用左连接会比内连接更快。
优化查询顺序。数据库会根据查询的顺序来执行查询,因此正确的查询顺序可以提高性能。
结论
多表查询是 SQL 中的一种强大工具,可以帮助我们从多个相关的表中获取数据。通过理解不同的连接类型和如何使用它们,你可以更有效地从你的数据中获取信息。同时,也要注意查询的性能,适当的优化可以使数据检索更加高效。

相关文章:

SQL入门:多表查询

SQL,或者说结构化查询语言(Structured Query Language),是用于管理和操作关系型数据库的标准语言。在本篇文章中,我们将重点介绍SQL中的多表查询,这是一种强大的工具,可以帮助我们从多个相关的表格中获取数据。 数据库…...

【C++】进一步认识模板

🏖️作者:malloc不出对象 ⛺专栏:C的学习之路 👦个人简介:一名双非本科院校大二在读的科班编程菜鸟,努力编程只为赶上各位大佬的步伐🙈🙈 目录 前言一、非类型模板参数二、模板的特…...

Mysql Oracle 区别

1. oracle select *, id需要在星号前加别名,mysql则不需要 mysql语法: select *, id from xin_student_t;oracle语法: select st.*, st.id from xin_student_t st;2. oracle表定义了别名,在查询时可以不用别名指定字段&#xf…...

华为OD-第K长的连续字母字符串长度

题目描述 给定一个字符串,只包含大写字母,求在包含同一字母的子串中,长度第 k 长的子串的长度,相同字母只取最长的那个子串。 代码实现 # coding:utf-8 # 第K长的连续字母字符串长度 # https://www.nowcoder.com/discuss/353150…...

【编程题】有效三角形的个数

文章目录 一、题目二、算法讲解三、题目链接四、补充 一、题目 给定一个包含非负整数的数组 nums ,返回其中可以组成三角形三条边的三元组个数。 示例1: 输入: nums [2,2,3,4] 输出: 3 **解释:**有效的组合是: 2,3,4 (使用第一个 2) 2,3,4 (使用第二个 …...

【mysql是怎样运行的】-EXPLAIN详解

文章目录 1.基本语法2. EXPLAIN各列作用1. table2. id3. select_type4. partitions5. type 1.基本语法 EXPLAIN SELECT select_options #或者 DESCRIBE SELECT select_optionsEXPLAIN 语句输出的各个列的作用如下: 列名描述id在一个大的查询语句中每个SELECT关键…...

数据结构例题代码及其讲解-链表

链表 单链表的结构体定义及其初始化。 typedef struct LNode {int data;struct LNode* next; }LNode, *LinkList;①强调结点 LNode *p; ②强调链表 LinkList p; //初始化 LNode* initList() {//定义头结点LNode* L (LNode*)malloc(sizeof(LNode));L->next NULL;return …...

[Open-source tool] 可搭配PHP和SQL的表單開源工具_Form tools(1):簡介和建置

Form tools是一套可搭配PHP和SQL的表單開源工具,可讓開發者靈活運用,同時其有數個表單模板和應用模組供挑選,方便且彈性。Form tools已開發超過20年,為不同領域的需求者或開發者提供一個自由和開放的平台,使他們可建構…...

移动数据业务价值链的整合

3G 时代移动数据业务开发体系的建立和发展,要求运营商从封闭、统一的业 务形态、单一提供业务,向开放的、个性化多元化的业务体系以及多方合作参与提 供业务的方向发展,不可避免的使通信价值链不断延长和升级,内容提供商、服务 …...

合并两个链表

题目描述 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 比如以下例子: 题目接口: /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListN…...

测试框架pytest教程(9)跳过测试skip和xfail

skip无条件跳过 使用装饰器 pytest.mark.skip(reason"no way of currently testing this") def test_example(faker):print("nihao")print(faker.words()) 方法内部调用 满足条件时跳过 def test_example():a1if a>0:pytest.skip("unsupported …...

HTML <textarea> 标签

实例 <textarea rows="3" cols="20"> 收拾收拾 </textarea>定义和用法 <textarea> 标签定义多行的文本输入控件。 文本区中可容纳无限数量的文本,其中的文本的默认字体是等宽字体(通常是 Courier)。 可以通过 cols 和 rows 属性来…...

探索图结构:从基础到算法应用

文章目录 理解图的基本概念学习图的遍历算法学习最短路径算法案例分析&#xff1a;使用 Dijkstra 算法找出最短路径结论 &#x1f389;欢迎来到数据结构学习专栏~探索图结构&#xff1a;从基础到算法应用 ☆* o(≧▽≦)o *☆嗨~我是IT陈寒&#x1f379;✨博客主页&#xff1a;I…...

Redis之GEO类型解读

目录 基本介绍 基本命令 geoadd 命令 geopos 命令 geodist 命令 georadius 命令 georadiusbymember 命令 geohash 命令 基本介绍 GEO 主要用于存储地理位置信息&#xff08;纬度、经度、名称&#xff09;添加到指定的key中。该功能在 Redis 3.2 版本新增。 GEO&…...

uniapp 微信小程序 路由跳转

保留当前页面&#xff0c;跳转到应用内的某个页面&#xff0c;使用uni.navigateBack可以返回到原页面 //在起始页面跳转到test.vue页面并传递参数 uni.navigateTo({url: test?id1&name"lisa" }); uni.redirectTo(OBJECT) 关闭当前页面&#xff0c;跳转到应用…...

【android12-linux-5.1】【ST芯片】HAL移植后没调起来

ST传感器芯片HAL按官方文档移植后&#xff0c;测试一直掉不起来&#xff0c;加的日志没出来。经过分析&#xff0c;是系统自带了一个HAL&#xff0c;影响的。 按照官方文档&#xff0c;移植HAL后&#xff0c;在/device/<vendor\>/<board\>/device.mk*路径增加PROD…...

Redis Lua脚本执行原理和语法示例

Redis Lua脚本语法示例 文章目录 Redis Lua脚本语法示例0. 前言参考资料 1. Redis 执行Lua脚本原理1.1. 对Redis源码中嵌入Lua解释器的简要解析&#xff1a;1.2. Redis Lua 脚本缓存机制 2. Redis Lua脚本示例1.1. 场景示例1. 请求限流2. 原子性地从一个list移动元素到另一个li…...

百望云华为云共建零售数字化新生态 聚焦数智新消费升级

零售业是一个充满活力和创新的行业&#xff0c;但也是当前面临很大新挑战和新机遇的行业。数智新消费时代&#xff0c;数字化转型已经成为零售企业必须面对的重要课题。 8 月 20 日-21日&#xff0c;以“云上创新 韧性增长”为主题的华为云数智新消费创新峰会2023在成都隆重召…...

JMETER基本原理

Jmeter基本原理是建立一个线程池&#xff0c;多线程运行取样器产生大量负载&#xff0c;在运行过程中通过断言来验证结果的正确性&#xff0c;可以通过监听来记录测试结果&#xff1b; JMETER是运行在JVM虚拟机上的&#xff0c;每个进程的开销比loadrunner的进程开销大&#x…...

elementUI自定义上传文件 前端后端超详细过程

下面是使用Element UI自定义上传文件的前后端详细过程&#xff1a; 前端过程&#xff1a; 引入Element UI组件库&#xff1a;在前端项目中引入Element UI库&#xff0c;可以通过CDN引入或者通过npm安装并导入。 创建上传组件&#xff1a;在前端代码中创建一个上传组件&#x…...

快速排序笔记

一、quick_sort方法中如果 il,jr 会死循环的分析 1、示例代码 void quick_sort(int a[],int l,int r){if(l>r) return;int il,jr; //此处设置会导致死循环int x num[(lr)>>1];while(i<j){while(a[i] <x); //死循环的地方while(a[--j] >x);if(i<j) swap(a…...

JAVA:(JSON反序列化Long变成了Integer)java.lang.Integer cannot be cast to java.lang.Long

困扰了好几个小时。。。 场景&#xff1a;mybatisplus从数据库取数据&#xff0c;只是用了最基础的 LambdaQueryWrapper 来查询&#xff0c;实体类如下。 TableField(typeHandler JacksonTypeHandler.class) private Set<Long> ids; 得到的Set数据却是Set<Integer…...

ui设计师简历自我评价(合集)

UI设计最新面试题及答案 1、说说你是怎么理解UI的? UI是最直观的把产品展示展现在用户面前的东西&#xff0c;是一个产品的脸面。人开始往往是先会先喜欢上美好的事物后&#xff0c;在去深究内在的东西的。 那么也就意味着一个产品的UI首先要做的好看&#xff0c;无论风格是…...

Nginx 反向代理

一. Nginx 反向代理 1.1 反向代理介绍 在计算机网络中&#xff0c;反向代理一般指代理服务器&#xff0c;其首先代替内网的服务器接收客户端请求 并从一个或多个服务器检索资源&#xff0c;然后将这些资源返回给客户端。在客户端看来&#xff0c;这些资 源就好像来自代理服务…...

[论文阅读笔记25]A Comprehensive Survey on Graph Neural Networks

这是一篇GNN的综述, 发表于2021年的TNNLS. 这篇博客旨在对GNN的基本概念做一些记录. 论文地址: 论文 1. 引言, 背景与定义 对于图像数据来说, CNN具有平移不变性和局部连接性, 因此可以在欧氏空间上良好地学习. 然而, 对于具有图结构的数据(例如社交网络 化学分子等)就需要用…...

iview时间控件 动态不可选日期 可选择24小时范围内 时间往后退24小时

演示 html 设定 起始时间 触发on-change 方法结束时间 options 动态设置不可选择的日期。 <!-- 起始时间 --> <FormItem :label"$t(startTime)" prop"startTime"><DatePickertransfertype"datetime":placeholder"$t(pleas…...

Rest学习环境搭建:服务消费者

建一个子模块 导入依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache…...

JVM内存模型介绍

内存模型 内存模型如下图所示 堆 堆是Java虚拟机所管理的内存最大一块。堆是所有线程共享的一块内存区域&#xff0c;在虚拟机启动时创建。此内存区域唯一的目的就是存放对象实例。所有的对象实例都在这里分配内存 Java堆是垃圾收集器管理的主要区域。从内存回收的角度来看&am…...

2000-2021年地级市产业升级、产业结构高级化面板数据

2000-2021年地级市产业升级、产业结构高级化面板数据 1、时间&#xff1a;2000-2021年 2、范围&#xff1a;地级市 3、指标&#xff1a;年份、地区、行政区划代码、地区、所属省份、地区生产总值、第一产业增加值、第二产业增加值、第三产业增加值、第一产业占GDP比重、第二…...

Java实现密码加密实现步骤【bcrypt算法】

一、SpringBoot和SSM框架均可实现密码加密的方法 在Spring Boot和SSM中实现密码加密可以使用bcrypt算法。bcrypt是一种密码哈希函数&#xff0c;通过将密码与随机生成的盐值进行混合&#xff0c;然后再进行多次迭代的计算&#xff0c;最终生成一个安全的哈希密码。 下面是使用…...

公司网站代码模板下载/重庆seo排名优化费用

爬取多个网页 讲师的博客&#xff1a;https://www.cnblogs.com/wupeiqi/p/6229292.html在编写爬虫时&#xff0c;性能的消耗主要在IO请求中&#xff0c;当单进程单线程模式下请求URL时必然会引起等待&#xff0c;从而使得请求整体变慢。比如找10个国外的资源爬取&#xff0c;慢…...

net创建网站之后怎么做/seo算法培训

* 单应用 多应用模式 这个Java没有是个硬伤 起码没有这么方便 *中间件 类似于JavaWeb 过滤器和拦截器 *路由 Java Web框架代表SpringMvc 可以配置路径的 类似于Tp中的普通路由&#xff0c;Tp的路由应用提供更高的支持比如域名路由/独立设置路由/路由正则匹配/路由绑定等 …...

石家庄网站建设服务/太原百度公司地址

1.个人反思 工作六年&#xff0c;可以说基本上都很忙很累&#xff0c;但停下来想想&#xff0c;自己各方面成长都很慢&#xff01; 最近看了敏捷个人相关资料&#xff0c;仔细反思了一下&#xff0c;自己一直处于一种无目标&#xff0c;无计划的 一种瞎忙状态&#xff01; 用三…...

网站建设哪个好/免费网络项目资源网

洛谷题目链接:进制转换 题目描述 我们可以用这样的方式来表示一个十进制数: 将每个阿拉伯数字乘以一个以该数字所处位置的(值减1)为指数,以10为底数的幂之和的形式。例如:123可表示为 \(1\times 10^22\times 10^13\times 10^0\) 这样的形式。 与之相似的,对二进制数来说,也可表…...

宁波专业做网站公司/seo短视频网页入口引流下载

如果午休醒来时你的心跳很厉害&#xff0c;你可能会感到不适或恐慌。这可能是由于许多原因造成的&#xff0c;包括&#xff1a; 心脏疾病&#xff1a;如果你有心脏疾病&#xff0c;你的心跳可能会感到加快。 身体活动&#xff1a;如果你在午休期间睡眠不足或者过度放松&#xf…...

扬州做网站需要多少钱/微信营销平台有哪些

pg的高可用架构中&#xff0c;主库挂掉后&#xff0c;备库会自动升级为主库继续提供服务&#xff0c;对于原来的主库通常有两种处理方式&#xff1a; 删掉&#xff0c;重搭新备库。降级为备库&#xff0c;继续服务。 很显然&#xff0c;相比来说第一种不是个很好的方案&#x…...