MySQL 基本語法講解及示例(下)


第六節:如何檢索資料

在本節中,我們將介紹如何使用SQL語句檢索數據庫中的資料,具體包括選擇特定列、排序、條件過濾以及組合排序等操作。我們以一個名為student的表格為例,演示不同的檢索方法。

初始表格 student

student_idnamemajorscore
1小白英語50
2小黃生物90
3小綠歷史70
4小藍英語80
5小黑化學20

檢索目標表格

1. 選取目標列 name, major
SELECT `name`, `major` FROM `student`;

結果:

namemajor
小白英語
小黃生物
小綠歷史
小藍英語
小黑化學
2. 依照特定列 score,對目標列進行排序(順序)
SELECT `name`, `major`, `score` FROM `student` ORDER BY `score`;

結果:

namemajorscore
小黑化學20
小白英語50
小綠歷史70
小藍英語80
小黃生物90
3. 依照特定列 score,對目標列進行排序(倒序)
SELECT `name`, `major`, `score` FROM `student` ORDER BY `score` DESC;

結果:

namemajorscore
小黃生物90
小藍英語80
小綠歷史70
小白英語50
小黑化學20
4. 組合排序,依照特定列 score, student_id 先后對目標列進行排序
SELECT * FROM `student` ORDER BY `score`, `student_id`;

結果:

student_idnamemajorscore
5小黑化學20
1小白英語50
3小綠歷史70
4小藍英語80
2小黃生物90
5. WHERE 多條件限定情況
SELECT * FROM `student` 
WHERE `major` IN('生物', '歷史', '英語');

或者

SELECT * FROM `student` 
WHERE `major` = '生物' OR `major` = '歷史' OR `major` = '英語';

結果:

student_idnamemajorscore
1小白英語50
2小黃生物90
3小綠歷史70
4小藍英語80

第七節:案例:創建公司數據庫

本案例展示了如何創建一個包含員工、部門、客戶以及員工與客戶關系的公司數據庫。

創建數據表

1. Employee 表
CREATE TABLE `employee`(`emp_id` INT PRIMARY KEY,`name` VARCHAR(20),`birth_date` DATE,`sex` VARCHAR(1),`salary` INT,`branch_id` INT,`sup_id` INT
);
2. Branch 表
CREATE TABLE `branch`(`branch_id` INT PRIMARY KEY,`branch_name` VARCHAR(20),`manager_id` INT,FOREIGN KEY (`manager_id`) REFERENCES `employee`(`emp_id`) ON DELETE SET NULL
);

