zoukankan      html  css  js  c++  java
  • 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
    坚持
  • 相关阅读:
    性能测试基本功 手动配置nginx+phpcgi+zend+mysql
    MySQL的show full processlist命令
    LoadRunner测试Webservices的例子
    Firefox 5 公开测试下载
    Shunra 即将发布 PerformanceSuite 7.0 和NetworkCatcher 7.0
    LoadRunner常见问题
    动态生成的图片保存成png格式
    如何解决ASP.NET程序安装到繁体系统上的乱码问题
    在Ubuntu上下载、编译和安装Android最新源代码
    腾讯微博api的蛋疼问题
  • 原文地址:https://www.cnblogs.com/gaoSJ/p/12882713.html
Copyright © 2011-2022 走看看