【SQL】未订购的客户

embedded/2024/10/19 2:24:35/

目录

语法

需求

示例

分析

代码


语法

SELECT columns  
FROM table1  
LEFT JOIN table2  
ON table1.common_field = table2.common_field;

LEFT JOIN(或称为左外连接)是SQL中的一种连接类型,它用于从两个或多个表中基于连接条件返回左表(LEFT JOIN语句左侧的表)的所有记录,以及右表中满足连接条件的记录。如果左表中的某行在右表中没有匹配行,则结果中该行的右表部分将包含NULL。

  • table1 是左表,即你希望从中获取所有记录的表。
  • table2 是右表,即你希望根据连接条件从左表中获取匹配记录的表。
  • common_field 是两个表中用于连接的共同字段。

使用LEFT JOIN时,如果右表(departments在上述示例中)有多行与左表(employees)中的某一行相匹配,结果中将包括左表的这一行与右表中所有匹配行的组合。这可能导致结果集中有多行具有相同的左表数据但不同的右表数据。

如果查询目的是获取右表中的所有记录,并且当左表中没有匹配项时,这些记录也应被包括在内,则应该使用RIGHT JOIN。然而,由于SQL标准的可移植性考虑,通常建议通过改变表的顺序和使用LEFT JOIN来达到相同的目的,因为并非所有数据库系统都支持RIGHT JOIN。在某些情况下,当两个表都没有完全匹配的记录时,你可能想要使用FULL OUTER JOIN,但这也不是所有数据库系统都支持的。

SELECT name

FROM customers

WHERE age > 30; 

WHERE子句是一个非常重要的组成部分,它用于指定筛选数据的条件,从而限制查询结果集仅包含满足条件的行。WHERE子句允许使用各种条件表达式,包括比较运算符(如=><<>等)、逻辑运算符(如ANDORNOT)以及特殊函数(如LIKEINBETWEEN等),以实现复杂的筛选逻辑。WHERE子句的使用非常灵活,可以基于单个字段或多个字段的组合来设置筛选条件。此外,还可以结合子查询来实现更高级的筛选逻辑。通过精确地指定筛选条件,WHERE子句有助于减少数据库需要处理的数据量,从而提高查询效率。

  • 在使用WHERE子句时,需要确保条件表达式的正确性,以避免查询结果不符合预期。
  • 当使用多个条件进行筛选时,要注意逻辑运算符的优先级,必要时可以使用括号来明确表达式的执行顺序。
  • 对于大型数据库表,合理的索引设计可以显著提高WHERE子句的执行效率。

需求

Customers 表:

+-------------+---------+
| Column Name | Type    |
+-------------+---------+
| id          | int     |
| name        | varchar |
+-------------+---------+
在 SQL 中,id 是该表的主键。
该表的每一行都表示客户的 ID 和名称。

Orders 表:

+-------------+------+
| Column Name | Type |
+-------------+------+
| id          | int  |
| customerId  | int  |
+-------------+------+
在 SQL 中,id 是该表的主键。
customerId 是 Customers 表中 ID 的外键( Pandas 中的连接键)。
该表的每一行都表示订单的 ID 和订购该订单的客户的 ID。

找出所有从不点任何东西的顾客。

以 任意顺序 返回结果表。

结果格式如下所示。

示例

输入:
Customers table:
+----+-------+
| id | name  |
+----+-------+
| 1  | Joe   |
| 2  | Henry |
| 3  | Sam   |
| 4  | Max   |
+----+-------+
Orders table:
+----+------------+
| id | customerId |
+----+------------+
| 1  | 3          |
| 2  | 1          |
+----+------------+
输出:
+-----------+
| Customers |
+-----------+
| Henry     |
| Max       |
+-----------+

分析

找出所有从不点任何东西的顾客。

判断客户是否曾经下过订单的条件是:如果一个客户 ID 在 orders 表中不存在,这就意味着他们从未下过订单。

