LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

[点晴永久免费OA]用好这13条SQL语句,就能解决90%的问题

admin
2023年4月6日 8:37 本文热度 813

结构化查询语言 (SQL) 是一种用于管理和操作关系数据库的编程语言。数据分析师和数据科学家广泛使用SQL从大型数据集中发现规律。

SQL 是一种强大的工具,可用于执行各种数据操作任务,包括过滤、排序、分组和聚合数据。在本文中,我将介绍 13 个基本 SQL 语句,借助它们可解决数据科学中90%的任务。这些语句易于理解和实现,可以为使用 SQL 打下坚实的基础。

无论你是刚接触SQL 还是有一定的经验,本文都可以为你提供处理数据的帮助和实用技巧。

1.选取数据

select语句用于从数据库中的一个或多个表中检索数据。你应该掌握使用 select 来搭配 where、ORDER BY 和 GROUP BY 等不同函数对数据进行过滤、排序和分组。下面是一个 select 语句的例子:

select column1, column2, column3
from table_name
where condition;

在此示例中column1,column2、 和column3是你要从中检索数据的列的名称,table_name是包含数据的表的名称。该where子句是可选的,但用于指定查询检索数据所必须满足的条件。

下面是一个示例,它从名为“客户”的表中选择客户年龄大于或等于 18 岁的所有记录:

select *
from customers
where age >= 18;

2.连接

JOIN 语句用于合并数据库中两个或多个表的数据。你应该掌握使用 JOIN 从多个表中检索数据并根据需要指定连接类型(例如 INNER、LEFT、RIGHT、FULL OUTER)。

以下是 JOIN 语句的几个示例:

内连接

INNER JOIN 仅返回两个表中的列之间存在匹配项的行。这是一个例子:

select orders.order_id, customers.customer_name
from orders
INNER JOIN customers
ON orders.customer_id = customers.customer_id;

在此示例中,orders表和customers表使用列customer_id进行连接。结果表将仅包含order_id和两个表中的customer_name列之间存在匹配项的列customer_id。

左连接

LEFT JOIN 返回左表中的所有行和右表中的匹配行。如果右表中没有匹配项,则结果将包含 NULL 值。下面是一个例子:

select customers.customer_name, orders.order_id
from customers
LEFT JOIN orders
ON customers.customer_id = orders.customer_id;

本例中,customers表为左表,orders表为右表。该customer_id列用于连接表。结果表将包括表中的所有行customers和表中的匹配行orders。如果表中没有匹配项orders,该order_id列将包含 NULL 值。

右连接

RIGHT JOIN 返回右表中的所有行和左表中的匹配行。如果左表中没有匹配项,则结果将包含 NULL 值。这是一个例子:

select customers.customer_name, orders.order_id 
from customers 
RIGHT  JOIN orders 
ON customers.customer_id = orders.customer_id;

本例中,orders表为左表,customers表为右表。该customer_id列用于连接表。结果表将包括表中的所有行orders和表中的匹配行customers。如果表中没有匹配项customers,该customer_name列将包含 NULL 值。

外连接

SQL 中的 OUTER JOIN 用于返回一个或两个表中的所有行,包括不匹配的行。OUTER JOIN 有两种类型:LEFT OUTER JOIN 和 RIGHT OUTER JOIN。

下面是一个 LEFT OUTER JOIN 的例子:

select customers.customer_name, orders.order_id 
from customers 
LEFT  OUTER  JOIN orders 
ON customers.customer_id = orders.customer_id;

本例中,customers表为左表,orders表为右表。该customer_id列用于连接表。结果表将包括表中的所有行customers和表中的匹配行orders。如果表中没有匹配项orders,该order_id列将包含 NULL 值。

下面是 RIGHT OUTER JOIN 的示例:

select customers.customer_name, orders.order_id 
from customers 
RIGHT  OUTER  JOIN orders 
ON customers.customer_id = orders.customer_id;

本例中,orders表为左表,customers表为右表。该customer_id列用于连接表。结果表将包括表中的所有行orders和表中的匹配行customers。如果表中没有匹配项customers,该customer_name列将包含 NULL 值。

值得注意的是,某些数据库可能不支持 RIGHT OUTER JOIN,但您可以通过使用 LEFT OUTER JOIN 并交换表的顺序来获得相同的结果。

3. where

