【技術積累】Mysql中的SQL語言【一】

来源:https://www.cnblogs.com/yyyyfly1/archive/2023/06/29/17513296.html
-Advertisement-
Play Games

博客推行版本更新,成果積累制度,已經寫過的博客還會再次更新,不斷地琢磨,高質量高數量都是要追求的,工匠精神是學習必不可少的精神。因此,大家有何建議歡迎在評論區踴躍發言,你們的支持是我最大的動力,你們敢投,我就敢肝 ...


建表語句

後續所有內容建立在這些SQL語句上,數據根據需要自行補充

CREATE TABLE users (
  id INT PRIMARY KEY,
  name VARCHAR(50),
  age INT
);

CREATE TABLE orders (
  id INT PRIMARY KEY,
  user_id INT,
  product_name VARCHAR(50),
  price DECIMAL(10,2),
  FOREIGN KEY (user_id) REFERENCES users(id)
);
INSERT INTO users (id, name, age) VALUES (1, 'Alice', 25);
INSERT INTO users (id, name, age) VALUES (2, 'Bob', 30);
INSERT INTO users (id, name, age) VALUES (3, 'Charlie', 35);

INSERT INTO orders (id, user_id, product_name, price) VALUES (1, 1, 'Product A', 10.99);
INSERT INTO orders (id, user_id, product_name, price) VALUES (2, 1, 'Product B', 15.99);
INSERT INTO orders (id, user_id, product_name, price) VALUES (3, 2, 'Product C', 20.99);
INSERT INTO orders (id, user_id, product_name, price) VALUES (4, 2, 'Product A', 10.99);
INSERT INTO orders (id, user_id, product_name, price) VALUES (5, 3, 'Product B', 15.99);

學習要點

知識點學習

查詢單個列的數據

SELECT column_name FROM table_name;

查詢多個列的數據

SELECT column1, column2 FROM table_name;

帶條件查詢數據

SELECT column1, column2 FROM table_name WHERE condition;

插入數據

INSERT INTO table_name (column1, column2, ...) VALUES (value1, value2, ...);

更新數據

UPDATE table_name SET column1=value1, column2=value2, ... WHERE condition;

刪除數據

DELETE FROM table_name WHERE condition;

根據某列升序排序:

SELECT * FROM table_name ORDER BY column_name ASC;

根據某列降序排序:

SELECT * FROM table_name ORDER BY column_name DESC;

計算某列的總和:

SELECT SUM(column_name) FROM table_name;

計算某列的平均值:

SELECT AVG(column_name) FROM table_name;

按某列分組:

SELECT column_name, COUNT(column_name) FROM table_name GROUP BY column_name;

聯結

內連接是一種用於聯接兩個或多個表的方法。它只返回滿足連接條件的行,也就是兩個表中具有相同值的行。內連接使用關鍵字"INNER JOIN"來連接兩個或多個表,它可以包含一個或多個連接條件。

例如,假設有兩個表A和B,表A中有列a,表B中有列b。通過內連接在表A和表B之間進行連接,只會返回那些同時滿足"a = b"條件的行。內連接可以幫助我們從兩個或多個相關表中獲取相關數據。

SELECT table1.column1, table2.column2 FROM table1 INNER JOIN table2 ON table1.id = table2.id;

左外連接兩個表:

左外連接是一種用於聯接兩個或多個表的方法,在MySQL中使用"LEFT JOIN"關鍵字來實現。左外連接返回兩個表中滿足連接條件的所有行,以及左表中不滿足連接條件的行。

假設有兩個表A和B,通過左外連接在表A和表B之間進行連接,查詢將返回滿足連接條件的行以及左表A中不滿足連接條件的行。右表B中不滿足連接條件的行的值將被設置為NULL。

這個查詢將返回表A中所有行的a列的值,以及在表B中具有相同值的b列的值。如果在表B中沒有具有相同值的行,b列的值將為NULL。

左外連接適用於在兩個表中尋找關聯數據,即使在右表中沒有匹配的行時也可以返回左表的數據。這對於獲取主表所有數據以及與之關聯的次要表的數據很有用。

SELECT table1.column1, table2.column2 FROM table1 LEFT JOIN table2 ON table1.id = table2.id;

右外連接兩個表:

右外連接是一種用於聯接兩個或多個表的方法,在MySQL中使用"RIGHT JOIN"關鍵字來實現。右外連接返回右表中滿足連接條件的所有行,以及右表中不滿足連接條件的行。

假設有兩個表A和B,通過右外連接在表A和表B之間進行連接,查詢將返回滿足連接條件的行以及右表B中不滿足連接條件的行。左表A中不滿足連接條件的行的值將被設置為NULL。

以下是一個右外連接的示例查詢:

