90% 的数据科学任务可以使用这13 条SQL 语句来解决。
SQL(结构化查询语言)是一种用于管理和操作关系数据库的编程语言。数据分析师和数据科学家广泛使用SQL 来发现大型数据集中的模式。
SQL 是一个功能强大的工具,可用于执行各种数据操作任务,例如过滤、排序、分组和聚合数据。本文介绍了13 条基本SQL 语句,可以解决90% 的数据科学任务。这些语句易于理解和实现,为使用SQL提供了坚实的基础。
无论您是SQL 新手还是有一定经验,本文都提供了处理数据的帮助和实用技巧。
1.选取数据
SELECT 语句用于从数据库中的一个或多个表中检索数据。您需要掌握将SELECT 与WHERE、ORDER BY 和GROUP BY 等各种函数结合使用来过滤、排序和分组数据。以下是SELECT 语句的示例:
SELECT Column 1, Column 2, Column 3FROM 表名称WHERE 条件;在此示例中,Column 1、Column 2 和Column 3 是要从中检索数据的列的名称,表名称是要从中检索数据的表的名称;包含数据。 WHERE 子句是可选的,但用于指定查询必须满足才能检索数据的条件。
以下示例从名为Customers 的表中选择客户年满18 岁的所有记录。
SELECT *FROM CustomersWHERE Age=18;
2.连接
JOIN 语句用于组合数据库中两个或多个表中的数据。您需要掌握如何使用JOIN 从多个表中检索数据,并可选择指定联接类型(INNER、LEFT、RIGHT、FULL OUTER 等)。
以下是JOIN 语句的一些示例。
内部联接
INNER JOIN 仅返回两个表中的列之间匹配的行。一个例子如下所示。
SELECTorders.order_id,customers.customer_nameFROMordersINNER JOINcustomersONorders.customer_id=Customers.customer_id; 在此示例中,orders 和Customers 表使用customer_id 列进行连接。结果表仅包含customer_id 列,其中两个表的order_id 和customer_name 列都匹配。
左连接
LEFT JOIN 返回左表中的所有行以及右表中的匹配行。如果右表中没有匹配项,则结果将包含NULL 值。一个例子如下所示。
SELECT Customers.customer_name,orders.order_idFROM CustomersLEFT JOINordersSON Customers.customer_id=orders.customer_id; 在此示例中,customers 表是左表,orders 表是右表。 customer_id 列用于连接表。结果表包含客户表中的所有行以及订单表中的匹配行。如果表中没有匹配的订单,则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 列用于连接表。结果表包含订单表中的所有行以及客户表中的匹配行。如果表中没有匹配的客户,则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 列用于连接表。结果表包含客户表中的所有行以及订单表中的匹配行。如果表中没有匹配的订单,则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 列用于连接表。结果表包含订单表中的所有行以及客户表中的匹配行。如果表中没有匹配的客户,则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 Employee WHERE Department='Sales' AND Salary 50000 ;此查询返回在'Sales' 部门工作且薪水大于$50,000 的所有员工的列表,其中包含姓名、部门、薪水是显示。您的工资将显示在结果中。
4. 分组
GROUP BY 语句用于根据一列或多列对数据进行分组,聚合函数(如COUNT、SUM、AVG)可用于计算分组数据的汇总。您应该掌握使用GROUP BY 按类别分析数据。
假设您有一个名为“employees”的表,其中包含“Name”、“Department”和“Salary”列。您可以使用GROUP BY 语句将员工按部门分组,并计算每个部门的平均工资。
SELECT Department, AVG (salary) as avg_salary FROM员工GROUP BY 部门该查询列出了所有部门,每个部门的工资是用该部门所有员工的工资总和除以员工人数计算得出的。返回平均工资。在那个部门。 GROUP BY 子句用于按部门对员工进行分组,AVG 函数用于计算每个部门的平均工资。
部门| avg_salary------------销售65000 营销| 55000 工程| 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 FROMorders GROUP BY customer_id HAVING SUM (quantity)=50 ;该查询返回所有客户的列表以及该客户订购的产品总数,但只返回总共订购的客户。至少50 件。 GROUP BY 子句用于按客户对订单进行分组,SUM 函数用于计算每个客户订购的产品的总数量,HAVING 子句用于仅包括用于过滤的订购总数量的客户。结果。至少50个单位。
查询的输出如下所示:
customer_id |total_quantity--------------123 | 60456 | 70 如您在本例中看到的,客户123 总共订购了60 件商品。顾客456 人共订购了70 件商品。两家客户均符合HAVING 条款中指定的标准,该条款要求总数量至少为50 件。
6. 窗口函数
SQL 中的窗口函数用于对相对于当前行的一组行执行计算。这些函数适用于一个窗口,该窗口是基于指定条件或分区的表中行的子集。以下是SQL 中窗口函数的一些示例。
ROW_NUMBER():该函数为分区中的每一行分配一个唯一的序列号。 ROW_NUMBER() 函数的语法为: SELECT column1, column2, ROW_NUMBER () OVER (ORDER BY column1) AS row_num FROM table_name; 此查询返回包含附加列“row_num”的结果集。根据“column1”的顺序分配给每行的序号。
SUM():此函数计算分区内列的总和。 SUM() 函数的语法为: SELECT column1, column2, SUM (column3) OVER ( PARTITION BY column1) AS column3_sum FROM table_name; 此查询返回包含附加列“column3_sum”的结果集。该列包含每个分区基于“column1”值的“column3”之和。
RANK():该函数根据指定列的值为分区中的每一行分配排名。 RANK() 函数的语法为: SELECT column1, column2, RANK () OVER ( PARTITION BY column1 ORDER BY column3 DESC ) AS Rank_num FROM table_name; 此查询返回包含附加列“rank_num”的结果集。 ”,该列包含每个分区中每一行的排名,以“column3”为基础按降序排列。
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 运算符的示例。
假设您有两个表,“客户”和“员工”,都有“姓名”和“城市”列。我们希望创建一份居住在纽约市的所有人的名单,包括客户和员工。您可以使用UNION 运算符组合两个SELECT 语句的结果。
SELECT name, city FROMcustomers WHERE city='New York' UNION SELECT name, city FROMEmployees WHERE city='New York' ;此查询返回居住在纽约市的每个人的列表,包括客户和员工。第一个SELECT 语句检索居住在纽约市的所有客户,第二个SELECT 语句检索居住在纽约市的所有员工。 UNION 运算符组合两个SELECT 语句的结果并删除重复的行。
查询的输出是:
姓名| 城市| 城市------------------- 约翰·史密斯| 纽约鲍勃·约翰逊| 居住在纽约市的四个人中,有两个是“桌子”和“两个”来自“员工”表。 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)); 创建一个新表。“电子邮件”和“电话”。 “id”列定义为整数并设置为表的主键。 “name”列被定义为最大长度为50 个字符的字符串,“email”和“phone”列也被定义为最大长度分别为100 和20 个字符的字符串。
运行查询后,您可以将新行插入“customers”表并从中检索数据。
INSERT INTO Customer (ID、姓名、电子邮件、电话号码)VALUES (1, 'John Doe', 'johndoe@example.com', '555-555-1234');SELECT * FROM Customer;此查询” 插入一个新的将ID 为1、姓名为“John Doe”、电子邮件“johndoe@example.com”和电话号码“5555551234”的行插入表中。第二个查询来自“customers”表。得到这一切。行(包括您刚刚插入的新行):
ID | 姓名| 电话| -- -1 | 555-555-1234 此示例使用CREATE 语句在数据库中创建新行。
9. INSERT
插入INSERT 语句用于将数据插入数据库表中。您需要掌握如何使用INSERT向数据库表添加新数据。下面是在SQL 中使用INSERT 语句的示例。
假设我们有一个名为“students”的表,它包含名为“id”、“name”、“major”和“gpa”的列。您想要在一个名为“John Doe”、ID 为1234 的学生的表中插入一个新行,该学生主修“计算机科学”,GPA 为3.5。您可以使用INSERT 语句来执行此操作。
INSERT INTO Students(id, name, Major, gpa)VALUES (1234, 'John Doe', 'Computer Science', 3.5);此查询使用指定值'id', 'students'创建新行插入表。姓名、专业、GPA 列。在INSERT 语句中,指定要插入的表的名称,后跟要插入值的列的列表。然后使用VALUES 关键字指定要按照列列出的顺序插入到每列中的值。
运行查询会向“students”表添加一个新行,其中包含以下值:
| ID | 专业--------------------------------1234 | 计算机科学| 3.5 在此示例中,我们使用INSERT 语句将新行插入到“Students”表中。
10.UPDATE
更新UPDATE 语句用于修改数据库表中的现有数据。您需要掌握如何使用UPDATE 更新表中一列或多列的值。以下是在SQL 中使用UPDATE 语句的示例。
假设我们有一个名为“students”的表,它包含名为“id”、“name”、“major”和“gpa”的列。我想更新学生ID 1234 的专业和GPA。您可以使用UPDATE 语句来执行此操作。
UPDATE StudentsSET Major='Mathematics', gpa=3.7WHERE id=1234;此查询更新'students' 表中ID 为1234 的行的'major' 和'gpa' 列。 UPDATE 语句指定要更新的表的名称,后跟SET 关键字和列表,以及要更新的列值对。然后使用WHERE 子句指定要更新的行。在此示例中,我们要更新ID 为1234 的行,因此我们指定“WHERE id=1234”。
运行查询后,“students”表更新ID 为1234 的行的“major”和“gpa”列中的值。
| ID | 专业| 专业John Doe | 3.7 更新“学生”行中的“专业”和“gpa” ”马苏。
11.DELETE
删除DELETE 语句用于从数据库表中删除一行或多行。您需要知道如何使用DELETE 从表中删除数据。以下是在SQL 中使用DELETE 语句的示例。
假设我们有一个名为“students”的表,它包含名为“id”、“name”、“major”和“gpa”的列。我想从表中删除ID 为1234 的学生。这可以使用DELETE 语句来完成。
从ID=1234 的学生中删除。
DELETE FROM StudentsWHERE id=1234;此查询从“students”表中删除ID 为1234 的行。 DELETE 语句指定要删除的表的名称,WHERE 子句用于指定要删除的行。在本例中,我们要删除ID 为1234 的行,因此指定“WHERE id=1234”。
运行查询时,“students”表不再有ID 为1234 的行。
| ID | 专业| Jane Doe | 计算机科学3.5 在本例中,我们使用DELETE 语句从“students”表中删除记录。
12.DROP
DROP 语句用于删除数据库表或其他数据库对象。您应该掌握使用DROP 从数据库中删除不必要的表和其他对象。 DROP 语句的语法取决于要删除的对象的类型。以下是一些常见示例:
DROP TABLE:此语句用于删除现有表及其所有数据和索引。 DROP TABLE 语句的语法为:
DROP TABLE table_name;2. DROP INDEX:该语句用于从表中删除现有索引。 DROP INDEX 语句的语法为:
DROP INDEX 索引名称ON 表名称; 3. DROP VIEW:该语句用于删除现有视图。 DROP VIEW 语句的语法为:
DROP VIEW view_name;4. DROP PROCEDURE:该语句用于删除现有的存储过程。 DROP PROCEDURE 语句的语法为:
DROP PROCEDURE 过程名称;请注意,DROP 语句的确切语法可能会有所不同,具体取决于所使用的特定数据库管理系统(DBMS)。另外,请谨慎使用DROP 语句,因为它会永久删除指定的对象以及所有关联的数据和索引。在使用DROP 语句之前,请务必备份数据。
13.ALTER
Alter ALTER 语句用于更改数据库表或其他数据库对象的结构。您必须掌握使用ALTER 添加或删除列、更改数据类型以及修改表的其他方面。 ALTER 语句的语法根据要修改的对象的类型而有所不同,但常见示例包括:
ALTER TABLE:该语句用于修改现有表的结构,例如添加或删除列、更改数据类型以及设置约束。 ALTER TABLE 语句的语法是: ALTER TABLE 表名ADD 列名数据类型[约束]、MODIFY 列名数据类型[约束]、DROP 列名、ADD CONSTRAINT 约束名称约束定义、DROP CONSTRAINT 约束名称2. ALTER INDEX:此语句更改用于的结构。修改现有索引,例如添加或删除列或更改索引类型。 ALTER INDEX 语句的语法为:
ALTER INDEX 索引名ADD 列名、DROP 列名;3. ALTER VIEW:该语句用于更改现有视图。
图的定义,例如更改用于创建它的SELECT 语句。ALTER VIEW 语句的语法是: ALTER VIEW view_nameAS select_statement;请注意,ALTER 语句的确切语法和窗口函数的语法可能因所使用的特定数据库管理系统 (DBMS) 而异。 转载自公众号 Python学研大本营 版权声明:本文转载于网络,版权归作者所有,如果侵权,请联系本站编辑删除