where 语句用于根据指定的条件过滤数据。你应该掌握使用 where 来检索满足特定条件的数据。

以下是在 SQL 中使用“where”语句从表中过滤数据的示例:

假设我们有一个名为“employees”的表,其中包含“name”、“department”和“salary”列。我们可以使用“where”语句仅选择在“销售”部门工作且薪水大于 $50,000 的员工:

select name, department, salary 
from employees 
where department =  'Sales'  AND salary >  50000 ;

此查询将返回在“销售”部门工作且薪水大于 $50,000 的所有员工的列表,并在结果中显示他们的姓名、部门和薪水。

4. 分组

GROUP BY 语句用于根据一个或多个列对数据进行分组,聚合函数(例如 COUNT、SUM、AVG)可用于计算分组数据的汇总。你应该掌握使用 GROUP BY 来按类别分析数据。

假设我们有一个名为“employees”的表,其中包含“name”、“department”和“salary”列。我们可以使用 GROUP BY 语句按部门对员工进行分组,并计算每个部门的平均工资:

select department, AVG (salary) as avg_salary 
from employees 
GROUP  BY department;

此查询将返回所有部门的列表和每个部门的平均工资,计算方法是将该部门员工的所有工资总和除以该部门的员工人数。GROUP BY子句用于按部门对员工进行分组,AVG函数用于计算每个部门的平均工资。

department | avg_salary
-----------------------
Sales      | 65000
Marketing  | 55000
Engineering| 80000

在此示例中,我们可以看到销售部门的平均工资为 65,000 美元,市场部的平均工资为 55,000 美元,工程部的平均工资为 80,000 美元。

5.Having

HAVING语句用于在GROUP BY语句分组后过滤数据。您应该掌握使用HAVING来根据特定条件过滤分组数据。

下面是在 SQL 中使用HAVING子句的示例:

假设有一个名为“orders”的表,其中包含“order_id”、“customer_id”、“product_id”和“quantity”列。目标是找到订购了至少 50 件产品的客户。可以使用GROUP BY子句将订单按客户分组,计算出每个客户订购的每种产品的总数量。然后,可以使用 HAVING 子句来过滤结果,以仅包括订购总量至少为 50 件的客户:

select customer_id, SUM (quantity) AS total_quantity 
from orders 
GROUP  BY customer_id 
HAVING  SUM (quantity) >=  50 ;

此查询将返回所有客户及其订购产品总数的列表,但仅包括订购总量至少为 50 件的客户。GROUP BY子句用于按客户对订单进行分组,SUM函数用于计算每个客户订购的产品总数量,HAVING子句用于过滤结果只包含订购了总数量的客户至少50个单位。

查询的输出看起来像这样:

customer_id | total_quantity
---------------------------
123        | 60
456        | 70

在此示例中可以看到,客户 123 总共订购了 60 件产品,客户 456 总共订购了 70 件产品。这两个客户都满足 HAVING 子句中指定的条件,该条件要求总数量至少为 50 个单位。

6. 窗口函数

SQL 中的窗口函数用于对与当前行相关的一组行执行计算。这些函数应用于一个窗口,该窗口是基于指定条件或分区的表中行的子集。以下是 SQL 中窗口函数的一些示例:

  1. ROW_NUMBER():此函数为分区内的每一行分配一个唯一的序列号。ROW_NUMBER() 函数的语法是:
select column1, column2, ..., ROW_NUMBER () OVER ( ORDER  BY column1) AS row_num 
from table_name;

此查询将返回一个结果集,其中包含一个附加列“row_num”,该列包含根据“column1”的顺序分配给每一行的序号。

  1. SUM():此函数计算分区内列的总和。SUM() 函数的语法是:
select column1, column2, ..., SUM (column3) OVER ( PARTITION  BY column1) AS column3_sum 
from table_name;

此查询将返回一个结果集,其中包含一个附加列“column3_sum”,该列包含基于“column1”的值的每个分区的“column3”的总和。

  1. RANK():此函数根据指定列的值为分区内的每一行分配排名。RANK() 函数的语法是:
select column1, column2, ..., RANK () OVER ( PARTITION  BY column1 ORDER  BY column3 DESC ) AS rank_num 
from table_name;

此查询将返回一个结果集,其中包含一个附加列“rank_num”,该列包含每个分区中每行的排名,基于“column3”的降序。

  1. AVG():此函数计算分区内列的平均值。AVG() 函数的语法是:
