sql了解2

简介: 本文介绍了SQL中多表连接查询的核心概念,包括内连接(取交集)、左外连接和右外连接(交集+单表全集)的用法及结果特征。同时讲解了子查询的不同形式(标量、列、行、子表),以及IN和BETWEEN操作符的区别和应用场景。此外,还说明了一对多关系中以“一”或“多”表为主对查询结果条数的影响,并通过示例展示了如何正确使用连接条件和子查询。

内连接(取的是交集)指的是数据相符合的全部信息(两个表中的所有字段,前提是符合 on后面的连接条件)

eg:select e.id,e.name,d.name from emp e inner join dept d on e.dept_id=d.id;

左外连接,右外连接(取得是交集+全集(单个表))

左连接:select emp.name ,dept.name from emp left join dept on

emp.dept_id=dept.id ;

右链接:select emp.name ,dept.name from emp right join dept on emp.dept_id=dept.id ;

一对多关系

果以多表为主(左连接以左边的表为主,右连接同理)则数据记录与多表的记录条数相同

如果以一表为主,则数据记录条数会发生变化,(eg:学生表共30条记录,占据三个部门,且有一个未分属部门,部门表中有5个部门,则最终的记录为 30-1+2  含义:以谁为主,谁要全出来,所以5个部门要全出来,29条记录占据三个部门,再加两个部门,则为最终的记录结果数)   实际是部门表全出,但是某一个部门有多条数据而已

子查询:

标量 -- 针对是值 用值去匹配

列-- 一列

行- 一行

子表 -- 超过一行一列

count(*) 统计行数,只要存在即可

count(列名) 统计不为null的

in 与between

对比项

IN 操作符

BETWEEN 操作符

操作对象类型

值列表(固定值或子查询结果)

范围(数值范围、日期范围等)

匹配逻辑

判断字段是否等于列表中的 某个值

判断字段是否在指定的 闭区间 [min, max]

语法示例

WHERE column IN (value1, value2)

WHERE column BETWEEN min AND max

NULL 处理

若列表包含NULL

,则column=NULL

时返回UNKNOWN

(需显式处理)

若边界值为NULL

,则整个表达式返回UNKNOWN

场景

推荐操作符

示例

筛选离散值(如部门 ID、状态)

IN

WHERE dept_id IN (10, 20)

筛选连续范围(如薪资、日期)

BETWEEN

WHERE salary BETWEEN 5000 AND 10000

子查询结果匹配

IN

WHERE salary IN (SELECT ...)

in 对应的是离散的值,betwee对应的是范围,c in(a,b) 对应的关系是   c= a or c= b

直接查询:允许结果集存在重复列名,数据库会自动重命名(但可能导致不可预测的列名)。

select tb_emp.*,tb_dept.name from tb_emp , tb_dept where tb_dept.id=tb_emp.dept_id and tb_dept.name='教研部'; 为什么这里没有说列明重复,但是当作为一个子类是却说列明可能重复

带上前缀也不行吗???    查询时结果是不带表名的 ,只根据字段名匹配

子查询要求列名必须唯一,否则报错

相关文章
|
4月前
|
SQL
SQL如何将一个列中值内的逗号分割成另一列
本文介绍了在 SQL Server 中如何将一个列中的逗号分隔值拆分成多列。通过使用 `REVERSE` 和 `PARSENAME` 函数组合,实现对地址字符串的拆分,分别提取出街道、城市和州信息。适用于处理类似结构化文本数据的场景,提升数据查询与分析效率。
|
网络协议 关系型数据库 Linux
Linux系统中如何开启和配置OpenGauss数据库的远程连接
openGauss是一款开源关系型数据库管理系统,采用木兰宽松许可证v2发行。openGauss内核深度融合华为在数据库领域多年的经验,结合企业级场景需求,持续构建竞争力特性.
|
SQL 关系型数据库 数据库
实时计算 Flink版操作报错之使用SQL 将 PostgreSQL 的 date 类型字段转换为 TIMESTAMP 类型时遇到报错,该如何处理
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
|
SQL 存储 Serverless
SQL语句拆分时间字段的技巧与方法
在数据库操作中,经常需要处理时间数据
|
安全 算法 API
阿里云用户开启MFA多因素认证的倡议书
因保管不当导致控制台登录密码泄露,很可能会被黑灰产盯上,发生盗用账户资金创建大量资源挖矿、删除用户数据进行勒索等安全的事件,严重威胁用户和平台的安全。2024年8月20日开始RAM访问控制产品将陆续为所有用户开启登录时强制进行MFA多因素认证。
1105 0
阿里云用户开启MFA多因素认证的倡议书
|
存储
kettle开发篇-列拆分为多行
kettle开发篇-列拆分为多行
542 0
|
Oracle 关系型数据库
行列转换利器:Oracle pivot函数全面解析
行列转换利器:Oracle pivot函数全面解析
310 0
行列转换利器:Oracle pivot函数全面解析
|
存储 Kubernetes 安全
Kubernetes:创建和分配Kubernetes Pod安全策略
Kubernetes:创建和分配Kubernetes Pod安全策略
Kubernetes:创建和分配Kubernetes Pod安全策略
|
机器学习/深度学习 人工智能 算法
极智AI | 谈谈非线性激活函数的量化方式
本文主要聊一聊深度学习模型量化中对激活函数的处理方式。
494 0
|
SQL 关系型数据库 MySQL
MySql字符串拆分实现split功能(字段分割转列、转行)
MySql字符串拆分实现split功能(字段分割转列、转行)
MySql字符串拆分实现split功能(字段分割转列、转行)