狠狠色丁香婷婷综合尤物/久久精品综合一区二区三区/中国有色金属学报/国产日韩欧美在线观看 - 国产一区二区三区四区五区tv

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發文檔 其他文檔  
 
網站管理員

13個SQL語句:解決90%的數據科學問題!你都知道哪些?

admin
2024年1月22日 12:5 本文熱度 644

「前言」

"歡迎進入SQL的奇妙世界,這是一種被數據分析師和數據科學家視為寶藏的編程語言。想象一下,有一天你醒來,發現自己被成堆的數據包圍。別擔心,SQL就像一根魔法棒,可以幫助你從這些混亂數據中抽絲剝繭。

使用SQL,你可以像魔術師一樣操作數據,無論是過濾、排序、分組還是聚合數據。在這篇文章中,我們將介紹13個必備SQL語句,它們就像你的數據科學工具箱里的瑞士軍刀,簡單易學,卻能幫你解決90%的數據任務問題。

無論你是SQL新手,還是已經在數據海洋里暢游的老手,這篇文章都會像一盞燈塔,照亮你數據處理的道路。讓我們開始吧,一起揭開SQL的神秘面紗,發現其中的樂趣和實用技巧吧!"

. . .

1. 檢索(SELECT)

SELECT語句用于從數據庫中的一個或多個表中檢索數據。您應該掌握使用SELECT來過濾、排序和分組數據,使用不同的函數,如WHEREORDER BYGROUP BY。語法:

SELECT column1, column2, column3FROM table_nameWHERE condition;

在這個例子中,column1column2column3是您想要從中檢索數據的列的名稱,table_name是包含數據的表的名稱。WHERE子句是可選的,用于指定查詢檢索數據必須滿足的條件。

示例:從顧客表中選擇客戶年齡大于或等于18歲的所有記錄

SELECT *FROM customersWHERE age >= 18;

. . .

2. 連接(JOIN)

JOIN語句用于組合數據庫中兩個或多個表的數據,作為數據分析師或數據科學家,掌握使用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)使用department_id列作為連接條件,結果集只返回兩個表中部門編號相同的員工姓名和部門名稱。

2.2 左連接(LEFT JOIN)

也叫左外連接(LEFT OUTER JOIN),它會返回左表的所有行和右表中的匹配行,如果右表中不滿足匹配條件,則結果中對應列的行以NULL填充。例如:

SELECT customers.customer_name, orders.order_idFROM customersLEFT JOIN ordersON customers.customer_id = orders.customer_id;

在這個例子中,顧客表(customers)是左表,訂單表(orders)是右表。使用customer_id列作為連接條件。結果集將包括customers表中的所有行和orders表中的匹配行。如果orders表中沒有匹配項,則order_id列的值將以NULL填充。

2.3 右連接(RIGHT JOIN)

也叫右外連接(RIGHT OUTER JOIN),與左連接剛好相反,右連接的結果集會返回右表的所有行和左表中的匹配行,如果左表中不滿足匹配條件,則結果中對應列的行以NULL填充。例如:

SELECT customers.customer_name, orders.order_idFROM customersRIGHT JOIN ordersON customers.customer_id = orders.customer_id;

在這個例子中,訂單表(orders)是左表,顧客表(customers)是右表。使用customer_id列作為連接條件。結果集將包括orders表中的所有行和customers表中的匹配行。如果customers表中沒有匹配項,則customer_name列的值將以NULL填充。

2.4 全連接(FULL JOIN)

也叫全外連接(FULL OUTER JOIN),其結果集會返回兩張表的所有行,包括非匹配行(以NULL表示),相當于兩個數據集的并集。例如:

SELECT e.employee_name, d.department_nameFROM employees eFULL OUTER JOIN departments dON e.department_id = d.department_id;

以上示例將返回所有員工和部門的信息,包括還未分配部門的新員工(部門名稱以NULL表示)以及還沒有員工的新部門(員工姓名以NULL表示)。

💡 值得注意的是,某些數據庫并不支持全連接(如MySQL),可用左連接、右連接加UNION (ALL)實現全連接效果。

. . .

3. 過濾(WHERE)

