Hoping1 发表于 2022-3-8 12:53:01

面向初学者的重要 SQL 查询

从所有列中检索数据这是一个非常基本的查询,用于显示表中的所有数据。请注意,此查询在 SELECT 之后只有一个字符:"*"(表示所有列)。因此,您不需要列出列的名称。当然,请记住写入 FROM 和要从中检索数据的表的名称。在此示例中,我们从表动物中检索数据。
SELECT *
FROM animal;


从某些列中检索数据上面的查询显示表动物中的所有数据。如果只想从某些列中检索数据,请在 SELECT 之后列出这些数据。在此示例中,我们从 id 和 name 列中检索数据。
SELECT id, name
FROM animal;


使用 WHERE 子句筛选数据除了从某些列中检索数据之外,还可以通过在 WHERE 之后列出条件来筛选数据。在此示例中,有一个条件:年龄>=2。我们正在寻找列龄中值为 2 或更多的记录。
SELECT id, name, age
FROM animal
WHERE age>=2;


使用由 AND 运算符联接的条件筛选数据如果要使用多个条件筛选数据,可以使用 AND。在此示例中,我们查找的记录在列年龄中值为 2 或更多,在列名称中为 "dog"。
SELECT id, name, age
FROM animal
WHERE age >= 2 AND name = 'dog';


使用 OR 运算符联接的条件筛选数据如果只需要满足其中一个条件,则可以使用 OR。在此示例中,我们查找列年龄值为 2 或更多或列名称中值为 "dog" 的记录。
SELECT id, name, age
FROM animal
WHERE age >= 2 OR name = 'dog';


使用 DISTINCT 检索非重复记录可以将 DISTINCT 放在 SELECT 之后,以便仅检索每种类型的记录中的一个。在此示例中,我们希望从列名称和颜色中检索记录。如果这些列中的值在多个记录中相同(例如,表中有多个黄色 T 恤),则查询仅返回其中一条记录。
SELECT DISTINCT name, color
FROM clothing;


检索特定列中没有 NULL 的数据如果只想从某个列中没有 NULL 的行中检索数据,请使用 IS NOT NULL。在此示例中,列颜色中的值可能不是 NULL。因此,将仅返回列颜色中存储了值的记录。与 IS NOT NULL 类似的运算符 IS IS NULL,用于检查某个值是否等于 NULL。
SELECT name, color
FROM clothing
WHERE color IS NOT NULL;


根据一列对数据进行排序要根据列对数据进行排序,请将列名放在 ORDER BY 之后
。默认排序方法是按字母顺序排列的,但您也可以通过在列名称后添加 DESC 来按降序显示行。在此示例中,我们希望根据列名对列 ID 和 name 中的数据进行排序。SELECT id, name
FROM animal
ORDER BY name;


根据多个列对数据进行排序您还可以根据多列对数据进行排序。在此示例中,记录首先按列名降序排序,然后根据列 ID 按升序排序。如果查询找到具有相同名称的记录(例如,列名中带有"dog"的所有记录),则会根据 id 按升序对这些记录进行排序。
SELECT id, name
FROM animal
ORDER BY name DESC, id;


搜索与特定模式匹配的值您可以使用 LIKE 来检索与特定模式匹配的数据。在此示例中,我们希望从列 id 和 name 中检索记录,这些列 ID 和 name 在列名中存储包含字符"e"的字符串(例如,具有大象、蜜蜂等名称的记录)。
SELECT id, name
FROM animal
WHERE name LIKE '%e%';


将文本列中的值联接到一个字符串中CONCAT 函数联接字符串。在此示例中,存储在列类别和名称中的字符串作为单列字符串返回,列类别中的值与列名称中的值之间有空格。
SELECT CONCAT(category, ' ', name)
FROM tab;


使用数学运算符您可以使用数学运算符(如"+"、"-"、"*"和"/")编写查询来计算值。在此示例中,我们希望通过从列价格中的值中减去列折扣中的值来计算折扣价。
SELECT price - discount
FROM product;


从不同表添加数据您可以使用运算符 UNION ALL 联接来自不同表的记录。请记住,记录必须具有相同的数据类型。在此示例中,我们希望从表客户中检索所有具有姓氏的行,并从表员工中检索具有姓氏的所有行。它将检索所有姓氏,即使它们重复。如果我们想选择所有姓氏而不重复,我们将使用UNION而不是UNION ALL。
SELECT last_name FROM customer
UNION ALL
SELECT last_name FROM employee;


查找数据集的交集INTERSECT 返回两组数据的交集。在此示例中,我们只想检索两个表中列出的姓氏。若要查看集合之间有何不同,请使用运算符 MINUS 或 EXCEPT。如果您想了解有关集合运算符的更多信息并查看此概念的直观说明,请阅读本文。
SELECT last_name FROM customer
INTERSECT
SELECT last_name FROM employee;