SELECT table1.column1, table2.column2 FROM table1 RIGHT JOIN table2 ON table1.id = table2.id;

這個查詢將返回表B中所有行的b列的值,以及在表A中具有相同值的a列的值。如果在表A中沒有具有相同值的行,a列的值將為NULL。

右外連接適用於在兩個表中尋找關聯數據,即使在左表中沒有匹配的行時也可以返回右表的數據。它可以用於獲取右表所有數據以及與之關聯的主表的數據。在實際應用中,左外連接更常見,而右外連接往往用左外連接完成同樣的任務。

子查詢

使用子查詢:

SELECT column_name1 FROM table_name WHERE column_name2 IN (SELECT column_name3 FROM table_name2 WHERE condition);

案例列舉

問題1: 統計每個用戶的訂單總數

需要統計每個用戶的訂單總數,以便瞭解用戶的購買情況。

SELECT users.id AS user_id, users.name AS user_name, COUNT(orders.id) AS order_count
FROM users
LEFT JOIN orders ON users.id = orders.user_id
GROUP BY users.id;

以上SQL語句中,首先通過左外連接將用戶表和訂單表關聯起來,然後使用GROUP BY子句按用戶進行分組,使用COUNT聚合函數統計每個用戶的訂單數量。

問題2: 查詢每個用戶的最高訂單金額

需要查詢每個用戶的最高訂單金額,以瞭解用戶的購買能力。

SELECT users.id AS user_id, users.name AS user_name, MAX(orders.price) AS max_order_amount
FROM users
LEFT JOIN orders ON users.id = orders.user_id
GROUP BY users.id;

以上SQL語句中,通過左外連接將用戶表和訂單表關聯起來,然後使用GROUP BY子句按用戶進行分組,使用MAX聚合函數找到每個用戶的最高訂單金額。

問題3: 查詢訂單數量最多的用戶

需要找出訂單數量最多的用戶,以瞭解誰是最活躍的用戶。

SELECT users.id AS user_id, users.name AS user_name, COUNT(orders.id) AS order_count
FROM users
LEFT JOIN orders ON users.id = orders.user_id
GROUP BY users.id
ORDER BY order_count DESC
LIMIT 1;

以上SQL語句中,通過左外連接將用戶表和訂單表關聯起來,然後使用GROUP BY子句按用戶進行分組,並使用COUNT函數統計每個用戶的訂單數量。最後使用ORDER BY子句將結果按訂單數量降序排序,並使用LIMIT限制只返回第一條結果,即訂單數量最多的用戶。

問題4: 查詢最近一個月內的訂單數量

需要查詢最近一個月內的訂單數量,以瞭解近期的訂單情況。

SELECT COUNT(id) AS order_count
FROM orders
WHERE date >= DATE_SUB(CURRENT_DATE(), INTERVAL 1 MONTH);

以上SQL語句中,使用COUNT函數統計最近一個月內的訂單數量。通過將當前日期減去一個月的時間間隔來計算出一個月前的日期,並使用WHERE子句篩選出指定日期範圍內的訂單。

問題5: 查詢購買最多的產品

需要查詢購買數量最多的產品,以瞭解最受歡迎的產品。

SELECT product_name, COUNT(id) AS sales_count
FROM orders
GROUP BY product_name
ORDER BY sales_count DESC
LIMIT 1;

以上SQL語句中,使用COUNT函數統計每個產品的銷售數量,並使用GROUP BY子句按產品名稱進行分組。最後使用ORDER BY子句將結果按銷售數量降序排序,並使用LIMIT限制只返回第一條結果,即銷售數量最多的產品。

問題6: 查詢每個用戶的平均訂單金額

需要查詢每個用戶的平均訂單金額,以瞭解用戶的平均消費水平。

SELECT users.id AS user_id, users.name AS user_name, AVG(orders.price) AS avg_order_amount
FROM users
LEFT JOIN orders ON users.id = orders.user_id
GROUP BY users.id;

以上SQL語句中,通過左外連接將用戶表和訂單表關聯起來,然後使用GROUP BY子句按用戶進行分組,使用AVG聚合函數找到每個用戶的平均訂單金額。

問題7: 查詢未購買任何產品的用戶

需要查詢未購買任何產品的用戶,以瞭解哪些用戶還沒有進行購物。

SELECT users.id, users.name
FROM users
LEFT JOIN orders ON users.id = orders.user_id
WHERE orders.id IS NULL;

以上SQL語句中,通過左外連接將用戶表和訂單表關聯起來,然後使用WHERE子句篩選出未購買任何產品的用戶,即訂單ID為空的記錄。

問題8: 查詢訂單金額超過平均訂單金額的用戶

