笨鸟编程-零基础入门Pyhton教程

 找回密码
 立即注册
查看: 3473|回复: 0

面向初学者的重要 SQL 查询

[复制链接]

新手上路

Rank: 1

积分
13
发表于 2022-3-8 12:53:01 | 显示全部楼层 |阅读模式
从所有列中检索数据
这是一个非常基本的查询,用于显示表中的所有数据。请注意,此查询在 SELECT 之后只有一个字符:"*"(表示所有列)。因此,您不需要列出列的名称。当然,请记住写入 FROM 和要从中检索数据的表的名称。在此示例中,我们从表动物中检索数据。

  1. SELECT *
  2. FROM animal;
复制代码



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

  1. SELECT id, name
  2. FROM animal;
复制代码



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

  1. SELECT id, name, age
  2. FROM animal
  3. WHERE age>=2;
复制代码



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

  1. SELECT id, name, age
  2. FROM animal
  3. WHERE age >= 2 AND name = 'dog';
复制代码



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

  1. SELECT id, name, age
  2. FROM animal
  3. WHERE age >= 2 OR name = 'dog';
复制代码



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

  1. SELECT DISTINCT name, color
  2. FROM clothing;
复制代码



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

  1. SELECT name, color
  2. FROM clothing
  3. WHERE color IS NOT NULL;
复制代码



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



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

  1. SELECT id, name
  2. FROM animal
  3. ORDER BY name DESC, id;
复制代码



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

  1. SELECT id, name
  2. FROM animal
  3. WHERE name LIKE '%e%';
复制代码



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

  1. SELECT CONCAT(category, ' ', name)
  2. FROM tab;
复制代码



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

  1. SELECT price - discount
  2. FROM product;
复制代码



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

  1. SELECT last_name FROM customer
  2. UNION ALL
  3. SELECT last_name FROM employee;
复制代码



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

  1. SELECT last_name FROM customer
  2. INTERSECT
  3. SELECT last_name FROM employee;
复制代码



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

  1. SELECT customer.last_name, city.name
  2. FROM customer
  3. INNER JOIN city
  4.   ON customer.id = city.customer_id;
复制代码



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

  1. SELECT c.last_name AS lname, t.name AS city
  2. FROM customer AS c
  3. INNER JOIN city AS t
  4.   ON c.id = t.customer_id;
复制代码



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

  1. SELECT COUNT(id)
  2. FROM product;
复制代码



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

  1. SELECT AVG(price)
  2. FROM product;
复制代码



计算列中值的总和
SUM 计算列中值的总和。在此示例中,它返回所有产品的值。

  1. SELECT SUM(price)
  2. FROM product;
复制代码



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

  1. SELECT MIN(price)
  2. FROM product;
复制代码



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

  1. SELECT MAX(price)
  2. FROM product;
复制代码



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

  1. SELECT category, COUNT(id)
  2. FROM product
  3. GROUP BY category;
复制代码



使用聚合函数筛选行
您可以使用 HAVING 计算每个组的值后筛选记录。在此示例中,我们希望检索产品平均价格低于 56.50 的类别。

  1. SELECT category, AVG(price)
  2. FROM product
  3. GROUP BY category
  4. HAVING AVG(price) < 56.50;
复制代码



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

  1. DELETE FROM product;
复制代码



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

  1. DELETE FROM product
  2. WHERE id = 5;
复制代码



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

  1. DELETE FROM product
  2. WHERE id = 5;
复制代码



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

  1. INSERT INTO product(id, name, category)
  2. VALUES(25, 'sofa', 'furniture');
复制代码



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

  1. UPDATE product SET company = 'ABC';
复制代码



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

  1. UPDATE product
  2. SET name = 'armchair'
  3. WHERE id = 25;
复制代码



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

  1. CREATE TABLE tab(id int, name varchar(50));
复制代码



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

  1. DROP TABLE tab;
复制代码



回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|笨鸟自学网 ( 粤ICP备20019910号 )

GMT+8, 2024-9-8 11:16 , Processed in 0.029204 second(s), 18 queries .

© 2001-2020

快速回复 返回顶部 返回列表