zoukankan      html  css  js  c++  java
  • mysql

    一、联合查询

    在两种情况下可能用到:1、想要的结果在一条语句中会引起逻辑冲突,只能放在两条语句中是要使用联合查询

               2、一张表的数据量非常大时,会分隔成多张表存储,要查询时也要用到联合查询

    使用时要注意:1,  联合查询中如果要使用order by,那么就必须对这个select语句加上一对括号!

                        2,  联合查询中的order by必须搭配上limit关键字才能生效!因为系统默认的联合查询的结果往往比较多,所以要加以限制,当然,如果想显示全部的数据,可以在limit子句后面加上一个很大的数,比如:999999

    关键字:union

    语法形式

    select语句1

    union[union选项]

    select 语句2

    union[union选项]

    select 语句3

    union[union选项]

    ……

    union 选项  all也是缺省值,保留所有的查询结果!

                      distinct去重(默认值),去掉重复的查询结果!

    二、交叉连接

    关键字:cross join

    语法:select  * | 字段列表 from 1  cross join 2

    含义:就是从一张表的一条记录去连接另一张表中的所有记录,并且保存所有的记录,其中包括两个表的所有的字段!从结果上看,就是对两张表做笛卡尔积!

    三、内连接

    语法:select *|字段列表 from 左表 inner join 右表 on 左表.字段 = 右表.字段;      其中inner可以省略

    内连接的本质还是在做交叉连接,只不过是在交叉连接的基础之上加上一定的连接条件!符合连接条件的才会被显示,不符合的就不显示!(这样有可能丢失数据)!

    所以,如果内连接的时候没有连接条件,此时内连接就相当于是交叉连接!

    四、外连接

    外连接分为左外连接left  outer   join(左表为主表)和右外连接right  outer  join(右表为主表);

    是拿主表的每一条记录按照on后面的条件去匹配从表,如果匹配成功,那么就保留两张表的所有的记录,如果匹配失败(也就是主表的一条记录无法匹配从表的所有的记录),此时,只保留主表的记录,从表的记录全部用null代替,这样主表数据不会丢失

    五、自然连接

    自然连接分为自然内连接natural  inner  join ,自然左/右连接natural left/right  join

    自然连接的本质跟前面的内连接和外连接没有太大区别,只是这里的连接条件不是由用户来指定,而是由系统来指定罢了

    只要两张表中具有相同的字段名,系统就认为是一个连接条件,就会主动的去匹配这两个相同的字段名的值是否相同,如果两个表的相同的字段名的值相同,就认为匹配成功;如果两张表中有多个字段名相同,则所有相同的字段名的值都要相同才算是匹配成功

    六、子查询

    1、标量子查询

    往往就是把标量子查询的结果当成一个值来使用,比如用来判断,参与运算等

    例:

    2、列子查询

    也就是返回单列的子查询,也叫作列子查询!

    列子查询的结果往往就是一系列相同属性的数据的集合,所以,我们一般就是把列子查询的结果当成一个集合来看待,也通常就是配合in和not in集合运算符来使用!

    3、行子查询

    查询结果为一行的子查询就叫作行子查询!

    行子查询使用的不是很多,必须在查询的过程中构造一个行元素才能与子查询的结果进行比较!

    所谓的构造行元素,就是一个由多个字段组成的元素,形式上就是将多个字段用一个括号括起来!

    4、表子查询

    返回结果是多行多列的子查询就叫作表子查询!

    表子查询一般都是from型,也就是出现在from之后,一般当成一个数据源来使用!

    例:不使用统计函数,而使用表子查询

    1),  先对整个表根据score字段进行排序(升序)

    2),  对排序后的结果再根据home字段进行group by,因为group by只取每一个分组的第一个记录!

    如果想查所有家乡的所有的最低分(可能有重复情况):

    select * from php_student natural join (select home,min(score) as score from php_student group by home) as m;

    5、exists子查询

    exists主要是用来做判断的,返回的结果是一个布尔值!

    判断依据:如果子查询可以返回数据,那么exists的结果就是true,否则就是false!

    exists的主要作用就是判断后面的select语句有没有查询到数据

     

  • 相关阅读:
    螺旋矩阵算法
    shell脚本编程的10个最佳实践
    时间字符串转长整形数
    python的发音
    wget使用技巧
    History命令用法15例
    14位格式时间字符串
    Spring MVC
    Android SQLite数据储存方式
    MYSQL命令大全
  • 原文地址:https://www.cnblogs.com/zxz1987/p/6152342.html
Copyright © 2011-2022 走看看