写在前面:SQL是工作中一个非常重要的工具,它使用的关键字和语法并不复杂,今天稍作总结,加深记忆。
SELECT
- SELECT 列名称 FROM 表名称
从表中选取指定的列,可以同时指定多个列,以“,”隔开。 - SELECT * FROM 表名称
从表中选取所有的列 。 - SELECT DISTINCT 列名称 FROM 表名称
返回唯一不同的值,即不包含重复值。
SELECT的结果被存在一个结果集中。
使用子查询
- 可以把一条SELECT语句返回的结果用于另一条SELECT语句的WHERE子句
- 作为计算字段使用子查询
- 逐渐增加子查询来建立查询,尤其适用于语句和数据比较复杂的情况
WHERE
SELECT 列名称 FROM 表名称
WHERE 列 运算符 值
WHERE后可以设置组合条件,以逻辑运算符AND或OR连接。SELECT 列名称 FROM 表名称
WHERE 列 IN (值1,值2…)
使用IN操作符在WHERE子句中规定多个值。SELECT 列名称 FROM 表名称
WHERE 列 BETWEEN 值1 AND 值2
使用BETWEEN操作符在WHERE子句中规定值的范围
ORDER BY
- SELECT 列名称 FROM 表名称
ORDER BY 列名称
ORDER BY语句默认按照升序进行排序,可以使用DESC关键字设置成降序排列。
GROUP BY
- SELECT 列名称 FROM表名称
GROUP BY 列名称
若分组的列中具有NULL值,则将NULL值作为一个分组返回。
所有使用WHERE的语句都可以用HAVING代替,唯一的区别是,WHERE过滤行,HAVING过滤分组。
LIMIT
- SELECT 列名称 FROM表名称
LIMIT 行号,行数
使用LIMIT语句指定返回第几行或前几行或第几行至第几行。
行数不够时,将返回能够返回的行。
SELECT子句顺序
SELECT——FROM——WHERE——GROUP BY——HAVING——ORDER BY——LIMIT
JOIN ON
- SELECT 列名称 FROM 表1
INNER/LEFT/RIGHT/FULL JOIN 表2
ON 表1.列名称 = 表2.列名称
用于根据两个或多个表中的列之间的关系,从这些表中查询数据。
INNER JOIN:在表中存在至少一个匹配时,返回行。
LEFT JOIN: 即使右表中没有匹配,也从左表返回所有的行。
RIGHT JOIN:即使左表中没有匹配,也从右表返回所有的行。
FULL JOIN:只要其中一个表中存在匹配,就返回行。
UPDATE与DELETE
- UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 值
用于修改表中数据 - DELETE FROM 表名称 WHERE 列名称 = 值
用于删除表中指定的行
使用UPDATE和DELETE语句时,除非是真的要更新或删除表中所有的行,否则一定要使用WHERE子句。
尽量保证每个表都有主键。
使用前要先用SELECT语句进行测试,保证它过滤的是正确的记录,以防编写的WHERE语句出错。
INSERT INTO
- INSERT INTO 表名称 VALUES (值1,值2,….)
向表格中插入指定的行 - INSERT INTO 列名称(列1,列2,…) VALUES (值1,值2,…),(值a,值b,…),…
向表格中指定的列插入值(可以是多个行,以括号区分,“,”隔开)
如果没有给出列名,必须给每个表列提供一个值,如果给出了列名,则必须对每个列出的列给出一个值。
INSERT OVERWRITE
-INSERT OVERWRITE 表名称 PARTITION (分区表列1名称=值1,分区表列2名称=值2)
用于重写表中内容,使用分区表可以带来诸多便利,如提高SQL运行效率,减少计费等。