外鍵 (manager_id) 對應 employee(emp_id

3. Customer 表
CREATE TABLE `customer`(`cust_id` INT PRIMARY KEY,`name` VARCHAR(50),`address` VARCHAR(100),`phone` VARCHAR(15)
);
4. Works_With 表
CREATE TABLE `works_with`(`emp_id` INT,`cust_id` INT,`total_sales` DECIMAL(10, 2),PRIMARY KEY (`emp_id`, `cust_id`),FOREIGN KEY (`emp_id`) REFERENCES `employee`(`emp_id`) ON DELETE CASCADE,FOREIGN KEY (`cust_id`) REFERENCES `customer`(`cust_id`) ON DELETE CASCADE
);

插入數據

讓我們插入一些數據以便更好地演示如何進行查詢。

插入 Employee 表數據
INSERT INTO `employee` (`emp_id`, `name`, `birth_date`, `sex`, `salary`, `branch_id`, `sup_id`)
VALUES 
(1, 'Alice', '1985-01-15', 'F', 50000, 1, NULL),
(2, 'Bob', '1975-03-22', 'M', 60000, 1, 1),
(3, 'Charlie', '1990-07-18', 'M', 55000, 2, NULL);
插入 Branch 表數據
INSERT INTO `branch` (`branch_id`, `branch_name`, `manager_id`)
VALUES 
(1, 'HQ', 1),
(2, 'Branch 1', 3);
插入 Customer 表數據
INSERT INTO `customer` (`cust_id`, `name`, `address`, `phone`)
VALUES 
(1, 'Customer A', '123 Main St', '555-1234'),
(2, 'Customer B', '456 Elm St', '555-5678');
插入 Works_With 表數據
INSERT INTO `works_with` (`emp_id`, `cust_id`, `total_sales`)
VALUES 
(1, 1, 2000.00),
(2, 1, 1500.00),
(2, 2, 3000.00);

復雜查詢示例

0. 圖片案例查詢
獲取公司數據

基本語法案例:

	-- 1.取得所有員工資料SELECT * FROM `employee`;-- 2.取得所有客戶資料SELECT * FROM `client`;-- 3.按薪水低到高取得員工資料SELECT * FROM `employee` ORDER BY `salary`;-- 4.取得薪水前3高的員工SELECT * FROM `employee` ORDER BY `salary` DESC LIMIT 3;-- 5.取得所有員工的名子SELECT `name` FROM `employee`;-- 6.取得所有員工的性別,篩除重復值SELECT DISTINCT `sex` FROM `employee`;
聚合函數

基本語法案例:

	-- aggregate functions聚合函數-- 1.取得員工人數SELECT COUNT(`emp_id`) FROM `employee`;-- 2.取得所有出生於 1970-01-01之後的女性員工人數SELECT COUNT(`emp_id`) FROM `employee` WHERE `birth_data` > '1970-01-01' AND `sex` = 'F';-- 3.取得所有員工的平均薪水 SELECT AVG(`salary`) FROM `employee`;-- 4.取得所有員工薪水的總和SELECT SUM(`salary`) FROM `employee`;-- 5.取得的最高薪水SELECT MAX(`salary`) FROM `employee`;-- 6.取得的最低薪水SELECT MIN(`salary`) FROM `employee`;
wildcards 萬用字符

基本語法案例:

	-- wildcards萬用字符% 代表多個字元,_代表一固字元-- 1.取得電話號碼尾數是335的客戶SELECT * FROM `client` WHERE `phone` LIKE '%335';-- 2.取得姓艾的客戶SELECT * FROM `client` WHERE `client_name` LIKE '艾%';-- 3.取得生日在12月的員工SELECT * FROM `employee` WHERE `birth_data` LIKE '____-12%';
union 聯合

基本語法案例:

	-- 1. 員工名子 union 客戶名子SELECT `name` FROM `employee` UNIONSELECT `client_name` FROM `client`;-- 2. 員工id + 員工名子 union 客戶id + 客戶名子SELECT `emp_id`, `name` FROM `employee`UNIONSELECT `client_id`, `client_name` FROM `client`;-- 3.員工薪水 union 銷售金額SELECT `salary` AS `total_money` FROM `employee`UNIONSELECT `total_sales` FROM `works_with`;

合并的字符類型要求一致

join 連接
	-- join 連接-- 取得所有部門經理的名子SELECT `emp_id`, `name` FROM `employee` JOIN `branch`ON `employee`.`emp_id` = `branch`.`manager_id`;-- LEFT JOIN 左連接 空缺為NULL-- RIGHT JOIN 右連接 空缺為NULL

JOIN連接時通過.來標定屬性的表歸屬

subquery 子查詢
	-- subquery子查韻-- 1.找出研發部門經理名子SELECT `name` FROM `employee` WHERE `emp_id` = (SELECT `manager_id` FROM `branch` WHERE `branch_name` = '研發');-- 2.找出對單一位客戶銷售金額超過50000的員工名子SELECT `name` FROM `employee` WHERE `emp_id` IN (SELECT `emp_id` FROM `works_with` WHERE `total_sales` > 50000);
on delete

Branch

	CREATE TABLE `branch`(`branch_id` INT PRIMARY KEY,`branch_name` VARCHAR(20),`manager_id` INT,FOREIGN KEY (`manager_id`) REFERENCES `employee`(`emp_id`) ON DELETE SET NULL);

表示:在刪除表單時employee(emp_id)若缺失, (manager_id) 賦值為NULL
注意刪除時,主鍵不能為NULL

Works_with

	CREATE TABLE `works_with`(`emp_id` INT,`client_id` INT,`total_sales` INT,PRIMARY KEY(`emp_id`, `client_id`),FOREIGN KEY (`emp_id`) REFERENCES `employee`(`emp_id`) ON DELETE CASCADE,FOREIGN KEY (`client_id`) REFERENCES `client` (`client_id`) ON DELETE CASCADE);

表示:在刪除表單時employee(emp_id)若無對應, 對應行直接刪除


1. 查詢每個員工的總銷售額
SELECT e.`name` AS `employee_name`,SUM(w.`total_sales`) AS `total_sales`
FROM `employee` e
JOIN `works_with` w ON e.`emp_id` = w.`emp_id`
GROUP BY e.`name`;

結果:

employee_nametotal_sales
Alice2000.00
Bob4500.00
2. 查詢每個部門的經理姓名
SELECT b.`branch_name`,e.`name` AS `manager_name`
FROM `branch` b
JOIN `employee` e ON b.`manager_id` = e.`emp_id`;

結果:

branch_namemanager_name
HQAlice
Branch 1Charlie
3. 查詢特定員工負責的客戶信息

假設我們想查詢Bob(emp_id = 2)負責的客戶信息:

SELECT c.`name` AS `customer_name`,c.`address`,c.`phone`,w.`total_sales`
FROM `customer` c
JOIN `works_with` w ON c.`cust_id` = w.`cust_id`
WHERE w.`emp_id` = 2;

結果:

customer_nameaddressphonetotal_sales
Customer A123 Main St555-12341500.00
Customer B456 Elm St555-56783000.00

如何使用Python與MySQL進行集成,并展示一些更復雜的查詢和數據處理操作。
以公司數據庫為例,如何編寫Python代碼來查詢數據、進行數據分析,并將結果可視化。

使用Python與MySQL進行集成的詳細示例

1. 安裝 mysql-connector-python

首先,確保你安裝了 mysql-connector-python 庫。可以使用以下命令進行安裝:

2. 連接MySQL數據庫并執行查詢

以下是一個詳細的Python示例,展示如何連接到MySQL數據庫,執行查詢并處理結果:

import mysql.connectordef connect_to_database():# 建立數據庫連接conn = mysql.connector.connect(host='localhost',user='root',password='your_password',database='your_database')return conndef fetch_employee_sales():# 連接數據庫conn = connect_to_database()cursor = conn.cursor()# 查詢每個員工的總銷售額query = """SELECT e.name AS employee_name,SUM(w.total_sales) AS total_salesFROM employee eJOIN works_with w ON e.emp_id = w.emp_idGROUP BY e.name;"""cursor.execute(query)# 獲取查詢結果results = cursor.fetchall()# 處理查詢結果for row in results:print(f"Employee: {row[0]}, Total Sales: {row[1]}")# 關閉游標和連接cursor.close()conn.close()if __name__ == "__main__":fetch_employee_sales()
3. 數據分析和可視化

使用Python中的Pandas庫進行數據分析,并使用Matplotlib或Seaborn進行可視化。

首先,確保安裝Pandas和Matplotlib:

pip install pandas matplotlib

然后,我們可以擴展上述示例,使用Pandas讀取查詢結果并進行可視化:

import mysql.connector
import pandas as pd
import matplotlib.pyplot as pltdef connect_to_database():# 建立數據庫連接conn = mysql.connector.connect(host='localhost',user='root',password='your_password',database='your_database')return conndef fetch_employee_sales():# 連接數據庫conn = connect_to_database()cursor = conn.cursor()# 查詢每個員工的總銷售額query = """SELECT e.name AS employee_name,SUM(w.total_sales) AS total_salesFROM employee eJOIN works_with w ON e.emp_id = w.emp_idGROUP BY e.name;"""cursor.execute(query)# 獲取查詢結果并轉換為Pandas DataFrameresults = cursor.fetchall()df = pd.DataFrame(results, columns=['Employee', 'Total Sales'])# 關閉游標和連接cursor.close()conn.close()return dfdef visualize_sales(df):# 使用Matplotlib進行可視化plt.figure(figsize=(10, 6))plt.bar(df['Employee'], df['Total Sales'], color='skyblue')plt.xlabel('Employee')plt.ylabel('Total Sales')plt.title('Employee Total Sales')plt.show()if __name__ == "__main__":df = fetch_employee_sales()visualize_sales(df)

高級數據處理和可視化

1. 查詢每個部門的總銷售額以及部門經理的姓名

如何在Python中執行此查詢,并將結果進行可視化。

def fetch_branch_sales():# 連接數據庫conn = connect_to_database()cursor = conn.cursor()# 查詢每個部門的總銷售額以及部門經理的姓名query = """SELECT b.branch_name,SUM(w.total_sales) AS total_sales,e.name AS manager_nameFROM branch bJOIN employee e ON b.manager_id = e.emp_idJOIN employee emp ON b.branch_id = emp.branch_idJOIN works_with w ON emp.emp_id = w.emp_idGROUP BY b.branch_name, e.name;"""cursor.execute(query)# 獲取查詢結果并轉換為Pandas DataFrameresults = cursor.fetchall()df = pd.DataFrame(results, columns=['Branch', 'Total Sales', 'Manager'])# 關閉游標和連接cursor.close()conn.close()return dfdef visualize_branch_sales(df):# 使用Matplotlib進行可視化plt.figure(figsize=(12, 6))branches = df['Branch']sales = df['Total Sales']managers = df['Manager']bars = plt.bar(branches, sales, color='lightgreen')# 在圖表上添加部門經理的姓名for bar, manager in zip(bars, managers):yval = bar.get_height()plt.text(bar.get_x() + bar.get_width()/2, yval + 1000, manager, ha='center', va='bottom')plt.xlabel('Branch')plt.ylabel('Total Sales')plt.title('Total Sales by Branch and Manager')plt.show()if __name__ == "__main__":df = fetch_branch_sales()visualize_branch_sales(df)
2. 創建銷售記錄表并插入數據
CREATE TABLE `sales_record`(`record_id` INT PRIMARY KEY,`emp_id` INT,`sale_date` DATE,`amount` DECIMAL(10, 2),FOREIGN KEY (`emp_id`) REFERENCES `employee`(`emp_id`) ON DELETE CASCADE
);INSERT INTO `sales_record` (`record_id`, `emp_id`, `sale_date`, `amount`)
VALUES 
(1, 1, '2023-01-15', 2000.00),
(2, 2, '2023-02-20', 1500.00),
(3, 2, '2023-03-10', 3000.00),
(4, 1, '2023-03-25', 2500.00);

如果這對您有所幫助,希望點贊支持一下作者! 😊

[ 詳細全文-點擊查看](

)

file

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/41274.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/41274.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/41274.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

修復harbor的/account/sign-in\?globalSearch=b不登錄可以查詢鏡像的問題

Nginx的location指令不能直接匹配查詢參數,所以需要通過其他方式來處理。這里是一個使用if指令結合查詢參數來實現的方法。該方法會在請求路徑中帶有特定查詢參數時返回404。 使用if指令匹配查詢參數 打開Nginx配置文件: sudo vim /etc/nginx/sites-ava…

Python中frozenset,秒變不可變集合,再也不用擔心多線程了!

目錄 1、Frozenset基礎介紹 ?? 1.1 Frozenset定義與創建 1.2 不可變集合特性 1.3 與Set的區別對比 2、Frozenset操作實踐 ?? 2.1 初始化與添加元素嘗試 2.2 成員測試: in & not in 2.3 集合運算: 并集、交集、差集 2.4 使用場景示例: 字典鍵、函數參數默認值 …

登錄設計(實戰項目)-1個手機號多用戶身份登錄

一. 背景: 該需求是一個互聯網醫院的預約單場景,護士在小程序上申請患者查房預約單,醫生在小程序上對預約單進行接單,護士開始查房后填寫查房小結,客戶需要對用戶信息進行授權,醫生查房后進行簽字&#xff…

勁爆!華為享界兩款新車曝光,等等黨有福了

文 | AUTO芯球 作者 | 雷慢 勁爆啊,北汽的一份環境影響分析報告, 不僅曝光了享界S9的生產進展, 還泄露了自家的另兩款產品, 第一款是和享界S9同尺寸的旅行車, 我一看,這不是我最喜歡的“瓦罐”嗎&…

v-html 空格/換行不生效

接口返回的內容如下&#xff1a;有空格有換行&#xff0c;但 使用v-html無效 需加css樣式 white-space: pre-wrap; <div class"pretty-html" v-html"Value"></div>.pretty-html {white-space: pre-wrap; /* 保留空格和換行&#xff0c;并允許…

掌握麥肯錫精英的6個技巧,你也能成為1%的精英!

不知道大家有沒有想過&#xff0c;我們和那些全球頂尖精英的差距可能只有1%&#xff0c;只是99%的人還不知道這件事。 今天給大家推薦一本好書&#xff0c;《你和麥肯錫精英的差別只有1%》。優思學院發現&#xff0c;在我們的六西格瑪、精益管理的學生中很多人對自己沒有自信。…

軟通動力子公司鴻湖萬聯最新成果SwanLink AI亮相世界人工智能大會

7月4日&#xff0c;2024世界人工智能大會暨人工智能全球治理高級別會議&#xff08;WAIC 2024&#xff09;在上海拉開帷幕&#xff0c;軟通動力董事長兼首席執行官劉天文受邀出席開幕式。其間&#xff0c;軟通動力攜子公司鴻湖萬聯深度參與到大會各項活動中&#xff0c;并全面展…

C語言_結構體初階(還未寫完)

結構體的聲明 1. 什么是結構&#xff1f;結構是一些值的集合&#xff0c;這些值稱為成員變量。結構的每個成員可以是不同類型的變量 數組&#xff1a;一組相同類型元素的集合 結構體&#xff1a;一組不一定相同類型元素的集 2. 結構的聲明 struct tag //tag根據實際情況給名字…

Spring注解@Qualifier

Autowired 注解是 Spring 依賴注入。但是有些場景下僅僅靠這個注解不足以讓Spring知道到底要注入哪個 bean。 默認情況下&#xff0c;Autowired 按類型裝配 Spring Bean。 如果容器中有多個相同類型的 bean&#xff0c;則框架將拋出 NoUniqueBeanDefinitionException&#xff0…

數字化產科管理平臺全套源碼,java產科電子病歷系統源碼

數字化產科管理平臺全套成品源碼&#xff0c;產科電子病歷系統源碼&#xff0c;多家大型婦幼專科醫院應用案例。源碼完全授權交付。 數字化產科管理平臺&#xff08;智慧產科系統&#xff09;是為醫院產科量身定制的信息管理系統。它管理了孕婦從懷孕開始到生產結束42天以內的一…

數據庫MySQL學習筆記

數據庫MySQL學習筆記 主要記錄常見的MySQL語句學習過程&#xff0c;增刪改查。 -- 顯示所有數據庫 SHOW DATABASES;-- 創建新數據庫 CREATE DATABASE mydatabase;-- 使用數據庫 USE mydatabase;-- 顯示當前數據庫中的所有表 SHOW TABLES;-- 創建新表 CREATE TABLE users (id …

BERT--學習

一、Transformer Transformer&#xff0c;是由編碼塊和解碼塊兩部分組成&#xff0c;其中編碼塊由多個編碼器組成&#xff0c;解碼塊同樣也是由多個解碼塊組成。 編碼器&#xff1a;自注意力 全連接 多頭自注意力&#xff1a;Q、K、V 公式&#xff1a; 解碼塊&#xff1…

【Hive實戰】 HiveMetaStore的指標分析

HiveMetaStore的指標分析&#xff08;一&#xff09; 文章目錄 HiveMetaStore的指標分析&#xff08;一&#xff09;背景目標部署架構 hive-site.xml相關配置元數據服務的指標相關配置 源碼部分&#xff08;hive2.3系&#xff09;JvmPauseMonitor.javaHiveMetaStore的內部類HMS…

【anaconda】—“conda info“命令后conda配置和環境信息的理解

文章目錄 conda配置和環境信息的理解 conda配置和環境信息的理解 安裝anaconda成功后&#xff0c;打開cmd&#xff0c;輸入"conda info"命令&#xff0c;結果顯示如下&#xff1a; conda的配置和環境信息的輸出。以下是對每個字段的解釋&#xff1a; active environm…

H2 Database Console未授權訪問漏洞封堵

背景 H2 Database Console未授權訪問&#xff0c;默認情況下自動創建不存在的數據庫&#xff0c;從而導致未授權訪問。各種未授權訪問的教程&#xff0c;但是它怎么封堵呢&#xff1f; -ifExists 很簡單&#xff0c;啟動參數添加 -ifExists &#xff0c;它的含義&#xff1a…

中電金信:加快企業 AI 平臺升級,構建金融智能業務新引擎

在當今數字化時代的浪潮下&#xff0c;人工智能&#xff08;AI&#xff09;技術的蓬勃發展正為各行業帶來前所未有的變革與創新契機。尤其是在金融領域&#xff0c;AI 模型的廣泛應用已然成為提升競爭力、優化業務流程以及實現智能化轉型的關鍵驅動力。然而&#xff0c;企業在積…

【C++ 】解決 C++ 語言報錯:Null Pointer Dereferenc

文章目錄 引言 在 C 編程中&#xff0c;空指針解引用&#xff08;Null Pointer Dereference&#xff09;是一種常見且危險的錯誤。當程序試圖通過空指針訪問內存時&#xff0c;會導致程序崩潰或產生不可預期的行為。本文將詳細探討空指針解引用的成因、檢測方法及其預防和解決…

微信新寵!淘寶扭蛋機小程序,讓購物更添樂趣

在移動互聯網飛速發展的今天&#xff0c;微信小程序以其便捷性、即用即走的特點&#xff0c;迅速成為了用戶日常生活中不可或缺的一部分。而在眾多小程序中&#xff0c;一款名為“淘寶扭蛋機”的新晉“網紅”&#xff0c;正以其獨特的玩法和豐富的驚喜&#xff0c;為購物體驗增…

【Hive實戰】HiveMetaStore的指標采集告警

HiveMetaStore的指標采集告警 文章目錄 HiveMetaStore的指標采集告警背景部署概要圖 開啟HiveMetaStore的JMX指標采集&#xff08;Hadoop2指標系統&#xff09;指標監控查詢指標核心指標選擇告警 遺留問題 背景 在遠程模式的Metastore下&#xff0c;對其開啟Hadoop2指標采集以…

簡單配置VScode輕量級C++競賽環境

1. 安裝拓展 Chinese是中文&#xff0c;需要重啟才可以運行&#xff0c;C/C拓展只是進行語法代碼提示&#xff0c;不需要進行任何配置修改&#xff0c;默認即可。 2. 創建文件 如上圖創建好各級文件夾&#xff0c;其中C是工作文件夾&#xff0c;.vscode是配置文件夾&#xff0…