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`;
      
posted @   烟雨断桥  阅读(3)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示