MySQL基本语法

基础语法

别名

-- 别名 as 可省略,但中间需要空格
select name as 员工姓名, position as 职位名称 from employees;

常量和运算

select 200, '篮球' as hobby;
select order_id, unit_price, quantity, unit_price * quantity as total_amount from orders;

运算符

select name, age, salary from employees where age between 25 and 30;
select name, age, salary from employees where salary > 5500;
select name, age, salary from employees where name != '小张';

空值

-- SQL查询语句
select name, age from employees where hire_date IS NULL;select name, age from employees where hire_date IS NOT NULL;

模糊查询 like, not like _ %

select name, age, position from employees where name like '%张%';
-- 只查询以 "张" 开头的数据行
select name, age, position from employees where name like '张%';-- 只查询以 "张" 结尾的数据行
select name, age, position from employees where name like '%张';
-- 可以使用 not like 来查询不包含某关键字的信息。

逻辑运算

AND OR NOT

-- SQL查询语句
select name, age, salary from employees where name like '%李%' and age < 30;

去重

-- SQL 查询语句 使用DISTINCT关键字来找出不同的班级 ID
select distinct class_id from students;
-- DISTINCT 关键字还支持根据多个字段的组合来进行去重操作,确保多个字段的组合是唯一的。

排序

-- SQL 查询语句 1
select name, age from students order by age asc;-- SQL 查询语句 2
select name, score from students order by score desc;

截断、偏移

-- LIMIT 后只跟一个整数,表示要截断的数据条数(一次获取几条)
select task_name, due_date from tasks limit 2;-- LIMIT 后跟 2 个整数,依次表示从第几条数据开始、一次获取几条
select task_name, due_date from tasks limit 2, 2;

条件分支

SELECTname,CASE WHEN (name = '鸡哥') THEN '会' ELSE '不会' END AS can_rap
FROMstudent;
CASE WHEN (条件1) THEN 结果1WHEN (条件2) THEN 结果2...ELSE 其他结果 END

函数

时间

-- 获取当前日期
SELECT DATE() AS current_date;-- 获取当前日期时间
SELECT DATETIME() AS current_datetime;-- 获取当前时间
SELECT TIME() AS current_time;
-- 这里的日期、日期时间和时间将根据当前的系统时间来生成,实际运行结果可能会因为当前时间而不同。

四舍五入

round(AVG(grade),2)

字符串处理

-- 将姓名转换为大写
SELECT name, UPPER(name) AS upper_name
FROM employees;
-- 计算姓名长度
SELECT name, LENGTH(name) AS name_length
FROM employees;
-- 将姓名转换为小写并进行条件筛选
SELECT name, LOWER(name) AS lower_name
FROM employees;

聚合

  • COUNT:计算指定列的行数或非空值的数量。

当Mysql确认括号内的表达式值不可能为NULL时,实际上就是在统计行数。
所以使用条件要加一个COUNT(c.action = ‘confirmed’ OR NULL)
不为confirmed时用NULL代替,NULL不会被COUNT统计

  • SUM:计算指定列的数值之和。
  • AVG:计算指定列的数值平均值。
  • MAX:找出指定列的最大值。
  • MIN:找出指定列的最小值。
-- 使用聚合函数 COUNT 计算订单表中的总订单数
SELECT COUNT(*) AS order_num
FROM orders;
-- 使用聚合函数 COUNT(DISTINCT 列名) 计算订单表中不同客户的数量
SELECT COUNT(DISTINCT customer_id) AS customer_num
FROM orders;
-- 使用聚合函数 SUM 计算总订单金额
SELECT SUM(amount) AS total_amount
FROM orders;

分组

字段分组

-- 使用分组聚合查询中每个客户的编号
SELECT customer_id
FROM orders
GROUP BY customer_id;
-- 使用分组聚合查询每个客户的下单数
SELECT customer_id, COUNT(order_id) AS order_num
FROM orders
GROUP BY customer_id;
-- 使用多字段分组查询表中 每个客户 购买的 每种商品 的总金额,相当于按照客户编号和商品编号分组
SELECT customer_id, product_id, SUM(amount) AS total_amount
FROM orders
GROUP BY customer_id, product_id;