基于共同的客户 ID(在 customers 表中的 id 列和 orders 表中的 customerId 列),将表 customers 与表 orders 进行连接。

left join Orders on Customers.Id = Orders.CustomerId

左连接之后选择 customerId 为 null 的记录,我们可以确定哪些客户没有下过订单。

where Orders.CustomerId is null

代码

select name as 'Customers'
from Customers
left join Orders on Customers.Id = Orders.CustomerId
where Orders.CustomerId is null


http://www.ppmy.cn/embedded/120994.html

相关文章

计算机毕业设计宠物领养网站我的发布领养领养用户信息/springboot/javaWEB/J2EE/MYSQL数据库/vue前后分离小程序

目录 1.课题背景 2.课题意义 ‌ 3.技术介绍 4.技术性需求 4.1后端服务‌&#xff1a; 4.2 前端展示‌ 5.数据库设计‌&#xff1a; 6.系统性能‌&#xff1a; 7.安全性‌&#xff1a; 8. 功能介绍&#xff1a; 9. 部分代码 1.课题背景 近年来&#xff0c;随着宠物饲养数量…

Maven下载、安装与环境配置详解:从零开始搭建高效Java开发环境

下载 官方网站&#xff1a;http://maven.apache.org/ 下载页面&#xff1a;http://maven.apache.org/download.cgi 官网 下载页面 注&#xff1a;本教程使用的是3.3.9版本的maven。 安装 maven安装包下载完成后是一个压缩文件&#xff0c;如下图所示&#xff1a; 我们需要将…

前端开发设计模式——策略模式

目录 一、策略模式的定义和特点 1.定义&#xff1a; 2.特点&#xff1a; 二、策略模式的实现方式 1.定义策略接口&#xff1a; 2.创建具体策略类&#xff1a; 3.定义上下文类&#xff1a; 三、策略模式的应用场景 1.表单验证场景&#xff1a; 2.动画效果切换场景&…

Linux:LCD驱动开发

目录 1.不同接口的LCD硬件操作原理 应用工程师眼中看到的LCD 1.1像素的颜色怎么表示 ​编辑 1.2怎么把颜色发给LCD 驱动工程师眼中看到的LCD 统一的LCD硬件模型 8080接口 TFTRGB接口 什么是MIPI Framebuffer驱动程序框架 怎么编写Framebuffer驱动框架 硬件LCD时序分析…

cat用来查看文件内容、合并文件,或者将文件内容输出到终端

cat 是 Unix 和 Linux 系统中的一个命令&#xff0c;它的名称来源于 “concatenate”&#xff08;连接&#xff09;&#xff0c;主要用来查看文件内容、合并文件&#xff0c;或者将文件内容输出到终端。 常用用法 查看文件内容 cat filename输出 filename 的内容到终端中。 例…

西电25考研 VS 24考研专业课大纲变动汇总

01专业课变动 西安电子科技大学专业课学长看到953网络安全基础综合变为 893网络安全基础综合&#xff0c;这是因为工科要求都必须是8开头的专业课&#xff0c;里面参考课本还是没变的&#xff0c;无非就是变了一个名字 对于其他变动专业课也是同理的 02专业课考纲内容变化 对于…

解决 GitHub 文件大小限制的问题

要解决 GitHub 文件大小限制的问题&#xff0c;可以使用 Git Large File Storage (Git LFS)。以下是设置步骤&#xff1a; 安装 Git LFS&#xff1a; 对于 macOS&#xff1a;brew install git-lfs对于 Windows&#xff1a;从 Git LFS官网 下载并安装。 初始化 Git LFS&#xff…

逻辑回归(下): Sigmoid 函数的发展历史

背景 闲来无事翻了一下之前买的一个机器学习课程及之前记录的网络笔记&#xff0c;发现遇到公式都是截图&#xff0c;甚至是在纸上用笔推导的。重新整理一遍之前逻辑回归函数的学习笔记&#xff0c;主要是为了玩一下 LaTex 语法&#xff0c;写公式挺有意思的。 整理之前三篇笔…