MySQL数据库基础教程
MySQL数据库基础篇大纲
MySQL基础入门
MySQL简介
MySQL环境搭建
MySQL基本操作
MySQL数据类型
数据库和表的基本操作
数据的增删改查
MySQL高级查询
数据查询
多表查询
数据库设计
数据库规范化
索引与性能优化
存储过程与函数
存储过程
存储函数
事务与锁
事务处理
锁机制
备份与恢复
数据备份
数据恢复
MySQL高级特性
MySQL视图
MySQL触发器
MySQL安全管理
MySQL用户与权限管理
数据库安全
MySQL维护与监控
数据库维护
日志管理
-
+
首页
多表查询
### 多表查询 #### 连接查询(JOIN) 连接查询用于结合多个表中的相关数据。MySQL支持多种类型的连接,包括内连接(INNER JOIN)、左连接(LEFT JOIN)、右连接(RIGHT JOIN)和全连接(FULL JOIN)。 **操作命令**: ```sql SELECT ... FROM table1 JOIN_TYPE table2 ON table1.column_name = table2.column_name; ``` **示例**: ```sql -- 使用内连接查询 'orders' 表和 'customers' 表,获取所有订单及其对应的客户名称 SELECT orders.order_id, customers.customer_name FROM orders INNER JOIN customers ON orders.customer_id = customers.customer_id; -- 使用左连接查询 'employees' 表和 'departments' 表,获取所有员工及其部门名称,即使有些员工没有分配部门 SELECT employees.employee_name, departments.department_name FROM employees LEFT JOIN departments ON employees.department_id = departments.department_id; ``` #### 子查询 子查询是嵌套在另一个查询中的SQL查询,通常用在`SELECT`、`INSERT`、`UPDATE`或`DELETE`语句中。 **操作命令**: ```sql SELECT ... FROM ... WHERE column = (SELECT column FROM ...); ``` **示例**: ```sql -- 查询 'orders' 表中订单金额最高的订单信息 SELECT * FROM orders WHERE order_id = (SELECT order_id FROM orders ORDER BY amount DESC LIMIT 1); -- 查询 'employees' 表中工资高于平均工资的员工信息 SELECT * FROM employees WHERE salary > (SELECT AVG(salary) FROM employees); ``` #### 集合操作 集合操作允许你结合多个查询的结果集,包括并集(UNION)、交集(INTERSECT)和差集(EXCEPT)。 **操作命令**: ```sql -- 并集查询 SELECT column1, column2, ... FROM table1 WHERE condition UNION SELECT column1, column2, ... FROM table2 WHERE condition; -- 交集查询 SELECT column1, column2, ... FROM table1 WHERE condition INTERSECT SELECT column1, column2, ... FROM table2 WHERE condition; -- 差集查询 SELECT column1, column2, ... FROM table1 WHERE condition EXCEPT SELECT column1, column2, ... FROM table2 WHERE condition; ``` **示例**: ```sql -- 查询 'products' 表中价格在100到200之间的产品,并集查询价格在300到400之间的产品 SELECT product_name, price FROM products WHERE price BETWEEN 100 AND 200 UNION SELECT product_name, price FROM products WHERE price BETWEEN 300 AND 400; -- 查询 'employees' 表中部门编号为1或2的员工信息 SELECT employee_name FROM employees WHERE department_id = 1 INTERSECT SELECT employee_name FROM employees WHERE department_id = 2; -- 查询 'employees' 表中部门编号不是1的员工信息 SELECT employee_name FROM employees WHERE department_id != 1 EXCEPT SELECT employee_name FROM employees WHERE department_id = 1; ``` 请注意,`UNION`默认会去除重复的行,如果需要包含重复行,可以使用`UNION ALL`。`INTERSECT`和`EXCEPT`在某些数据库系统中可能不被支持,或者有不同的语法。 以上示例展示了如何在MySQL中执行多表查询,包括连接查询、子查询和集合操作。这些查询操作可以帮助你从多个表中提取和组合数据。
wwbang
2024年12月25日 17:53
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
分享
链接
类型
密码
更新密码