WHERE語句用于根據指定條件過濾數據。你應該掌握使用WHERE來檢索僅滿足特定條件的數據。

以下是在SQL中使用WHERE語句過濾表中數據的示例:

假設我們有一個名為“employees”的表,其中包含name(姓名)、department(部門)和salary(薪水)等列。我們可以使用WHERE語句選擇那些在“Sales”(銷售)部門工作且薪水超過50,000美元的員工:

SELECT name, department, salaryFROM employeesWHERE department = 'Sales' AND salary > 50000;

這個查詢將返回所有在“Sales”(銷售)部門工作且薪水超過50,000美元的員工名單,查詢結果中會顯示他們的姓名、部門和薪水。

. . .

4. 分組(GROUP BY)

GROUP BY語句用于根據一個或多個列對數據進行分組,并且可以使用聚合函數(例如COUNTSUMAVG)來計算分組數據的匯總。你應該掌握使用GROUP BY來按類別分析數據。

假設我們有一個名為“employees”的表,其中包含name(姓名)、department(部門)和salary(薪水)等列。我們可以使用GROUP BY語句按部門對員工進行分組,并計算每個部門的平均薪水:

SELECT department, AVG(salary) as avg_salaryFROM employeesGROUP BY department;

這個查詢將返回所有部門及其平均薪水的列表,該平均薪水是通過計算該部門所有員工薪水之和然后除以該部門員工數得出的。GROUP BY子句用于按部門對員工進行分組,AVG函數用于計算每個部門的平均薪水。

如果有需要,我們還可以按部門平均薪水降序輸出結果:

SELECT department, AVG(salary) as avg_salaryFROM employeesGROUP BY departmentORDER BY avg_salary DESC;

. . .

5. 過濾(HAVING)

這個過濾與WHERE不同,HAVING是用于對分組后的結果進行過濾,它用在GROUP BY子句之后,而WHERE則是用于對分組前表中的單行數據進行過濾。

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

假設我們有一個名為“orders”的表,其中包含order_id(訂單編號)、customer_id(客戶編號)、product_id(產品編號)和quantity(數量)等列。我們想要找到下單的產品總數不低于50的客戶。我們可以使用GROUP BY子句按客戶對訂單進行分組,并計算每個客戶訂購的每種產品的總數量。然后使用HAVING子句對結果進行過濾,從而篩選出符合條件的客戶:

SELECT customer_id, SUM(quantity) AS total_quantityFROM ordersGROUP BY customer_idHAVING SUM(quantity) >= 50;

這個查詢將返回所有客戶及其訂購的產品總數量的列表,但只包括那些產品總數不低于50的客戶。GROUP BY子句用于按客戶對訂單進行分組,SUM函數用于計算每個客戶訂購的產品總數量,HAVING子句用于過濾結果,僅包括那些總共訂購產品總數不低于50的客戶。

. . .

6. 窗口函數

SQL中的窗口函數用于對與當前行相關的一組行執行計算。這些函數應用于一個窗口,即根據指定條件或分區從表中選取的行的子集。以下是SQL中一些窗口函數的示例:

  1. ROW_NUMBER():這個函數為分區內的每一行分配一個唯一的連續編號(即連續不跳躍排名)。ROW_NUMBER()函數的語法如下:
ROW_NUMBER() OVER (    [PARTITION BY partition_expression, ... ]    ORDER BY sort_expression [ASC | DESC], ...)
  • PARTITION BY:這是可選的。它將結果集劃分為多個分區,然后對每個分區應用ROW_NUMBER函數。如果不指定,函數會將整個結果集視為一個單一分區。
  • ORDER BY:用于指定行號分配的順序。每個分區可以有不同的順序。

示例:

SELECT EmployeeID,        Department,        Salary,       ROW_NUMBER() OVER (         PARTITION BY Department          ORDER BY Salary DESC       ) AS RowNumFROM Employees;

這個查詢將返回每個員工的編號、部門、薪水以及在部門內的薪水排名(由高到低)。

  1. SUM():用于計算分區內某列的總和。語法如下:
SELECT column1,        column2, ...,        SUM(column3) OVER (PARTITION BY column1) AS column3_sumFROM table_name;