having 子句

-- 使用 HAVING 子句查询订单数超过 1 的客户SELECT customer_id, COUNT(order_id) AS order_num
FROM orders
GROUP BY customer_id
HAVING COUNT(order_id) > 1;
-- 使用 HAVING 子句查询订单总金额超过 100 的客户
SELECT customer_id, SUM(amount) AS total_amount
FROM orders
GROUP BY customer_id
HAVING SUM(amount) > 100;

关联查询

CROSS JOIN

是一种简单的关联查询,不需要任何条件来匹配行,它直接将左表的 每一行 与右表的 每一行 进行组合,返回的结果是两个表的笛卡尔积。

SELECT e.emp_name, e.salary, e.department, d.manager
FROM employees e
CROSS JOIN departments d;

INNER JOIN

只返回两个表中满足关联条件的交集部分,即在两个表中都存在的匹配行。

SELECT e.emp_name, e.salary, e.department, d.manager
FROM employees e
JOIN departments d ON e.department = d.department;

OUTER JOIN

根据指定的关联条件,将两个表中满足条件的行组合在一起,并包含没有匹配的行 。
包括 LEFT OUTER JOIN 和 RIGHT OUTER JOIN 两种类型,分别表示查询左表和右表的所有行(即使没有被匹配),再加上满足条件的交集部分。有些数据库并不支持 RIGHT JOIN 语法,只需要把主表(from 后面的表)和关联表(LEFT JOIN 后面的表)顺序进行调换即可

SELECT e.emp_name, e.salary, e.department, d.manager
FROM employees e
LEFT JOIN departments d ON e.department = d.department;

子查询

-- 查询出订单总金额 > 200 的客户的姓名和他们的订单总金额
-- 主查询
SELECT name, total_amount
FROM customers
WHERE customer_id IN (-- 子查询SELECT DISTINCT customer_idFROM ordersWHERE total_amount > 200
);

exists
用于检查主查询的结果集是否存在满足条件的记录,它返回布尔值(True 或 False),而不返回实际的数据。

-- 主查询
SELECT name, total_amount
FROM customers
WHERE EXISTS (-- 子查询SELECT 1FROM ordersWHERE orders.customer_id = customers.customer_id
);

组合查询

  • UNION 操作:将两个或多个查询的结果集合并, 并去除重复的行 。即如果两个查询的结果有相同的行,则只保留一行。

  • UNION ALL 操作:将两个或多个查询的结果集合并, 但不去除重复的行 。即如果两个查询的结果有相同的行,则全部保留。

SELECT name, age, department
FROM table1
UNION
SELECT name, age, department
FROM table2;

开窗函数

sum over

SUM(计算字段名) OVER (PARTITION BY 分组字段名)

SELECT order_id, customer_id, order_date, total_amount,SUM(total_amount) OVER (PARTITION BY customer_id) AS customer_total_amount
FROMorders;

sum over order by

SUM(计算字段名) OVER (PARTITION BY 分组字段名 ORDER BY 排序字段 排序规则)

-- 计算每个客户的历史订单累计金额,并显示每个订单的详细信息SELECT order_id, customer_id, order_date, total_amount,SUM(total_amount) OVER (PARTITION BY customer_id ORDER BY order_date ASC) AS cumulative_total_amount
FROMorders;

rank

用于对查询结果集中的行进行 排名 的开窗函数。可以根据指定的列或表达式对结果集中的行进行排序,并为每一行分配一个排名。
在排名过程中,相同的值将被赋予相同的排名,而不同的值将被赋予不同的排名。
常见用法是在查询结果中查找前几名(Top N)或排名最高的行。

