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.mzph.cn/diannao/41274.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

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 使用场景示例: 字典键、函数参数默认值 …

劲爆!华为享界两款新车曝光,等等党有福了

文 | 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;并全面展…

数字化产科管理平台全套源码,java产科电子病历系统源码

数字化产科管理平台全套成品源码&#xff0c;产科电子病历系统源码&#xff0c;多家大型妇幼专科医院应用案例。源码完全授权交付。 数字化产科管理平台&#xff08;智慧产科系统&#xff09;是为医院产科量身定制的信息管理系统。它管理了孕妇从怀孕开始到生产结束42天以内的一…

BERT--学习

一、Transformer Transformer&#xff0c;是由编码块和解码块两部分组成&#xff0c;其中编码块由多个编码器组成&#xff0c;解码块同样也是由多个解码块组成。 编码器&#xff1a;自注意力 全连接 多头自注意力&#xff1a;Q、K、V 公式&#xff1a; 解码块&#xff1…

【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;会导致程序崩溃或产生不可预期的行为。本文将详细探讨空指针解引用的成因、检测方法及其预防和解决…

简单配置VScode轻量级C++竞赛环境

1. 安装拓展 Chinese是中文&#xff0c;需要重启才可以运行&#xff0c;C/C拓展只是进行语法代码提示&#xff0c;不需要进行任何配置修改&#xff0c;默认即可。 2. 创建文件 如上图创建好各级文件夹&#xff0c;其中C是工作文件夹&#xff0c;.vscode是配置文件夹&#xff0…

【网络安全】Host碰撞漏洞原理+工具+脚本

文章目录 漏洞原理虚拟主机配置Host头部字段Host碰撞漏洞漏洞场景工具漏洞原理 Host 碰撞漏洞,也称为主机名冲突漏洞,是一种网络攻击手段。常见危害有:绕过访问控制,通过公网访问一些未经授权的资源等。 虚拟主机配置 在Web服务器(如Nginx或Apache)上,多个网站可以共…

学习测试2-方法

设计测试用例 设计测试用例的万能公式 (在没有需求文档的情况下&#xff09; 软件质量模型 效率就是性能 兼容性测试 浏览器 谷歌 IE 火狐 苹果 百度 Windows7 10 11 苹果系统 app 不同品牌 小米 vivo 华为 苹果 不同的操作系统 安卓 鸿蒙 苹果 -----------------------…

TikTok马来西亚直播网络怎么配置?

TikTok是一款全球流行的社交媒体应用&#xff0c;在东南亚地区拥有大量用户。在马来西亚这个多元化的国家&#xff0c;配置高效稳定的直播网络对TikTok的运营至关重要。 配置马来西亚直播网络的必要性 广泛的地理覆盖&#xff1a;马来西亚包括大片陆地和众多岛屿&#xff0c;网…

性能压测 -优化 Nginx的动静分离

两件事情 1.以后将所有的项目的静态资源都应该放在nginx里面 2.nginx 规则&#xff1a;/static/***所有请求都有nginx直接返回 nginx 配置一下配置文件&#xff0c;然后把html 的静态资源&#xff0c;绑定好是Nginx优先级高的静态资源路径&#xff0c;就去交给nginx静态资源…

Prometheus + Grafana 监控系统搭建使用指南-Nacos 接入 Prometheus 监控

Nacos 接入 Prometheus 监控 系列文章目录 Prometheus 的安装部署Grafana的安装部署Linux服务器接入Prometheus监控-Node Exporter 安装指南Prometheus 接入SpringBoot微服务监控Mysql 接入 Prometheus RocketMQ 接入Prometheus 监控ElasticSearch 接入 PrometheusNacos 接入…

在Android运行时切换Retrofit Base URL:简化开发环境与生产环境的切换

在运行时切换Retrofit Base URL:简化开发环境与生产环境的切换 在Android开发中,Retrofit是一个由Square开发的类型安全的HTTP客户端库。它为API认证和网络请求提供了一个强大的框架。然而,在开发过程中,我们常常需要在不同的环境(如开发环境和生产环境)之间切换Base UR…

YOLOv8改进 添加CVPR2024 PKINet中注意力机制CAAttention

一、PKINet论文 论文地址:2403.06258 (arxiv.org) 二、CAAttention结构 CAA(Context Anchor Attention)注意力模块是一种用于捕捉长距离上下文信息的并行模块。 在计算机视觉领域中,上下文信息是指与目标物体或任务相关的周围环境和语境信息。上下文信息可以帮助我们更好…

【码银送书第二十二期】《Python数据分析从入门到精通(第2版)》

&#x1f490;大家好&#xff01;我是码银~&#xff0c;欢迎关注&#x1f490;&#xff1a; CSDN&#xff1a;码银 公众号&#xff1a;码银学编程 前言 &#x1f340;丛书说明&#xff1a;“软件开发视频大讲堂‘’丛书第1版于2008年8月出版&#xff0c;因其编写细腻、易学实用…