zoukankan      html  css  js  c++  java
  • MySQL-子查询和多表联查

    1、多表联查
        使用多表联查的场景,有些时候数据在不同的表中,这个时候我们就需要用到mysql中的多表联查。

    2、多表联查概念

        将两个或两个以上的表按某个条件连接起来,从而选取需要的数据。多表联查是同时查询两个或两个以上的表时使用的。

    3、多表联查分类

      1. 内连接查询  

      内连接查询使用关键字join或cross join 或 inner join, 然后通过on连接表与表之间的条件

      注意: 内连接查询只能查询出两个表符合条件的数据

      语法: SELECT 字段,字段1,.. FROM table_name1 INNER JOIN table_name2 ON table_name1.column_name=table_name2.column_name

      2. 外连接查询

         2.1 左外连接

         左外连接使用关键字left join, 然后通过on连接表与表之间的条件

         注意:left join 会查询出left join左边的表所有的数据,即使右表没有匹配

         语法:SELECT 字段,字段1,... FROM table_name1 LEFT JOIN table_name2  ON table_name1.column_name=table_name2.column_name

       2.2 右外连接

             左外连接使用关键字right join,然后通过on连接表与表之间的条件

         注意: 即使左表中没有匹配,也从右表返回所有的行

         语法: SELECT 字段,字段1,.... FROM table_name1 RIGHT JOIN table_name2  ON table_name1.column_name=table_name2.column_name

    4、注意

      1. 子查询先执行里面的SQL语句,再执行外面SQL语句。
      2. 子查询的效率比较低,一般建议使用join替换子查询
      3. 子查询时,MySQL需要为内层查询语句的查询结果建立一个临时表。然后外层查询语句再临时表中查询记录。查询完毕后,MySQL需要撤销这些临时表。因此,子查询的速度会受到一定的影响。如果查询的数据量比较大,这种影响就会随之增大。


    5、 使用子查询原则

      1. 一个子查询必须放在圆括号中
      2. 将子查询放在比较条件的右边,这样可以增加SQL可读性

      子查询分类

      1. where 型子查询(重点掌握) ,where型子查询把内层查询结果当作外层查询的比较条件

      例如:SELECT * FROM user WHERE id in (SELECT uid FROM user_detail );


      2. exists/not exists型子查询

      EXISTS关键字表示存在。使用EXISTS关键字时,内层查询语句不返回查询的记录,而是返回一个真假值,如果内层查询语句查询到满足条件的记录,只要子查询中至少返回一个值,则EXISTS语句的值就为True。就返回true,否则返回false。当返回的值为true时,外层查询语句将进行查询,否则不进行查询


      3. 使用IN/NOT IN的子查询

      SELECT * FROM user WHERE id not in (SELECT uid FROM user_detail );

      4. 使用比较运算符的子查询 ( = > < >= <= != )

      SELECT * FROM user WHERE id = (SELECT uid FROM user_detail limit 1 );

  • 相关阅读:
    ORA-28001 has expired错误密码过期问题
    Oracle数据库无用户名密码登录
    使用Navicat连接Oracle数据库出现12541或者28547错误代码
    Solr的helloWord程序
    JS工具方法
    python发送邮件
    jmeter的性能监控框架搭建记录(Influxdb+Grafana+Jmeter)
    spotlight on mysql 监控
    linux下安装python环境
    yum的方式搭建mysql
  • 原文地址:https://www.cnblogs.com/onlyzc/p/8417028.html
Copyright © 2011-2022 走看看