RANK() OVER (PARTITION BY 列名1, 列名2, ... -- 可选,用于指定分组列ORDER BY 列名3 [ASC|DESC], 列名4 [ASC|DESC], ... -- 用于指定排序列及排序方式
) AS rank_column
PARTITION BY 子句可选,用于指定分组列,将结果集按照指定列进行分组;
ORDER BY 子句用于指定排序列及排序方式,决定了计算 Rank 时的排序规则。
AS rank_column 用于指定生成的 Rank 排名列的别名。
SELECT order_id, customer_id, order_date, total_amount,RANK() OVER (PARTITION BY customer_id ORDER BY total_amount DESC) AS customer_rank
FROMorders;

row_number

用于为查询结果集中的每一行分配唯一连续排名。
Row_Number函数为每一行都分配一个唯一的整数值,不管是否存在并列(相同排序值)的情况。
每一行都有一个唯一的行号,从 1 开始连续递增。

Row_Number 开窗函数的语法如下(几乎和 Rank 函数一模一样)

ROW_NUMBER() OVER (PARTITION BY column1, column2, ... -- 可选,用于指定分组列ORDER BY column3 [ASC|DESC], column4 [ASC|DESC], ... -- 用于指定排序列及排序方式
) AS row_number_column
PARTITION BY子句可选,用于指定分组列,将结果集按照指定列进行分组。ORDER BY 子句用于指定排序列及排序方式,决定了计算 Row_Number 时的排序规则。AS row_number_column 用于指定生成的行号列的别名。
SELECT order_id, customer_id, order_date, total_amount,ROW_NUMBER() OVER (PARTITION BY customer_id ORDER BY total_amount DESC) AS row_number
FROMorders;

lag / lead

在需要比较相邻行数据或进行时间序列分析时非常有用。

  • Lag 函数用于获取当前行之前的某一列的值。Lag 函数的语法如下:

LAG(column_name, offset, default_value) OVER (PARTITION BY partition_column ORDER BY sort_column)
参数解释:
column_name:要获取值的列名。
offset:表示要向上偏移的行数。例如,offset为1表示获取上一行的值,offset为2表示获取上两行的值,以此类推。
default_value:可选参数,用于指定当没有前一行时的默认值。
PARTITION BY和ORDER BY子句可选,用于分组和排序数据。

  • Lead 函数用于获取 当前行之后 的某一列的值。Lead 函数的语法如下:

LEAD(column_name, offset, default_value) OVER (PARTITION BY partition_column ORDER BY sort_column)
参数解释:
column_name:要获取值的列名。
offset:表示要向下偏移的行数。例如,offset为1表示获取下一行的值,offset为2表示获取下两行的值,以此类推。
default_value:可选参数,用于指定当没有后一行时的默认值。
PARTITION BY和ORDER BY子句可选,用于分组和排序数据。

SELECT student_id,exam_date,score,LAG(score, 1, NULL) OVER (PARTITION BY student_id ORDER BY exam_date) AS previous_score,LEAD(score, 1, NULL) OVER (PARTITION BY student_id ORDER BY exam_date) AS next_score
FROMscores;

整理自网站SQL之母(学习过,但记不住,单独查看太麻烦,所以整理给自己看)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/61077.shtml

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

相关文章

CNN 02(CNN原理)

一、卷积神经网络(CNN)原理 1.1 卷积神经网络的组成 定义 卷积神经网络由一个或多个卷积层、池化层以及全连接层等组成。与其他深度学习结构相比&#xff0c;卷积神经网络在图像等方面能够给出更好的结果。这一模型也可以使用反向传播算法进行训练。相比较其他浅层或深度神经…

Mysql-InnoDB记录结构

一、InnoDB简介 InnoDB 采取的方式是&#xff1a;将数据划分为若干个页&#xff0c;以页作为磁盘和内存之间交互的基本单位&#xff0c;InnoDB中页的大小一般为 16 KB。也就是在一般情况下&#xff0c;一次最少从磁盘中读取16KB的内容到内存中&#xff0c;一次最少把内存中的1…