需要查詢訂單金額超過平均訂單金額的用戶,以瞭解哪些用戶的消費能力高於平均水平。

SELECT users.id AS user_id, users.name AS user_name, orders.price AS order_amount
FROM users
JOIN orders ON users.id = orders.user_id
WHERE orders.price > (SELECT AVG(price) FROM orders);

以上SQL語句中,使用子查詢找到訂單表中的平均訂單金額,然後通過JOIN將用戶表和訂單表連接起來,使用WHERE子句篩選出訂單金額超過平均訂單金額的用戶。

問題9: 查詢每個用戶的首次購買日期

需要查詢每個用戶的首次購買日期,以瞭解用戶的註冊後多久開始購物。

SELECT users.id AS user_id, users.name AS user_name, MIN(orders.date) AS first_purchase_date
FROM users
JOIN orders ON users.id = orders.user_id
GROUP BY users.id;

以上SQL語句中,通過JOIN將用戶表和訂單表連接起來,然後使用GROUP BY子句按用戶進行分組,使用MIN函數找到每個用戶的最早購買日期。

問題10: 查詢購買過某個產品的用戶

需要查詢購買過某個產品的用戶,以瞭解對於某個指定的產品,都有哪些用戶購買過。

SELECT users.id AS user_id, users.name AS user_name
FROM users
JOIN orders ON users.id = orders.user_id
WHERE orders.product_name = '指定產品名稱';

以上SQL語句中,通過JOIN將用戶表和訂單表連接起來,然後使用WHERE子句篩選出購買過指定產品的用戶,即產品名稱與指定名稱匹配的記錄。

在黑夜裡夢想著光,心中覆蓋悲傷,在悲傷里忍受孤獨,空守一絲溫暖。 我的淚水是無底深海,對你的愛已無言,相信無盡的力量,那是真愛永在。 我的信仰是無底深海,澎湃著心中火焰,燃燒無盡的力量,那是忠誠永在。
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • ![file](https://img2023.cnblogs.com/other/2685289/202306/2685289-20230629181452343-550852462.png) 作者|雲科NearFar X Lab團隊 左益、周志銀、洪守偉、陳超、武超 ## 一、導讀 無錫拈花雲科 ...
  • hive的高級分組聚合是指在聚合時使用GROUPING SETS、CUBE和ROLLUP的分組聚合。 高級分組聚合在很多資料庫類SQL中都有出現,並非hive獨有,這裡只說明hive中的情況。 使用高級分組聚合不僅可以簡化SQL語句,而且通常情況下會提升SQL語句的性能。 ## 1.Grouping ...
  • 摘要:業務應用對資料庫的數據請求分寫請求(增刪改)和讀請求(查)。當存在大量讀請求時,為避免讀請求阻塞寫請求,資料庫會提供只讀實例方案。通過主實例+N只讀實例的方式,實現讀寫分離,滿足大量的資料庫讀取需求,增加應用的吞吐量。 業務應用對資料庫的數據請求分寫請求(增刪改)和讀請求(查)。當存在大量讀請 ...
  • 摘要:本期結合示例,詳細介紹華為雲數字工廠平臺的數據分析模型和數據圖表視圖模型的配置用法。 本文分享自華為雲社區《數字工廠深入淺出系列(六):數據分析與圖表視圖模型的配置用法》,作者:雲起MAE 。 華為雲數字工廠平臺基於“數據與業務一體化”理念,提供統一的製造全域數據平臺底座,內置輕量級製造數據分 ...
  • 時下,眾多金融機構在積極推行數字化改革,以適應時代高速革新。為回應市場對信息即時生效的迫切需求,各家[券商機構](https://www.dtstack.com/solution/securities?src=szsm)都需要更具競爭力的信息服務。 本次方案結合券商場景與業務實踐,圍繞客戶實際面臨的 ...
  • 衛健行業是關乎國家和民生安全的關鍵行業。近年來,雲計算、大數據、人工智慧等技術不斷發展,並與醫療行業深入融合。同時,相關部門相繼頒發一系列政策,進一步推動醫療行業數字化、智慧化轉型,促進探索健康中國高質量發展道路。 ...
  • #其他預設調整值#MySQL Server實例配置文件# #由MySQL Server實例配置嚮導生成###安裝說明# ##在Linux上,您可以將此文件複製到/etc/my.cnf以設置全局選項,#mysql-data-dir/my.cnf設置伺服器特定選項(用於此安裝的@localstatedi ...
  • ## 索引失效 ### 準備數據: ```sql CREATE TABLE `dept` ( `id` INT(11) NOT NULL AUTO_INCREMENT, `deptName` VARCHAR(30) DEFAULT NULL, `address` VARCHAR(40) DEFAUL ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...