基础知识

SQL IN

  1. SELECT column_name
  2. FROM table_name
  3. WHERE column_name IN (value1, value2);

作用:筛选column等于value1或value2。

SQL BETWEEN

  1. SELECT column_name(s)
  2. FROM table_name
  3. WHERE column_name IN (value1,value2);

作用:筛选大于等于value小于value2。
value可为字符串。

ALTER

添加列

  1. ALTER TABLE table_name
  2. ADD column_name datatype;

删除列

  1. ALTER TABLE table_name
  2. DROP COLUMN column_name;

改变列数据类型

  1. ALTER TABLE table_name
  2. ALTER COLUMN column_name datatype;

常用记不住的SQL语句收集

创建行时create_at字段自动填写为当前时间。

  1. ALTER TABLE foo MODIFY create_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP;

更新行时update_at字段自动填写为当前时间。

  1. ALTER TABLE foo MODIFY update_at DATETIME \
  2. NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP;

常用且记住了的SQL语句收集

单表关联查询

  1. SELECT id FROM foo WHERE set_id = (SELECT set_id TABLE foo WHERE id = 1);
  2. SELECT city FROM weather WHERE temp_lo = (SELECT max(temp_lo) FROM weather);

分组过滤

  1. SELECT city, max(temp_lo)
  2. FROM weather
  3. GROUP BY city
  4. HAVING max(temp_lo) < 40;

WHERE和HAVING区别

WHERE和HAVING的基本区别如下:WHERE在分组和聚集计算之前选取输入行(因此,它控制哪些行进入聚集计算), 而HAVING在分组和聚集之后选取分组行。因此,WHERE子句不能包含聚集函数; 因为试图用聚集函数判断哪些行应输入给聚集运算是没有意义的。相反,HAVING子句总是包含聚集函数(严格说来,你可以写不使用聚集的HAVING子句, 但这样做很少有用。同样的条件用在WHERE阶段会更有效)。

更新

  1. UPDATE weather
  2. SET temp_hi = temp_hi - 2, temp_lo = temp_lo - 2
  3. WHERE date > '1994-11-28';

函数

  1. CAST(id as INT)

JOIN ON 常量

JOIN之前根据常量过滤。而Where是JOIN后,整行过滤掉。

  1. SELECT * FROM dwd_foo
  2. LEFT JOIN dim_foo ON
  3. dim_foo.name = dwd_foo.name AND
  4. dwd_foo.name = 'haha';

满足常量条件,查询维表。不满足直接空行JOIN。

image.png