SQL 是结构化查询语言(Structured Query Language)的缩写,是一种编程语言,有助于从 关系数据库 中进行通信、管理和检索数据。此外,它还用于执行诸如过滤数据的行和列,合并数据和其他有用的数据操作任务。
在这篇文章中,我将带你了解 10 个最重要的 SQL 语句 ,这些语句将帮助你有效地处理分析数据。
1. SELECT 和 FROM
SELECT 和 FROM 是所有 SQL 查询的主干。每个基本的SQL查询都涉及这两条语句,并且随着查询变得越来越复杂,其他语句也会添加到其中。
SELECT 通知要选择哪些列,FROM 定义要从哪个表中查询数据。
举例:在包含多个表(客户,交易,订单)的数据库中,我们希望检查“客户”表的所有列。
2. WHERE
用于数据分析的下一个常用查询是 WHERE 子句。WHERE 用于根据特定条件筛选行。它还与其他 运算符 一起使用,包括AND,OR,BETWEEN,IN和LIKE,以将多个条件组合在一起。示例:
SELECT *
FROM transactions
WHERE currency="INR"
AND market_code = "Mark006";
3. DISTINCT
使用 DISTINCT 语句,你可以在列中找到唯一的非重复(不同)值。这是对数据集中的重复值进行排序的好方法。
在下面的示例中,FROM 语句中的 sales. transaction 用于声明我们要从哪个数据库和表中查询。
SELECT DISTINCT product_code
FROM sales.transactions;
4. ORDER BY
ORDER BY 可用于按特定列、按数字或字母顺序对查询结果进行排序。它可以通过两种方式排序:ASC升序,DESC降序。ASC不常用,因为它是SQL中的默认值。
以下示例显示了使用 DESC 的最新订单日期前交易记录表上的信息。
SELECT *
FROM transactions
ORDER BY order_date DESC;
5. GROUP BY 和 Aggregation
GROUP BY 子句有助于按相同的值对数据进行分组。它经常与聚合操作一起使用。聚合操作对返回单个值的一系列值执行各种计算。 聚合函数 的一些示例包括:
- SUM :返回所有值的总和。
- AVG :返回平均值。
- MAX :返回最大值。
- MIN :返回最小值。
- COUNT:返回总行数。
在此示例中,我们将检查客户表中按客户类型分组的所有行的计数。
SELECT COUNT(*)
FROM customers
GROUP BY customer_type;
6. LIMIT
使用大型数据集时,很难遍历表中的所有行,而且可能非常耗时。LIMIT 语句通过仅显示表的前几行或要显示的行数就能帮助解决此问题。
SELECT *
FROM markets
LIMIT 5;
7. AS
AS 查询用于临时命名表列或表本身。需要注意的是,这不会直接更改其原始列或表中的名称。此查询的示例如下所示:
SELECT order_id AS ID
FROM orders;
8. % 通配符
% 通配符与 LIKE 运算符一起用于搜索列中的特定模式。LIKE 运算符用于 WHERE 子句中。
观察一下customer表,第一个查询显示以字母“S”开头的客户名称,而第二个查询显示以字母“S”结尾的客户名称。
# Query showing customer names starting with S
SELECT *
FROM customers
WHERE customer_name LIKE 'S%';
# Query showing customer names ending with S
SELECT *
FROM customers
WHERE customer_name LIKE '%S';
第一个查询输出(以 S 开头)
第二个查询输出(以 S 结尾)
9. JOIN
为了理解 JOIN 的概念,我们先来看看主键和外键的区别。
在关系数据库中,主键用于唯一标识表中的每一行。例如,客户表的主键是customer_id,而订单表的主键是order_id列。
另一方面, 外键 提供了两个表中的数据之间的链接。具体来说,一个表中的外键将链接到另一个表中的主键。例如,order_id列是事务表中的外键,但它是订单表中的主键。
给定主键和外键之间的关系,我们可以在这个特定场景中执行 INNER JOIN 。查看不同类型的连接及其功能:
- INNER JOIN/JOIN:返回两个表中具有匹配值的记录。
- LEFT JOIN:返回左表中的所有记录和右表中的匹配记录。
- RIGHT JOIN:返回右表中的所有记录和左表中的匹配记录。
- FULL JOIN:当左表或右表中存在 匹配项时,返回所有记录。
INNER JOIN 的示例:
SELECT *
FROM transactions
INNER JOIN date
ON transactions.order_date = date.date
WHERE year = '2020';
事务表与具有匹配值的日期列上的“日期”表连接
10. UNION
UNION 子句合并来自多个 SELECT 查询的结果。但是,它必须满足以下条件:
- UNION 中的每个 SELECT 语句必须具有相同数量的列。
- 这些列还必须具有相似的数据类型。
- 每个 SELECT 语句中的列也必须按相同的顺序排列。
注意!JOIN 合并两个表中的列,而 UNION 合并两个查询中的行。
举例:学生表和课外活动表
学生表
课外活动表
SELECT student_id, student_name, grade
FROM student
UNION
SELECT student_id, name, extracurricular
FROM afterschool;
联合后的表格
UNION vs UNION ALL
默认情况下,UNION 运算符从结果集中删除所有重复行,而 UNION ALL 运算符在最终结果集中包括重复行。