13个SQL语句:解决90%的数据科学问题!你都知道哪些?
当前位置:点晴教程→知识管理交流
→『 技术文档交流 』
「前言」"欢迎进入SQL的奇妙世界,这是一种被数据分析师和数据科学家视为宝藏的编程语言。想象一下,有一天你醒来,发现自己被成堆的数据包围。别担心,SQL就像一根魔法棒,可以帮助你从这些混乱数据中抽丝剥茧。 使用SQL,你可以像魔术师一样操作数据,无论是过滤、排序、分组还是聚合数据。在这篇文章中,我们将介绍13个必备SQL语句,它们就像你的数据科学工具箱里的瑞士军刀,简单易学,却能帮你解决90%的数据任务问题。 无论你是SQL新手,还是已经在数据海洋里畅游的老手,这篇文章都会像一盏灯塔,照亮你数据处理的道路。让我们开始吧,一起揭开SQL的神秘面纱,发现其中的乐趣和实用技巧吧!" . . . 1. 检索(SELECT)
SELECT column1, column2, column3FROM table_nameWHERE condition; 在这个例子中,column1、column2和column3是您想要从中检索数据的列的名称, 示例:从顾客表中选择客户年龄大于或等于18岁的所有记录 SELECT *FROM customersWHERE age >= 18; . . . 2. 连接(JOIN)
2.1 内连接(INNER JOIN)内连接只返回两张表中满足连接条件且指定列的所有匹配行。例如下面的示例: SELECT e.employee_name, d.department_nameFROM employees eINNER JOIN departments dON e.department_id = d.department_id; 在这个示例中,员工表(employees)和部门表(departments)使用 2.2 左连接(LEFT JOIN)也叫左外连接(LEFT OUTER JOIN),它会返回左表的所有行和右表中的匹配行,如果右表中不满足匹配条件,则结果中对应列的行以 SELECT customers.customer_name, orders.order_idFROM customersLEFT JOIN ordersON customers.customer_id = orders.customer_id; 在这个例子中,顾客表(customers)是左表,订单表(orders)是右表。使用 2.3 右连接(RIGHT JOIN)也叫右外连接(RIGHT OUTER JOIN),与左连接刚好相反,右连接的结果集会返回右表的所有行和左表中的匹配行,如果左表中不满足匹配条件,则结果中对应列的行以 SELECT customers.customer_name, orders.order_idFROM customersRIGHT JOIN ordersON customers.customer_id = orders.customer_id; 在这个例子中,订单表(orders)是左表,顾客表(customers)是右表。使用 2.4 全连接(FULL JOIN)也叫全外连接(FULL OUTER JOIN),其结果集会返回两张表的所有行,包括非匹配行(以 SELECT e.employee_name, d.department_nameFROM employees eFULL OUTER JOIN departments dON e.department_id = d.department_id; 以上示例将返回所有员工和部门的信息,包括还未分配部门的新员工(部门名称以
. . . 3. 过滤(WHERE)
以下是在SQL中使用 假设我们有一个名为“employees”的表,其中包含 SELECT name, department, salaryFROM employeesWHERE department = 'Sales' AND salary > 50000; 这个查询将返回所有在“Sales”(销售)部门工作且薪水超过50,000美元的员工名单,查询结果中会显示他们的姓名、部门和薪水。 . . . 4. 分组(GROUP BY)
假设我们有一个名为“employees”的表,其中包含 SELECT department, AVG(salary) as avg_salaryFROM employeesGROUP BY department; 这个查询将返回所有部门及其平均薪水的列表,该平均薪水是通过计算该部门所有员工薪水之和然后除以该部门员工数得出的。 如果有需要,我们还可以按部门平均薪水降序输出结果: SELECT department, AVG(salary) as avg_salaryFROM employeesGROUP BY departmentORDER BY avg_salary DESC; . . . 5. 过滤(HAVING)这个过滤与 以下是SQL中使用 假设我们有一个名为“orders”的表,其中包含 SELECT customer_id, SUM(quantity) AS total_quantityFROM ordersGROUP BY customer_idHAVING SUM(quantity) >= 50; 这个查询将返回所有客户及其订购的产品总数量的列表,但只包括那些产品总数不低于50的客户。 . . . 6. 窗口函数SQL中的窗口函数用于对与当前行相关的一组行执行计算。这些函数应用于一个窗口,即根据指定条件或分区从表中选取的行的子集。以下是SQL中一些窗口函数的示例:
ROW_NUMBER() OVER ( [PARTITION BY partition_expression, ... ] ORDER BY sort_expression [ASC | DESC], ...)
示例: SELECT EmployeeID, Department, Salary, ROW_NUMBER() OVER ( PARTITION BY Department ORDER BY Salary DESC ) AS RowNumFROM Employees; 这个查询将返回每个员工的编号、部门、薪水以及在部门内的薪水排名(由高到低)。
SELECT column1, column2, ..., SUM(column3) OVER (PARTITION BY column1) AS column3_sumFROM table_name; 这个查询将返回一个结果集,并带有一个额外的列
SELECT column1, column2, ..., RANK() OVER (PARTITION BY column1 ORDER BY column3 DESC) AS rank_numFROM table_name; 这个查询将返回一个结果集,并带有一个额外的列
SELECT column1, column2, ..., AVG(column3) OVER (PARTITION BY column1) AS column3_avgFROM table_name; 这个查询将返回一个结果集,并带有一个额外的列
. . . 7. 组合(UNION)在SQL中, 以下是在SQL中使用 假设我们有两个表“customers”(客户)和“employees”(员工),它们都包含 SELECT name, cityFROM customersWHERE city = 'New York'UNIONSELECT name, cityFROM employeesWHERE city = 'New York'; 这个查询将返回所有住在纽约市的人的名单,包括客户和员工。第一个
. . . 8. 创建(CREATE)
假设我们想要创建一个名为“customers”的新表,其中包含 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, 'Jack Zhang', 'jackzhang@example.com', '18888888888'); SELECT * FROM customers; 这个查询将向“customers”表中插入一行新数据,包括编号为1、姓名为“Jack Zhang”、电子邮件为“jackzhang@example.com”和电话号码为“18888888888”。第二个查询将从“customers”表中检索所有行,其中包括我们刚刚插入的新行: id | name | email | phone--------------------------------------------1 | Jack Zhang | jackzhang@example.com | 18888888888 在这个例子中,我们使用 . . . 9. 插入(INSERT)
假设我们有一个名为“students”的表,其中包含 INSERT INTO students (id, name, major, gpa)VALUES (1234, 'Jack Zhang', 'Software Engineering', 3.5); 这个查询将向“students”表中插入一行新数据,并为 在执行这个查询之后,“students”表将包含一行新数据,其值如下: id | name | major | gpa-----------------------------------------1234 | Jack Zhang | Software Engineering | 3.5 在这个示例中,我们使用 . . . 10. 更新(UPDATE)
假设我们有一个名为“students”的表,其中包含 UPDATE studentsSET major = 'Computer Science', gpa = 3.7WHERE id = 1234; 这个查询将更新“students”表中编号为1234的行的 在执行这个查询之后,“students”表中编号为1234的行的 id | name | major | gpa--------------------------------------1234 | John Doe | Computer Science | 3.7 . . . 11. 删除(DELETE)记录
假设我们有一个名为“students”的表,其中包含 DELETE FROM studentsWHERE id = 1234; 这个查询将从“students”表中移除编号为1234的行。 在执行这个查询之后,“students”表将不再包含编号为1234的行。 . . . 12. 删除(DROP)数据库对象
DROP TABLE table_name;
DROP INDEX index_name ON table_name;
DROP VIEW view_name;
DROP PROCEDURE procedure_name;
. . . 13. 修改(ALTER)
ALTER TABLE table_nameADD column_name data_type [constraint],MODIFY column_name data_type [constraint],DROP column_name,ADD CONSTRAINT constraint_name constraint_definition,DROP CONSTRAINT constraint_name;
ALTER INDEX index_nameADD column_name,DROP column_name;
ALTER VIEW view_nameAS select_statement; 请注意, 该文章在 2024/1/22 12:05:38 编辑过 |
关键字查询
相关文章
正在查询... |