這個查詢將返回一個結果集,并帶有一個額外的列column3_sum,該列包含基于column1值的每個分區中column3的總和。

  1. RANK():這個函數根據指定列的值為分區內的每一行分配一個排名(允許同名并列,且會跳過同名次所占用的序號,因此也稱為連續跳躍式排名)。語法如下:
SELECT column1,        column2, ...,        RANK() OVER (PARTITION BY column1 ORDER BY column3 DESC) AS rank_numFROM table_name;

這個查詢將返回一個結果集,并帶有一個額外的列rank_num,該列包含基于column3降序排列的每個分區內每一行的排名。

  1. AVG():這個函數計算分區內某列的平均值。語法如下:
SELECT column1,        column2, ...,        AVG(column3) OVER (PARTITION BY column1) AS column3_avgFROM table_name;

這個查詢將返回一個結果集,并帶有一個額外的列column3_avg,該列包含基于column1值的每個分區中column3的平均值。

💡請注意,窗口函數的語法可能會根據使用的具體數據庫管理系統(DBMS)而有所不同。

. . .

7. 組合(UNION)

在SQL中,UNION運算符用于將兩個或多個SELECT語句的結果組合成一個結果集。SELECT語句必須有相同數量的列,且列必須具有兼容的數據類型。結果集中的重復行會自動被移除(如果想要包含重復行,請使用UNION ALL)。

以下是在SQL中使用UNION運算符的示例:

假設我們有兩個表“customers”(客戶)和“employees”(員工),它們都包含name(姓名)和city(城市)列。我們想創建一個名單,列出所有住在紐約市的人(包括客戶和員工)。這里就可以使用UNION運算符來組合兩個SELECT語句的結果:

SELECT name, cityFROM customersWHERE city = 'New York'UNIONSELECT name, cityFROM employeesWHERE city = 'New York';

這個查詢將返回所有住在紐約市的人的名單,包括客戶和員工。第一個SELECT語句檢索所有住在紐約市的客戶,而第二個SELECT語句檢索所有住在紐約市的員工。UNION運算符結合這兩個SELECT語句的結果,并移除重復行。

Tips:如果允許包含重復行,且查詢表數據量較大的情況下,可以使用UNION ALL提升查詢性能,因為UNION要排除重復行會涉及排序操作。

. . .

8. 創建(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)、刪(DELETE)、改(UPDATE)、查(SELECT)操作。比如,添加向表中添加數據并檢索它們:

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

在這個例子中,我們使用CREATE語句在數據庫中創建了一個新表,并向該表中插入了一行新數據。

. . .

9. 插入(INSERT)

INSERT語句用于向數據庫表中插入數據。以下是在SQL中使用INSERT語句的示例:

假設我們有一個名為“students”的表,其中包含id(編號)、name(姓名)、major(專業)和gpa(績點平均值)等列。我們想要為一位編號為1234、姓名為“Jack Zhang”、專業為“Software Engineering”(軟件工程)、績點為3.5的學生在表中插入一行新數據。可以使用INSERT語句來實現這一點:

INSERT INTO students (id, name, major, gpa)VALUES (1234, 'Jack Zhang', 'Software Engineering', 3.5);

這個查詢將向“students”表中插入一行新數據,并為id(編號)、name(姓名)、major(專業)和gpa(績點平均值)列指定了相應的值。INSERT語句首先指定我們要插入數據的表的名稱,然后列出我們想要插入值的列。接著我們使用VALUES關鍵字來指定我們想要插入到每一列中的值,按照列出的順序。

在執行這個查詢之后,“students”表將包含一行新數據,其值如下:

id   | name       | major                | gpa-----------------------------------------1234 | Jack Zhang | Software Engineering | 3.5

在這個示例中,我們使用INSERT語句向學生表中插入了一條新數據。

. . .

10. 更新(UPDATE)

UPDATE語句用于修改數據庫表中現有的數據。以下是在SQL中使用UPDATE語句的示例:

假設我們有一個名為“students”的表,其中包含id(編號)、name(姓名)、major(專業)和gpa(績點平均值)等列。我們想要更新編號為1234的學生的專業和績點。可以使用UPDATE語句來實現這一點:

