zoukankan      html  css  js  c++  java
  • Mysql 集合链接查询

    MySQL NULL 值处理  
      需求:我们已经知道MySQL使用 SQL SELECT 命令及 WHERE 子句来读取数据表中的数据,但是当提供的查询条件字段为 NULL 时,该命令可能就无法正常工作。
     
    为了处理这种情况,MySQL提供了三大运算符:
    • IS NULL: 当列的值是NULL,此运算符返回true。
    • IS NOT NULL: 当列的值不为NULL, 运算符返回true。
    • <=>: 比较操作符(不同于=运算符),当比较的的两个值为NULL时返回true。
    • 关于 NULL 的条件比较运算是比较特殊的。你不能使用 = NULL 或 != NULL 在列中查找 NULL 值 。
    • 在MySQL中,NULL值与任何其它值的比较(即使是NULL)永远返回false,即 NULL = NULL 返回false。
    • MySQL中处理NULL使用IS NULL和IS NOT NULL运算符。
    Mysql 连接(left join, right join, inner join ,full join)
      需求:我们已经学会了如果在一张表中读取数据,这是相对简单的,但是在真正的应用中经常需要从多个数据表中读取数据。
    • 本章节我们将向大家介绍如何使用 MySQL 的 JOIN 在两个或多个表中查询数据。
    • 你可以在SELECT, UPDATE 和 DELETE 语句中使用 Mysql 的 JOIN 来联合多表查询。
    JOIN 按照功能大致分为如下三类:
    • INNER JOIN(内连接,或等值连接):获取两个表中字段匹配关系的记录。
    • LEFT JOIN(左连接):获取左表所有记录,即使右表没有对应匹配的记录。
    • RIGHT JOIN(右连接): 与 LEFT JOIN 相反,用于获取右表所有记录,即使左表没有对应匹配的记录。

    Mysql操作
     
    例子:
    A    B
    -    -
    1    3
    2    4
    3    5
    4    6
    Inner join(取出交集)

    使用等价查询的内部连接将给出两个表的交集,即它们共有的两行。

    mysql> select * from A inner join B on A.a = B.b;
    
    mysql> select A.*,B.* from A,B where A.a=B.b;
    
    注:select 字段 from 表1 inner join 表2 on 表1.字段 = 表2.字段;
    
    注:select 表1.*,表2.* from A,B where A.a=B.b;
    +---+---+
    | a | b |
    +---+---+
    | 3 | 3 |
    | 4 | 4 |
    +---+---+
    2 rows in set (0.00 sec)
    测试
    Left join(取出差集)
    左连接将给出A中的所有行,加上B中的任何公共行。
    mysql> select * from A left join B on A.a = B.b;
    注:
    select 字段 from 表1 left join 表2 on 表1.字段 = 表2.字段;
    +---+------+
    | a | b    |
    +---+------+
    | 3 |    3 |
    | 4 |    4 |
    | 1 | NULL |
    | 2 | NULL |
    +---+------+
    4 rows in set (0.00 sec)
    测试
    Right join(反序排列差集)
    一个右连接将给出B中的所有行,加上A中的任何公共行。
    mysql> select * from A right join B on A.a = B.b;
    
    注:select 字段 from 表1 right join 表2 on 表1.字段 = 表2.字段;
    +------+---+
    | a    | b |
    +------+---+
    |    3 | 3 |
    |    4 | 4 |
    | NULL | 5 |
    | NULL | 6 |
    | NULL | 7 |
    +------+---+
    5 rows in set (0.00 sec)
    测试
    left+right(求出并级)
    select * from A left join B on A.a=B.b union select * from A right joinn B on A.a=B.b;
    
    注:union 结合使用。
    Full join(取出并集) (mysql不支持)
    一个完整的外部连接将会给你一个A和B的结合,即A中的所有行和B中的所有行。
    如果A中的某项在B中没有相应的数据,那么B部分是空的,反之亦然。
    select* froma FULLJOINb ona.a = b.b;
  • 相关阅读:
    个人项目作业
    第一次博客作业
    我和计算机的恩怨情仇
    OO第四单元总结暨学期总结
    OO第三单元总结
    OO第二单元总结
    OO第一单元总结
    提问回顾与个人总结
    [技术博客]使用pylint实现django项目的代码风格检查
    BUAA软工-结对项目作业
  • 原文地址:https://www.cnblogs.com/xiangsikai/p/8321367.html
Copyright © 2011-2022 走看看