基础知识
SQL IN
SELECT column_nameFROM table_nameWHERE column_name IN (value1, value2);
作用:筛选column等于value1或value2。
SQL BETWEEN
SELECT column_name(s)FROM table_nameWHERE column_name IN (value1,value2);
作用:筛选大于等于value小于value2。
value可为字符串。
ALTER
添加列
ALTER TABLE table_nameADD column_name datatype;
删除列
ALTER TABLE table_nameDROP COLUMN column_name;
改变列数据类型
ALTER TABLE table_nameALTER COLUMN column_name datatype;
常用记不住的SQL语句收集
创建行时create_at字段自动填写为当前时间。
ALTER TABLE foo MODIFY create_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP;
更新行时update_at字段自动填写为当前时间。
ALTER TABLE foo MODIFY update_at DATETIME \NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP;
常用且记住了的SQL语句收集
单表关联查询
SELECT id FROM foo WHERE set_id = (SELECT set_id TABLE foo WHERE id = 1);SELECT city FROM weather WHERE temp_lo = (SELECT max(temp_lo) FROM weather);
分组过滤
SELECT city, max(temp_lo)FROM weatherGROUP BY cityHAVING max(temp_lo) < 40;
WHERE和HAVING区别
WHERE和HAVING的基本区别如下:WHERE在分组和聚集计算之前选取输入行(因此,它控制哪些行进入聚集计算), 而HAVING在分组和聚集之后选取分组行。因此,WHERE子句不能包含聚集函数; 因为试图用聚集函数判断哪些行应输入给聚集运算是没有意义的。相反,HAVING子句总是包含聚集函数(严格说来,你可以写不使用聚集的HAVING子句, 但这样做很少有用。同样的条件用在WHERE阶段会更有效)。
更新
UPDATE weatherSET temp_hi = temp_hi - 2, temp_lo = temp_lo - 2WHERE date > '1994-11-28';
函数
CAST(id as INT)
JOIN ON 常量
JOIN之前根据常量过滤。而Where是JOIN后,整行过滤掉。
SELECT * FROM dwd_fooLEFT JOIN dim_foo ONdim_foo.name = dwd_foo.name ANDdwd_foo.name = 'haha';
满足常量条件,查询维表。不满足直接空行JOIN。

