一、 前言
了解单个表的SQL基础知识,学习不同的方式筛选表的关键命令。
二、 实体关系图
实体关系图(ERD) 是查看数据库中数据的常用方法。以下是我们将从羊皮纸和波西使用的数据库的 ERD。这些图表可帮助您可视化要分析的数据,包括:
1.表的名称。
2.每个表中的列。
3.表协同工作的方式。
使用上面的图像和您的 ERD 新知识,将每个图像与适当的 ERD 相匹配。
三、 SELECT和FROM
SQL 命令,该命令将用于您编写的每个查询:SELECT…FROM…;
1.SELECT指示要为哪个列提供数据。
2.From指定要从哪个表选择列。请注意,此表中需要存在列。
如果要从表中的所有列中提供数据,请使用"*",如此:
请注意,使用 SELECT不会创建数据库中包含这些列的新表,它只是提供作为此命令的结果或输出的数据。
即使 SQL 不区分大小写,但通常和最佳做法是大写所有 SQL 命令,并保留查询中其他所有内容小写。
四、 LIMIT
SELECT(选择列)和FROM(选择表)语句。当您只想查看表的后几行时,LIMIT语句很有用。与加载整个数据集时,加载速度要快得多。
限制命令始终是查询的最后一部分。显示订单表的前 10 行以及所有列的示例
SELECT * FROM orders LIMIT 10;
五、 ORDER BY
ORDER BY语句允许我们使用任何列中的数据对结果进行排序。如果您熟悉 Excel 或 Google 表格,则使用ORDER BY类似于使用列对工作表进行排序。但是,一个关键区别是,在 SQL 查询中使用 ORDER BY 只会对该查询的结果产生临时影响,这与在 Excel 或工作表中按列对工作表进行排序不同。
ORDER BY语句始终在 SELECT 和FROM 语句之后查询中,但在LIMIT 语句之前。如果使用 LIMIT 语句,它将始终显示在最后。
可以在ORDER BY语句中的列之后添加以按降序排序,因为默认值是按升序排序。
1.编写查询以返回订单表中的 10 个最早订单。包括 、 和 。id occurred_at total_amt_usd
SELECT id, occurred_at, total_amt_usd
FROM orders
ORDER BY occurred_at
LIMIT 10;
2.编写查询以返回最大前5个订单。包括 、 和 。total_amt_usd id account_id total_amt_usd
SELECT id, account_id, total_amt_usd
FROM orders
ORDER BY
total_amt_usd DESC
LIMIT 5;
3.编写一个查询,显示所有订单的订单 ID、科目 ID 和总美元金额,首先按科目 ID(按升序)排序,然后按总美元金额(降序)排序。 id, account_id, total_amt_usd
SELECT id, account_id, total_amt_usd
FROM orders
ORDER BY account_id,toal_amt_usd DESC;
4.编写一个查询,该查询再次显示每个订单的订单 ID、科目 ID 和总美元金额,但这次首先按总美元金额(按降序排序),然后按科目 ID(按升序)排序。
SELECT id, account_id, total_amt_usd
FROM orders
ORDER BY total_amt_usd DESC, account_id;
六、 WHERE
使用WHERE语句,我们可以根据必须满足的条件显示表的子集。您还可以将WHERE 命令视为筛选数据。
WHERE 语句中使用的常用符号包括:
1.>(大于)
2.<(小于)
3.>=(大于或等于)
4.<=(小于或等于)
5.=(等于)
6.!=(不等于)
1.从订单表中拉出前 5 行和所有列,这些行和所有列的美元金额大于或等于 1000。gloss_amt_usd
SELECT *
FROM orders
WHERE gloss_amt_usd >= 1000
LIMIT 5;
2.从小于 500 的订单表中拉出前10 行和所有列。total_amt_usd
SELECT *
FROM orders
WHERE total_amt_usd < 500
LIMIT 10;
七、 派生列
创建现有列组合的新列称为派生列(或"计算"或"计算"列)。通常,您希望使用 AS 关键字为新列指定名称或"别名"。
此派生列及其别名通常只是临时的,仅在查询期间存在。下次运行查询并访问此表时,新列将不存在。
如果使用数学表达式从现有列派生新列,则这些熟悉的数学运算符将非常有用:
*(乘法)
+(添加)
-(减法)
/(部门)
八、 算术运算符
创建除以的列,以查找每个订单的标准纸张的单位价格。将结果限制为前 10 个订单,并包括和字段。standard_amt_usd standard_qty id account_id
SELECT id, account_id, standard_amt_usd/standard_qty AS unit_price
FROM orders LIMIT 10;
九、 逻辑运算符
LIKE 执行类似于使用WHERE 和的操作,但对于您可能不知道要查找的确切操作
IN 执行类似于使用WHERE和 的操作,但对于多个条件
NOT 与 IN和 Like 一起使用,以选择所有不确定或不确定的行
AND & BETWEEN 合并所有组合条件必须为 true 的操作
OR 合并至少一个组合条件必须为 true 的操作
1.名称以"C"为起点的所有公司。
SELECT name
FROM accounts
WHERE name
LIKE 'C%';
2.名称包含名称某处字符串"one"的所有公司。
SELECT name
FROM accounts
WHERE name
LIKE '%one%';
3.名称以"s"结束的所有公司。
SELECT name
FROM accounts
WHERE name
LIKE '%s';
4.使用帐户表查找帐户 ,以及沃尔玛、Target 和 Nordstrom 的帐户。
name primary_poc sales_rep_id
SELECT name, primary_poc, sales_rep_id
FROM accounts
WHERE name IN ('Walmart', 'Target', 'Nordstrom');
5.使用帐户表查找除沃尔玛、Target 和 Nordstrom 以外的所有商店的帐户名称、主 poc 和销售代表 ID。
SELECT name, primary_poc, sales_rep_id
FROM accounts
WHERE name NOT IN ('Walmart', 'Target', 'Nordstrom');
6.使用帐户表,查找名称不以"C"和"s"结束的所有公司。
SELECT name
FROM accounts
WHERE name NOT LIKE 'C%' AND name LIKE '%s';
7.在 SQL 中使用"之间"运算符时,结果是否包括终结点的值?通过编写一个查询来找出这个重要问题的答案,该查询显示所有订单的订单日期和数据,其中gloss_qty介于 24 和 29 之间。然后查看输出,查看"之间"运算符是否包含开始值和结束值。gloss_qty
SELECT occurred_at, gloss_qty
FROM orders
WHERE gloss_qty BETWEEN 24 AND 29;
SQL 中的介于一起的运算符是包容性的;即,包括终结点值。
因此,此查询中的"之间"语句等效于写入了"gloss_qty >= 24 和 gloss_qty <= 29"
8.查找以"C"或"W"为起点的所有公司名称,主要联系人包含"ana"或"Ana",但它不包含"eana"
SELECT *
FROM accounts
WHERE (name LIKE 'C%' OR name LIKE 'W%')
AND ((primary_poc LIKE '%ana%' OR primary_poc LIKE '%Ana%')
AND primary_poc NOT LIKE '%eana%');