单表查询

1757可回收且低脂的产品

  • 注意要返回的是什么那么就去select什么

584寻找用户推荐人

  • MySQL是三值逻辑,分别为TRUE、FALSE和UNKNOWN,逻辑判断是如果逻辑运算符一端为NULL,则为UNKNOWN; 这段代码 referee_id =2 为TRUE,则NOT TURE为FALSE和UNKNOWN,即<>2 OR 为NULL

  • null不可以和数值类直接比较,其结果为unkonwn

  • ⭐️IFNULL(referee_id, 0) <> 2:意思是如果 referee_id 列的值为 NULL,则将其替换为 0,然后与 2 进行比较。如果 referee_id 列的值不等于 2,那么这一行将被包含在结果中

1148文章浏览 1

  • 我们可以在 SELECT 语句中使用 DISTINCT 关键字来从表 Views 中检索唯一元素
  • select 可以给列取别名

1683.无效的推文

  • 获取某列字符长度的函数: CHAR_LENGTH ()

多表查询

多表之间的业务关系主要有以下三种:

  1. 一对多(部门与部门员工的关系):多的一方建立外键,指向一的一方的主键
  2. 多对多(学生与课程的关系):建立第三张中间表,中间表至少包含两个外键,分别关联两方主键
  3. 一对一(用户与用户详情的关系):在任意一方加入外键,关联另外一方的主键,并且设置外键为唯一的(UNIQUE)

多表查询分类

连接

内连接

查询两个表之间的交集

1
2
3
4
5
6
7
1). 隐式内连接
SELECT
字段列表
FROM
表1 , 表2
WHERE
条件 ... ;

2). 显式内连接

1
2
3
4
5
6
7
8
SELECT
字段列表
FROM
表1
[ INNER ]
JOIN 表2
ON
连接条件 ... ;
外连接

外连接将两个表按照匹配条件合成一张表

  • 左外连接:查询左表所有数据,以及两张表交集部分数据
    1
    2
    3
    4
    5
    6
       表1
    LEFT
    [ OUTER ]
    JOIN 表2
    ON
    条件 ... ;
  • 右外连接:查询右表所有数据,以及两张表交集部分数据
    1
    2
    3
    4
    5
    6
     表1
    RIGHT
    [ OUTER ]
    JOIN 表2
    ON
    条件 ... ;
自连接

当前表与自身的连接查询,自连接必须使用表别名

1
2
3
4
5
6
7
8
 表A
别名A
JOIN
表A
别名B
ON
条件 ... ;

[!TIP]
在自连接查询中,必须要为表起别名,要不然我们不清楚所指定的条件、返回的字段,到底
是哪一张表的字段。

联合查询

子查询

指嵌套在主查询中的一个查询

1378.使用唯一标识码替换员工ID

使用outer join会保留主表的全部,以及次表与主表能匹配的记录,没有匹配时返回null

1
表1 left join 表2 on 连接条件

左外连接表示保留表1的所有数据,表2中没有的记录返回null

产品销售分析