联接来自不同表的数据您可以使用 JOIN 连接表,包括内部连接、左连接、右连接、完全连接和交叉连接(有关详细信息,请参阅本文末尾列出的课程)。在此示例中,我们希望联接来自客户和城市表的数据。内部 JOIN 需要排在 FROM 和第一个表(客户)的名称之后。在"内部连接"之后,放置第二个表的名称"城市"。包含两个表中的数据的记录由 ON 匹配,条件为要联接。如果表城市中的记录在表客户的列 ID 和表城市中的列customer_id中具有相同的值,则表城市中的记录将与表客户中的记录匹配。
SELECT customer.last_name, city.name
FROM customer
INNER JOIN city
ON customer.id = city.customer_id;


使用表和列的别名如果联接表,最好对表名和列名使用别名。在此示例中,我们希望联接两个表(客户和城市),并分别将它们命名为 c 和 t。我们使用 AS 在 FROM 或 JOIN 中定义这些新名称。同样,我们将表中last_name的列与客户和表中的名称分别重命名为 lname 和城市。
SELECT c.last_name AS lname, t.name AS city
FROM customer AS c
INNER JOIN city AS t
ON c.id = t.customer_id;


计算表中的行数COUNT 计算行数。在此示例中,它返回表产品中存储的列 ID 的值数(所有产品的数目)。
SELECT COUNT(id)
FROM product;


计算列中值的平均值您可以使用 AVG 计算列中值的平均值。在此示例中,查询返回表产品中所有产品的平均价格。
SELECT AVG(price)
FROM product;


计算列中值的总和SUM 计算列中值的总和。在此示例中,它返回所有产品的值。
SELECT SUM(price)
FROM product;


查找列中的最小值您可以使用 MIN 查找存储在列中的最小值。在此示例中,查询返回产品之间的最低价格。
SELECT MIN(price)
FROM product;


查找列中的最大值您可以使用 MAX 查找列中存储的最大值。在此示例中,查询返回产品中的最大价格。
SELECT MAX(price)
FROM product;


计算记录组的聚合值GROUP BY 将行放入组中以计算值。在此示例中,我们使用 COUNT 计算每个组(类别)中的行数(产品数)。SELECT 中的列必须放入 GROUP BY 子句中。GROUP BY 可以以相同的方式与其他聚合函数(如 MAX、MIN、AVG 和 SUM)一起使用。
SELECT category, COUNT(id)
FROM product
GROUP BY category;


使用聚合函数筛选行您可以使用 HAVING 计算每个组的值后筛选记录。在此示例中,我们希望检索产品平均价格低于 56.50 的类别。
SELECT category, AVG(price)
FROM product
GROUP BY category
HAVING AVG(price) < 56.50;


从表中删除数据"从中删除"从中删除表中的所有数据。在此示例中,我们希望从表产品中删除所有数据。
DELETE FROM product;


从表中删除满足特定条件的记录您可以使用 WHERE 删除满足特定条件的记录。在此示例中,我们希望从 id 等于 5 的表产品中删除记录。
DELETE FROM product
WHERE id = 5;


从表中删除满足特定条件的记录您可以使用 WHERE 删除满足特定条件的记录。在此示例中,我们希望从 id 等于 5 的表产品中删除记录。
DELETE FROM product
WHERE id = 5;


在表中插入数据您可以使用 INSERT INTO 向表中添加新记录。在 INSERT INTO 之后,将表的名称放在括号中,然后将表的列的名称放在括号中。之后,将 VALUES 放在括号中,然后将列的值放在括号中。在此示例中,我们希望在表产品中将 25 插入到 id 中,将"沙发"插入到名称中,将"家具"插入到类别。
INSERT INTO product(id, name, category)
VALUES(25, 'sofa', 'furniture');


更新表中的列UPDATE 允许您修改记录中的数据。在"更新"之后,输入表的名称,然后放置 SET,然后输入要修改的列的名称,并插入"="和要插入的新值。此查询将修改列中的所有值。在此示例中,我们希望将列公司中的所有值更改为"ABC"。
UPDATE product SET company = 'ABC';


通过筛选记录更新列但是,如果不想更改列中的所有值,则可以添加带有条件的 WHERE。在该条件下,可以指定要修改的记录。在此示例中,我们希望仅将 id=25 的记录的列名中的值更改为"扶手椅"。
UPDATE product
SET name = 'armchair'
WHERE id = 25;


创建表您可以使用"创建表"创建表。在"创建表"之后,输入表的名称,并在括号中定义列的名称及其数据类型。在此示例中,我们希望创建包含两列的表选项卡:以整数作为数据类型的 id 和最多 50 个字符的名称。
CREATE TABLE tab(id int, name varchar(50));


删除表您可以使用放置表删除表。只需将要删除的表的名称
放在"删除表"之后即可。在此示例中,我们要删除表选项卡。
DROP TABLE tab;


页: [1]
查看完整版本: 面向初学者的重要 SQL 查询