• mysql 多表查询


    -- 多表操作

    1对多 (多的一方维护关系)

     多对多(中间表维护关系)

    一对一(一般运用的比较少 如果真的是一对一 那还不如设计到一张表单当中即可)

    -- 多表操作

    CREATE TABLE emp(
         id INT PRIMARY KEY  AUTO_INCREMENT,
         NAME VARCHAR(20) NOT NULL,
         dept_id INT NOT NULL,
         CONSTRAINT emp_dept_fk FOREIGN KEY(dept_id) REFERENCES dept(id)    
    )
        
    CREATE TABLE dept(
         id INT PRIMARY KEY  AUTO_INCREMENT,
         NAME VARCHAR(20) NOT NULL    
    )
        
    INSERT INTO dept(NAME)VALUES('开发部'),('市场部'),('系统部门')  -- 一次性插入多条数据  
    -- 查询操作
    
    SELECT * FROM emp,dept; -- 会产生笛卡儿积现象 通过以下方式解决 内连接,子查询,外连接
    
    -- 内连接
      -- 隐式内连接
    SELECT * FROM emp,dept WHERE emp.`dept_id` = dept.`id`;
      -- 显示内连接
    SELECT * FROM emp INNER JOIN dept ON emp.`dept_id` = dept.`id`;  -- inner可以省掉
    
    -- 外连接
      -- 左外连接 left out join  out可以省掉 特点 左边的表全部显示
    SELECT * FROM emp LEFT JOIN dept ON emp.`dept_id` = dept.`id`
      -- 右外连接 left out join  out可以省掉 特点 右边的表全部显示
    SELECT * FROM emp RIGHT JOIN dept ON emp.`dept_id` = dept.`id`
    
    -- 子查询
    
     -- 1 子查询的结果是单行单列  这种可以作为条件,使用运算符去判断  运算符:如 > ,>=, < 等
     SELECT * FROM students  WHERE english >= (SELECT MAX(english) FROM students )
     
     -- 2 子查询的结果是多行单列的  这种也可以作为条件
     SELECT * FROM students  WHERE NAME IN (SELECT NAME FROM s2 WHERE dept ='电脑部' )
     
     -- 3 子查询的结果是多行多列的  这样的类型子查询就可以把他看作一张表 来与需要的表进行关联查询
     SELECT * FROM dept t1,(SELECT * FROM emp WHERE emp.join_date>'2011-11-11')t2
     WHERE t1.id = t2.id
    坚持
  • 相关阅读:
    BUAA OO 2019 第三单元作业总结
    OpenJML入门
    BUAA OO 2019 第二单元作业总结
    BUAA OO 2019 第一单元作业总结
    Spring MVC原理
    Spring AOP原理
    Spring DI原理
    Spring IOC原理分析
    观察者模式
    装饰模式
  • 原文地址:https://www.cnblogs.com/gaoSJ/p/12882713.html
Copyright © 2020-2023  润新知