select column1, column2, ..., AVG (column3) OVER ( PARTITION  BY column1) AS column3_avg 
from table_name;

此查询将返回一个结果集,其中包含一个附加列“column3_avg”,该列包含基于“column1”的值的每个分区的“column3”的平均值。

请注意,窗口函数的语法可能因所使用的特定数据库管理系统 (DBMS) 而异。

7.union

在 SQL 中,union运算符用于将两个或多个 select 语句的结果组合成一个结果集。select语句必须具有相同的列数,并且列必须具有兼容的数据类型。重复的行会自动从结果集中删除。

下面是在 SQL 中使用 union 运算符的示例:

假设我们有两个名为“customers”和“employees”的表,都有“name”和“city”列。我们想创建一个包含所有居住在纽约市的人(包括客户和员工)的列表。我们可以使用 union 运算符来组合两个 select 语句的结果:

select name, city 
from customers 
where city =  'New York' 
union 
select name, city 
from employees 
where city =  'New York' ;

此查询将返回居住在纽约市的所有人的列表,包括客户和员工。第一个 select 语句检索居住在纽约市的所有客户,第二个 select 语句检索居住在纽约市的所有员工。union 运算符组合这两个 select 语句的结果并删除任何重复的行。

查询的输出结果如下所示:

name        | city| city
-------------------
John Smith  | New York
Jane Doe    | New York
Bob Johnson | New York
Samantha Lee| New York

在这个例子中,可以看到有四个人住在纽约市,两个来自“customers”表,两个来自“employees”表,union 运算符将两个 select 语句的结果组合成一个单个结果集。

8. create

create 语句用于创建新的数据库表、视图或其他数据库对象。你应该掌握使用 create 创建新表、视图和其他数据库对象的方法。下面是在 SQL 中使用create 语句的示例:

假设我们要创建一个名为“customers”的新表,其中包含“id”、“name”、“email”和“phone”列。我们可以使用 create 语句来做到这一点:

create TABLE customers (
  id INT PRIMARY KEY,
  name VARCHAR(50),
  email VARCHAR(100),
  phone VARCHAR(20)
);

此查询将创建一个名为“customers”的新表,其中包含四列:“id”、“name”、“email”和“phone”。“id”列被定义为一个整数,并被设置为表的主键。“name”列定义为最大长度为 50 个字符的字符串,“email”和“phone”列也分别定义为最大长度为 100 和 20 个字符的字符串。

执行查询后,我们可以将新行插入“customers”表并从中检索数据:

insert INTO customers (id, name, email, phone)
VALUES (1'John Doe''johndoe@example.com''555-555-1234');
select * from customers;

此查询将在“customers”表中插入一个新行,ID 为 1,姓名为“John Doe”,电子邮件为“ johndoe@example.com ”,电话号码为“555–555–1234” . 第二个查询将从“customers”表中检索所有行,其中包括我们刚刚插入的新行:

id | name     | email                | phone
--------------------------------------------
1  | John Doe | johndoe@example.com | 555-555-1234

在这个例子中,我们使用create语句在数据库中创建了一个新表,并在表中插入了一条新行。

9. insert 

入 insert 语句用于将数据插入数据库表。你应该掌握使用 insert 向数据库表中添加新数据。下面是在 SQL 中使用 insert 语句的示例:

假设我们有一个名为“students”的表,其中包含“id”、“name”、“major”和“gpa”列。我们想在表中插入一个新行,记录 ID 为 1234、姓名为“John Doe”、主修“计算机科学”且 GPA 为 3.5 的学生。我们可以使用 insert 语句来做到这一点:

insert INTO students (id, name, major, gpa)
VALUES (1234'John Doe''Computer Science'3.5);

此查询将向“students”表中插入一个新行,其中包含“id”、“name”、“major”和“gpa”列的指定值。insert 语句指定我们要插入的表的名称,后面是我们要插入值的列列表。然后我们使用 VALUES 关键字来指定我们想要插入到每一列中的值,按照列的列出顺序。

执行查询后,“students”表将有一个包含以下值的新行:

id   | name      | major            | gpa
-----------------------------------------
1234 | John Doe | Computer Science | 3.5

在这个例子中,我们使用insert语句在 "学生 "表中插入了一条新行。