快速学会git版本管理——基础命令

1、初始化仓库&#xff1a; git init 2.克隆一个仓库: git clone 我的仓库 3.添加文件到暂存区: git add 文件名 如果要上传所有文件 可以用&#xff1a;add . 中间要有空格隔开 4.提交更改&#xff1a; git commit -m "提交" 如果要添加对跟踪文件所做的所…

编程题四大算法思想(二)——回溯法:N皇后问题、子集和问题、地图填色问题、迷宫问题

文章目录 回溯法迷宫游戏 N皇后问题基本概念解空间4后问题的解空间 可行解和最优解回溯法回溯法术语回溯法的关键问题回溯法的基本思想4后问题的约束条件n后问题生成问题状态的基本方法 子集和问题一个朴素的求解方法回溯回溯法的剪枝技术 地图填色问题 回溯法 迷宫游戏 深度优…

Virtual

虚拟接口可以用作编写操作系统和驱动程序独立测试的一种方式。任何连接到同一通道(来自同一Python进程)的VirtualBus实例都将相互接收消息。 如果消息应跨进程或主机边界发送,请考虑使用多播IP接口,并参考虚拟接口对不同虚拟接口进行比较和一般性讨论。 Example import …

使用 Python编程: 下载 YouTube 音频的桌面应用程序

最近我开发了一个使用 Python 编写的桌面应用程序&#xff0c;可以方便地下载 YouTube 音频。该应用程序使用了 wxPython、yt_dlp 和 tqdm 库&#xff0c;提供了一个简单直观的用户界面&#xff0c;并具备高效的下载功能。 C:\pythoncode\new\youtube-dl-audio.py 程序介绍 …

为了他的鸟,做件很叛逆很酷的事儿

有种鸟儿&#xff0c;叫隐鹮&#xff08;Geronticus eremita&#xff09;&#xff0c;大小如鹅&#xff0c;头部光秃&#xff0c;嘴巴巨大&#xff0c;一个字&#xff0c;丑。可是&#xff0c;它还有一个特点&#xff0c;面临濒危。 为了能在欧洲冬季存活&#xff0c;这种鸟儿需…

webassembly003 ggml GGML Tensor Library part-2 官方使用说明

https://github.com/ggerganov/whisper.cpp/tree/1.0.3 GGML Tensor Library 官方有一个函数使用说明&#xff0c;但是从初始版本就没修改过 : https://github1s.com/ggerganov/ggml/blob/master/include/ggml/ggml.h#L3-L173 This documentation is still a work in progres…

安达发|富士康科技集团利用自动排程APS软件打造智慧工厂

富士康科技集团作为全球领先的3C产品研发制造企业&#xff0c;近年来积极布局智能制造领域&#xff0c;通过引入先进的自动化排程系统(APS),成功打造了智慧工厂&#xff0c;提高了生产质量与效率&#xff0c;降低了生产成本。 富士康集团自2019年下半年提出在观澜厂区建立数字可…

DRM全解析 —— CREATE_DUMB(2)

接前一篇文章&#xff1a;DRM全解析 —— CREATE_DUMB&#xff08;1&#xff09; 本文参考以下博文&#xff1a; DRM驱动&#xff08;三&#xff09;之CREATE_DUMB 特此致谢&#xff01; 上一回围绕libdrm与DRM在Linux内核中的接口&#xff1a; DRM_IOCTL_DEF(DRM_IOCTL_MOD…

C++ list模拟实现

list模拟实现代码&#xff1a; namespace djx {template<class T>struct list_node{T _data;list_node<T>* _prev;list_node<T>* _next;list_node(const T& x T()):_data(x),_prev(nullptr),_next(nullptr){}};template<class T,class Ref,class Pt…

Linux 云服务器挂载数据盘

