mysql 多表查询
多表查询:
-
多表笛卡尔集:
- 多表查询条件不能少于表的个数减一,否则会出现笛卡尔集合;
-- 两个表进行排列组合; SELECT * FROM emp, dept;
-
自连接:将同一张表看作两张表使用,然后使用别名【as 避免同名表】;
-
子查询:嵌套查询;
- 单行子查询:只返回一行的子查询;
- 多行子查询:返回多行的子查询;
- 子查询的结果作为一个临时表使用;
- 关键字:all和 any,和in用法相同,括号类为记录集合;
- all():是内部全部集合;
- any():是其中一个就可;
-
多列子查询:
where (field1, field2) = (值1, 值2);
-
表复制;
-- 复制数据 INSERT INTO emp_copy SELECT empno, ename, job, sal FROM emp; INSERT INTO emp_copy SELECT * FROM emp_copy; -- 复制表结构 CREATE TABLE emp02 LIKE emp;
-
去重:
CREATE TABLE emp03 LIKE emp; INSERT INTO emp03 SELECT DISTINCT * FROM emp02; SELECT * FROM emp03;
-
合并查询:为了合并多个select语句的结果,可以使用集合操作符;
- 集合操作符:union【会自动去重】,union all【不会去重】
-
外连接:
-
笛卡尔集只能通过where查询多表所共有的,不能以其中一个表为主;
-
左外连接:左表完全显示,其他表不能匹配的显示null;
-
右外连接:同理
-- left和right确定主表,其他表不能匹配的显示null, on后跟条件; SELECT * FROM dept RIGHT JOIN emp ON dept.`deptno`=emp.`deptno`; SELECT * FROM dept LEFT JOIN emp ON dept.`deptno`=emp.`deptno`;
-
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现