SQL 表关联用法

本文主要介绍了MySQL中的表连接查询方法,包括同表内连接查询(自连接)INNER JOIN,以及多表连接查询的等值关联INNER JOIN、左关联LEFT JOIN、右关联RIGHT JOIN和全关联FULL JOIN,并给出了相应的SQL查询语句示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

同表内连接查询(自连接)INNER JOIN

SELECT  a.*  FROM  a_sheet  a

INNER JOIN

a_sheet  b

ON

a.ziduan1 = b.ziduan2

多表连接查询

等值关联(只取交集数)INNER JOIN

SELECT  a.*,b.*  FROM  a_sheet  a

INNER JOIN

b_sheet  b

ON

a.ziduan1 = b.ziduan2

左关联(左全右跟随)LEFT JOIN

SELECT  a.*,b.*  FROM  a_sheet  a

LEFT JOIN

b_sheet  b

ON

a.ziduan1 = b.ziduan2

另一种写法:

select * from dept ,employee where dept.deptid=employee.deptid(+)

在(+)计算时,哪个带(+)哪个需要条件符合的,另一个全部的。即放左即右连接,放右即左连接。

右关联(右全左跟随)RIGHT JOIN

SELECT  a.*,b.*  FROM  a_sheet  a

RIGHT JOIN

b_sheet  b

ON

  1. ziduan1 = b.ziduan2

全关联(左右皆全,无关联显NULL)FULL JOIN

SELECT  a.*,b.*  FROM  a_sheet  a

FULL JOIN

b_sheet  b

ON

a.ziduan1 = b.ziduan2

另一种写法:

select * from dept full join  employee on 1=1

 

 

 

### SQL 关联查询方法 SQL 中的 `JOIN` 是一种用于组合多个中的数据的操作方式。通过指定两个或更多之间的关系,可以从这些中提取所需的数据。 #### 使用 INNER JOIN 进行两关联 当需要从两个中获取满足特定条件的相关记录时,可以使用 `INNER JOIN` 关键字。它会返回两个中匹配条件的所有记录[^2]。 ```sql SELECT a.column_name, b.column_name FROM table1 a INNER JOIN table2 b ON a.common_column = b.common_column; ``` 上述代码示从 `table1` 和 `table2` 中选取具有共同列值的记录。 #### 多联查(三及以上) 对于三个或者更多的进行联合查询,可以通过连续使用 `INNER JOIN` 来实现。每增加一个就需要额外的一个 `INNER JOIN` 及其对应的连接条件[^4]。 ```sql SELECT t1.*, t2.*, t3.* FROM table1 t1 INNER JOIN table2 t2 ON t1.common_column = t2.common_column INNER JOIN table3 t3 ON t2.another_common_column = t3.common_column; ``` 此例子展示了如何将三个基于它们共有的字段联系起来并选出所有相关的信息。 #### 子查询的应用场景 除了直接利用 `JOIN` 实现间数据检索外,在某些情况下还可以采用子查询的方式完成更复杂的筛选逻辑。比如下面这个例子就是用到了子查询来限定部门范围内的员工信息[^1]: ```sql SELECT * FROM emp e WHERE e.dept_id IN ( SELECT d.id FROM dept d WHERE d.name IN ('财务部', '市场部') ); ``` 这里先通过内部查询找到符合条件(即属于‘财务部’或是‘市场部’) 的部门ID集合,然后再依据该结果集去外部主里查找对应的具体雇员详情。 #### RIGHT JOIN 示例 如果希望即使右侧格中有未配对上的项目也能显示出来,则可考虑运用RIGHT OUTER JOIN语法结构[^3]: ```sql SELECT employees.employee_id, departments.department_name FROM employees RIGHT JOIN departments ON employees.department_id = departments.department_id; ``` 这句命令将会把department列里面所有的项都列举出来,并且只给出那些能够成功与employee相匹配的部分;而对于找不到相应employee的情况则会在最终输出结果集中留下空白单元格。 ### 总结 综上所述,无论是简单的双交互还是更为繁杂的多重嵌套操作都可以借助于不同类型的JOIN以及灵活应用各种辅助工具如子查询等手段达成目标需求。掌握好基本概念之后再加以实践练习便能熟练驾驭此类技术难题了!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值