SQL99之内连接查询

SQL99是SQL语言的一个标准,于1999年发布。内连接查询是SQL中非常常用的一种查询方式,用于根据指定的条件从两个或多个表中获取相关联的数据。下面将详细介绍SQL99中的内连接查询,并以通熟易懂的语言进行讲解,同时给出代码例子、注释及运行结果。

一、内连接查询概述

内连接(INNER JOIN)是一种基于两个或多个表共有列的等值条件的连接。它返回满足连接条件的记录,如果两个表中的记录在指定列上没有匹配的值,则不会出现在结果集中。 内连接查询的语法如下:

sql 复制代码
SELECT 列名1, 列名2, ...
FROM 表1
INNER JOIN 表2 ON 表1.列名 = 表2.列名;

二、代码例子及注释

假设有两个表:员工表(employee)和部门表(department),表结构及数据如下: 员工表(employee):

sql 复制代码
+----+------+--------+--------+
| id | name | dept_id | salary |
+----+------+--------+--------+
| 1  | 张三 | 1      | 8000   |
| 2  | 李四 | 2      | 9000   |
| 3  | 王五 | 1      | 10000  |
| 4  | 赵六 | 3      | 7000   |
+----+------+--------+--------+

部门表(department):

sql 复制代码
+----+----------+
| id | dept_name |
+----+----------+
| 1  | 研发部   |
| 2  | 市场部   |
| 3  | 财务部   |
+----+----------+
  1. 查询员工姓名、部门名称及薪资
sql 复制代码
SELECT e.name, d.dept_name, e.salary
FROM employee e
INNER JOIN department d ON e.dept_id = d.id;

注释:这里使用了表别名(e和d),方便在查询中引用表。通过INNER JOIN关键字将员工表和部门表进行内连接,连接条件为员工表的dept_id等于部门表的id。 运行结果:

sql 复制代码
+------+----------+--------+
| name | dept_name | salary |
+------+----------+--------+
| 张三 | 研发部   | 8000   |
| 李四 | 市场部   | 9000   |
| 王五 | 研发部   | 10000  |
| 赵六 | 财务部   | 7000   |
+------+----------+--------+
  1. 查询薪资大于8000的员工姓名、部门名称及薪资
sql 复制代码
SELECT e.name, d.dept_name, e.salary
FROM employee e
INNER JOIN department d ON e.dept_id = d.id
WHERE e.salary > 8000;

注释:在上一例子的基础上,添加了WHERE子句,用于筛选薪资大于8000的员工。 运行结果:

sql 复制代码
+------+----------+--------+
| name | dept_name | salary |
+------+----------+--------+
| 李四 | 市场部   | 9000   |
| 王五 | 研发部   | 10000  |
+------+----------+--------+
  1. 查询各部门员工数量、平均薪资及部门名称
sql 复制代码
SELECT d.dept_name, COUNT(e.id) AS employee_count, AVG(e.salary) AS avg_salary
FROM department d
INNER JOIN employee e ON d.id = e.dept_id
GROUP BY d.dept_name;

注释:这里使用了聚合函数COUNT和AVG,分别计算各部门的员工数量和平均薪资。通过GROUP BY子句按部门名称进行分组。 运行结果:

sql 复制代码
+----------+---------------+------------+
| dept_name | employee_count | avg_salary |
+----------+---------------+------------+
| 研发部   | 2             | 9000       |
| 市场部   | 1             | 9000       |
| 财务部   | 1             | 7000       |
+----------+---------------+------------+

三、总结

通过以上例子,我们可以看到内连接查询在SQL99中的使用方法。内连接查询能够有效地从多个表中获取相关联的数据,为数据分析提供便利。在实际应用中,我们可以根据需求灵活运用内连接查询,结合聚合函数、WHERE子句等,实现复杂的查询功能。需要注意的是,内连接查询只返回满足连接条件的记录,如果两个表中的记录在指定列上没有匹配的值,则不会出现在结果集中。在实际操作中,我们要根据业务需求选择合适的连接类型。

相关推荐
SelectDB19 小时前
SelectDB 是哪个公司的?是国产数据库吗?一篇讲清飞轮科技与 Apache Doris 的关系
数据库
这个DBA有点耶19 小时前
库内计算推理:一条SQL背后的算子融合,和外挂方案差了几次网络往返
数据库·人工智能·sql
这个DBA有点耶21 小时前
函数索引的“完全一致”有多苛刻:写法、字符集、类型,差一处就失效
数据库·mysql·代码规范
星恒随风21 小时前
MySQL 从零入门(三):表的约束详解
linux·服务器·数据库·笔记·mysql
Alluxio1 天前
Alluxio + OCI:为 AI 工作负载实现亚毫秒访问延迟与可扩展吞吐
运维·数据库·人工智能·分布式·缓存·ai·语言模型
数据库急诊室_阿哲1 天前
一次加索引建议的复核记录:从报告到签字
数据库·ai数据库
青瓦梦滋1 天前
Redis主从复制
服务器·数据库·redis·缓存·bootstrap
慧都小妮子1 天前
Wyn商业智能国产数据库适配:数据接入、分析缓存与审计日志验证清单
数据库·数据分析·数据可视化·审计日志·商业智能
Joy T1 天前
Redis Lua 原子限流:Lua 脚本、竞态条件与并发控制
数据库·redis·lua·限流·竞态条件·redis scripting
杨凯凡1 天前
MySQL 死锁怎么排查?InnoDB 锁等待与 Spring Boot 整事务重试实战
数据库·spring boot·mysql