UPDATE studentsSET major = 'Computer Science', gpa = 3.7WHERE id = 1234;

這個查詢將更新“students”表中編號為1234的行的major(專業)和gpa(績點平均值)列。UPDATE語句首先指定我們想要更新的表的名稱,接著是SET關鍵字和我們想要更新的列-值對列表。然后我們使用WHERE子句來指定我們想要更新的行。在這個案例中,我們想要更新編號為1234的行,所以我們指定WHERE id = 1234

在執行這個查詢之后,“students”表中編號為1234的行的majorgpa列將會被更新為新的值:

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

. . .

11. 刪除(DELETE)記錄

DELETE語句用于從數據庫表中刪除一個或多個行。以下是在SQL中使用DELETE語句的示例:

假設我們有一個名為“students”的表,其中包含id(編號)、name(姓名)、major(專業)和gpa(績點平均值)等列。我們想要從表中刪除編號為1234的學生。可以使用DELETE語句來實現這一點:

DELETE FROM studentsWHERE id = 1234;

這個查詢將從“students”表中移除編號為1234的行。DELETE語句首先指定我們想要從中刪除數據的表的名稱,接著使用WHERE子句來指定我們想要刪除的行。在這個案例中,我們想要刪除編號為1234的行,所以我們指定WHERE id = 1234

在執行這個查詢之后,“students”表將不再包含編號為1234的行。

. . .

12. 刪除(DROP)數據庫對象

DROP語句用于刪除數據庫表或其他數據庫對象。DROP語句的語法根據被刪除對象的類型而有所不同,以下是一些常見的例子:

  1. DROP TABLE:這個語句用于刪除現有的表及其所有數據和索引。語法如下:
DROP TABLE table_name;
  1. DROP INDEX:這個語句用于從表中刪除現有的索引。語法如下:
DROP INDEX index_name ON table_name;
  1. DROP VIEW:這個語句用于刪除現有的視圖。語法如下:
DROP VIEW view_name;
  1. DROP PROCEDURE:這個語句用于刪除現有的存儲過程。語法如下:
DROP PROCEDURE procedure_name;

💡請注意,DROP語句的確切語法可能會根據所使用的具體數據庫管理系統(DBMS)而有所不同。此外,在使用DROP語句時要小心,因為它會永久刪除指定的對象及其所有相關數據和索引。因此,在使用DROP語句之前,請確保備份您的數據。

. . .

13. 修改(ALTER)

ALTER語句用于修改數據庫表或其他數據庫對象的結構。你應該掌握使用ALTER語句來添加或移除列、更改數據類型或修改表的其他方面。ALTER語句的語法根據被修改對象的類型而有所不同,以下是一些常見的例子:

  1. ALTER TABLE:這個語句用于修改現有表的結構,比如添加或刪除列、更改數據類型或設置約束。語法如下:
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;
  1. ALTER INDEX:這個語句用于修改現有索引的結構,例如添加或移除列或更改索引類型。語法如下:
ALTER INDEX index_nameADD column_name,DROP column_name;
  1. ALTER VIEW:這個語句用于修改現有視圖的定義,例如更改用于創建視圖的SELECT語句。語法如下:
ALTER VIEW view_nameAS select_statement;

請注意,ALTER語句的確切語法可能會根據所使用的具體數據庫管理系統(DBMS)而有所不同。



該文章在 2024/1/22 12:05:38 編輯過
關鍵字查詢
相關文章
正在查詢...
點晴ERP是一款針對中小制造業的專業生產管理軟件系統,系統成熟度和易用性得到了國內大量中小企業的青睞。
點晴PMS碼頭管理系統主要針對港口碼頭集裝箱與散貨日常運作、調度、堆場、車隊、財務費用、相關報表等業務管理,結合碼頭的業務特點,圍繞調度、堆場作業而開發的。集技術的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業的高效ERP管理信息系統。
點晴WMS倉儲管理系統提供了貨物產品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質期管理,貨位管理,庫位管理,生產管理,WMS管理系統,標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協同辦公管理系統。
Copyright 2010-2025 ClickSun All Rights Reserved