1、检查linux服务器磁盘情况 df -h 可以看到无磁盘挂载信息。 2、查看待挂载磁盘信息 fdisk -l 可以看到40G系统盘、50G数据盘&#xff08;盘符&#xff1a;/dev/vdb&#xff09; 3、对数据盘分区 fdisk /dev/vdb 根据提示&#xff0c;依次输入“n”&#xff0c;“p”“1…

今日举办亚马逊云科技re:Inforce大会:结合生成式AI安全最新趋势,解决企业新挑战

2023年&#xff0c;生成式AI带来了无数的创新&#xff0c;并将会在行业应用中产生更多的新能力、新场景。与此同时&#xff0c;关于生成式AI的风险管控成为各方关注焦点&#xff0c;数据隐私、合规保护、防欺诈等&#xff0c;已成为生成式AI时代的安全合规的新话题。 随着云上业…

Java【手撕滑动窗口】LeetCode 3. “无重复字符的最长子串“, 图文详解思路分析 + 代码

文章目录 前言一、长度最小子数组1, 题目2, 思路分析3, 代码 前言 各位读者好, 我是小陈, 这是我的个人主页, 希望我的专栏能够帮助到你: &#x1f4d5; JavaSE基础: 基础语法, 类和对象, 封装继承多态, 接口, 综合小练习图书管理系统等 &#x1f4d7; Java数据结构: 顺序表, 链…

Nacos配置管理

统一配置管理 当微服务部署的实例越来越多&#xff0c;达到数十、数百时&#xff0c;逐个修改微服务配置就会让人抓狂&#xff0c;而且很容易出错。我们需要一种统一配置管理方案&#xff0c;可以集中管理所有实例的配置。 Nacos一方面可以将配置集中管理&#xff0c;另一方可…

Python钢筋混凝土结构计算.pdf-已知弯矩确定混凝土梁截面尺寸

计算原理 确定混凝土梁截面的合理尺寸通常需要考虑弯矩、受力要求和约束条件等多个因素。以下是一种常见的计算公式&#xff0c;用于基于已知弯矩确定混凝土梁截面的合理尺寸&#xff1a; 请注意&#xff0c;以上公式仅提供了一种常见的计算方法&#xff0c;并且具体的规范和设…

Python 实战之ChatGPT + Python 实现全自动数据处理/可视化详解

本文目录 一、引言 二、成果演示——口述式数据可视化 三、远原理述 四、实现过程 &#xff08;一&#xff09;环境配置 &#xff08;二&#xff09;申请OpenAI账号 &#xff08;一&#xff09;调用ChatGPT API &#xff08;二&#xff09;设计AI身份&#xff0c;全自动处理数据…

【附安装包】Multisim 14.0安装教程|电子电路

软件下载 软件&#xff1a;Multisim版本&#xff1a;14.0语言&#xff1a;简体中文大小&#xff1a;649.68M安装环境&#xff1a;Win11/Win10/Win8/Win7硬件要求&#xff1a;CPU2.5GHz 内存4G(或更高&#xff09;下载通道①百度网盘丨64位下载链接&#xff1a;https://pan.bai…

jdk17+springboot使用webservice,踩坑记录

这几天wms对接lbpm系统&#xff0c;给我的接口是webservice的&#xff0c;老实说&#xff0c;这个技术很早&#xff0c;奈何人家只支持这个。 环境说明&#xff1a;JDK17 springboot2.6.6。网上很多教程是基于jdk8的&#xff0c;所以很多在17上面跑不起来。折腾两天&#xff0c…

OJ练习第154题——到家的最少跳跃次数

到家的最少跳跃次数 力扣链接&#xff1a;1654. 到家的最少跳跃次数 题目描述 有一只跳蚤的家在数轴上的位置 x 处。请你帮助它从位置 0 出发&#xff0c;到达它的家。 跳蚤跳跃的规则如下&#xff1a; 它可以 往前 跳恰好 a 个位置&#xff08;即往右跳&#xff09;。 它…