10.update

更新 update语句用于修改数据库表中的现有数据。你应该掌握使用 update 来更新表中一个或多个列的值。以下是在 SQL 中使用update语句的示例:

假设我们有一个名为“students”的表,其中包含“id”、“name”、“major”和“gpa”列。我们想更新 ID 为 1234 的学生的专业和 GPA。我们可以使用update语句来执行此操作:

update students
SET major = 'Mathematics', gpa = 3.7
where id = 1234;

此查询将更新 ID 为 1234 的“students”表中行的“major”和“gpa”列。update 语句指定我们要更新的表的名称,然后是 SET 关键字和列表,以及要更新的列值对。然后,我们使用 where 子句指定要更新的行。在本例中,我们想要更新 ID 为 1234 的行,因此我们指定“where id = 1234”。

执行查询后,“students”表将在 ID 为 1234 的行中更新“major”和“gpa”列的值:

id   | name      | major        | gpa
--------------------------------------
1234 | John Doe | Mathematics | 3.7

在这个例子中,我们使用update语句更新了 "students"表中某一行的 "专业 "和 "gpa "列。

11.delete

删除 delete 语句用于从数据库表中删除一行或多行。你应该掌握使用delete从表中删除数据的方法。下面是在 SQL 中使用delete语句的示例:

假设我们有一个名为“students”的表,其中包含“id”、“name”、“major”和“gpa”列。我们想从表中删除 ID 为 1234 的学生。我们可以使用delete语句来做到这一点:

从id = 1234的学生中删除;

delete from students
where id = 1234;

此查询将从“students”表中删除 ID 为 1234 的行。delete语句指定我们要从中删除的表的名称, where 子句用于指定要删除的行。在本例中,我们要删除 ID 为 1234 的行,因此我们指定“where id = 1234”。

执行查询后,“students”表将不再有 ID 为 1234 的行:

id   | name      | major        | gpa
--------------------------------------
5678 | Jane Doe | Computer Science | 3.5

在这个例子中,我们使用delete语句从"students"表中删除了一条记录。

12.drop

删除drop 语句用于删除数据库表或其他数据库对象。你应该掌握使用 drop 从数据库中删除不必要的表或其他对象。drop 语句的语法因被删除对象的类型而异,一些常见的示例如下所示:

  1. drop TABLE:此语句用于删除现有表及其所有数据和索引。drop TABLE 语句的语法是:


drop TABLE table_name;

2. drop INDEX:该语句用于从表中删除现有索引。drop INDEX 语句的语法是:

drop INDEX index_name ON table_name;

3. drop VIEW:该语句用于删除现有视图。drop VIEW 语句的语法是:

drop VIEW view_name;

4. drop PROCEDURE:该语句用于删除一个现有的存储过程。drop PROCEDURE 语句的语法是:

drop PROCEDURE procedure_name;

请注意,drop 语句的确切语法可能因所使用的特定数据库管理系统 (DBMS) 而异。此外,在使用 drop 语句时要小心,因为它会永久删除指定的对象以及所有关联的数据和索引。请确保在使用 drop 语句之前备份你的数据。

13.alter

改变 alter语句用于修改数据库表或其他数据库对象的结构。你应该掌握使用 alter 添加或删除列、更改数据类型或修改表的其他方面。alter 语句的语法因被修改对象的类型而异,但一些常见的示例是:

  1. alter TABLE:该语句用于修改现有表的结构,例如添加或删除列、更改数据类型或设置约束。alter TABLE 语句的语法是:


alter TABLE table_name
ADD column_name data_type [constraint],
MODIFY column_name data_type [constraint],
drop column_name,
ADD CONSTRAINT constraint_name constraint_definition,
drop CONSTRAINT constraint_name;

2. alter INDEX:该语句用于修改现有索引的结构,例如添加或删除列或更改索引类型。alter INDEX 语句的语法是:

alter INDEX index_name
ADD column_name,
drop column_name;

3. alter VIEW:此语句用于修改现有视图的定义,例如更改用于创建它的select 语句。alter VIEW 语句的语法是:

alter VIEW view_name
AS select_statement;

请注意,alter 语句的确切语法和可能因所使用的特定数据库管理系统 (DBMS) 而异。


该文章在 2023/4/6 8:37:44 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2024 ClickSun All Rights Reserved