根本记不住MySQL进阶查询语句

1 MySQL进阶查询

1.1 MySQL进阶查询的语句

全文以数据库location和Store_Info为实例

---- SELECT ----显示表格中一个或数个字段的所有数据记录

语法:SELECT "字段" FROM "表名"; select 列名 from 表名 ;

---- DISTINCT ----不显示重复的数据记录

语法:SELECT DISTINCT "字段" FROM "表名"; SELECT DISTINCT Store_Name FROM Store_Info;

---- WHERE ----有条件查询

语法:SELECT "字段" FROM "表名" WHERE "条件"; SELECT Store_Name FROM Store_Info WHERE Sales > 1000;

---- AND OR ----且 或

语法:SELECT "字段" FROM "表名" WHERE "条件1" {[AND|OR] "条件2"}+ ; SELECT Store_Name FROM Store_Info WHERE Sales > 1000 OR (Sales < 500 AND Sales > 200);

---- IN ----显示已知的值的数据记录

语法:SELECT "字段" FROM "表名" WHERE "字段" IN ('值1', '值2', ...); SELECT * FROM Store_Info WHERE Store_Name IN ('Los Angeles', 'Houston');

---- BETWEEN ----显示两个值范围内的数据记录

语法:SELECT "字段" FROM "表名" WHERE "字段" BETWEEN '值1' AND '值2'; SELECT * FROM Store_Info WHERE Date BETWEEN '2020-12-06' AND '2020-12-10';

集合用法

select 列名 from 表名 where 列名 = 值 [and/or 列名 = 值 ];

!=<> > >= < <=;

between 值1 and 值2;

[not] in (值1,值2,值3...)

like ‘通配符表达式’;

1.2 查询语句通配符的应用

---- 通配符 ----通常通配符都是跟 LIKE 一起使用的

% :百分号表示零个、一个或多个字符 _ :下划线表示单个字符

'A_Z':所有以 'A' 起头,另一个任何值的字符,且以 'Z' 为结尾的字符串。例如,'ABZ' 和 'A2Z' 都符合这一个模式,而 'AKKZ' 并不符合 (因为在 A 和 Z 之间有两个字符,而不是一个字符)。 'ABC%': 所有以 'ABC' 起头的字符串。例如,'ABCD' 和 'ABCABC' 都符合这个模式。 '%XYZ': 所有以 'XYZ' 结尾的字符串。例如,'WXYZ' 和 'ZZXYZ' 都符合这个模式。 '%AN%': 所有含有 'AN'这个模式的字符串。例如,'LOS ANGELES' 和 'SAN FRANCISCO' 都符合这个模式。 '_AN%':所有第二个字母为 'A' 和第三个字母为 'N' 的字符串。例如,'SAN FRANCISCO' 符合这个模式,而 'LOS ANGELES' 则不符合这个模式。

---- LIKE ----匹配一个模式来找出我们要的数据记录

语法:SELECT "字段" FROM "表名" WHERE "字段" LIKE {模式}; SELECT * FROM Store_Info WHERE Store_Name like '%os%';(以百分号开头会做全表扫描)

---- ORDER BY ----按关键字排序

语法:SELECT "字段" FROM "表名" [WHERE "条件"] ORDER BY "字段" [ASC, DESC]; #ASC 是按照升序进行排序的,是默认的排序方式。 #DESC 是按降序方式进行排序。

select 列名 from 表名 order by 列名 ASC|DESC 排序

2 MySQL数据库函数

2.1 数学函数

abs(x) 返回 x 的绝对值 rand()  返回 0 到 1 的随机数 mod(x,y) 返回 x 除以 y 以后的余数 power(x,y) 返回 x 的 y 次方 round(x) 返回离 x 最近的整数 round(x,y) 保留 x 的 y 位小数四舍五入后的值 sqrt(x) 返回 x 的平方根 truncate(x,y) 返回数字 x 截断为 y 位小数的值 ceil(x) 返回大于或等于 x 的最小整数 floor(x) 返回小于或等于 x 的最大整数 greatest(x1,x2...) 返回集合中最大的值,也可以返回多个字段的最大的值 least(x1,x2...) 返回集合中最小的值,也可以返回多个字段的最小的值

SELECT abs(-1), rand(), mod(5,3), power(2,3), round(1.89);

SELECT round(1.8937,3), truncate(1.235,2), ceil(5.2), floor(2.1), least(1.89,3,6.1,2.1);

2.2 聚合函数

avg() 返回指定列的平均值

SELECT avg(Sales) FROM Store_Info;

count() 返回指定列中非 NULL 值的个数

SELECT count(Store_Name) FROM Store_Info;

SELECT count(DISTINCT Store_Name) FROM Store_Info; 去重并返回非null的值个数,

min() 返回指定列的最小值

SELECT min(Sales) FROM Store_Info;

max() 返回指定列的最大值

SELECT max(Sales) FROM Store_Info;

sum(x) 返回指定列的所有值之和

SELECT sum(Sales) FROM Store_Info;

#count(*)包括了所有的列的行数,在统计结果的时候,不会忽略列值为 NULL #count(列名) 只包括列名那一列的行数,在统计结果的时候,会忽略列值为 NULL 的行

2.3 字符串函数

trim() 返回去除指定格式的值

concat(x,y) 将提供的参数 x 和 y 拼接成一个字符串 x || y

substr(x,y) 获取从字符串 x 中的第 y 个位置开始一直到 最后的字符串,跟substring()函数作用相同

substr(x,y,z) 获取从字符串 x 中的第 y 个位置开始长度为 z 的字符串

length(x) 返回字符串 x 的长度

replace(x,y,z) 将字符串 z 替代字符串 x 中的字符串 y

upper(x) 将字符串 x 的所有字母变成大写字母

lower(x) 将字符串 x 的所有字母变成小写字母

left(x,y) 返回字符串 x 的前 y 个字符

right(x,y) 返回字符串 x 的后 y 个字符

repeat(x,y) 将字符串 x 重复 y 次

space(x) 返回 x 个空格

strcmp(x,y) 比较 x 和 y,返回的值可以为-1,0,1

reverse(x) 将字符串 x 倒序输出

#如sql_mode开启了PIPES_AS_CONCAT,"||"视为字符串的连接操作符而非或运算符,和字符串的拼接函数Concat相类似,这和Oracle数据库使用方法一样的 SELECT Region || ' ' || Store_Name FROM location WHERE Store_Name = 'Boston';

SELECT TRIM ([ [位置] [要移除的字符串] FROM ] 字符串); #[位置]:的值可以为 LEADING (起头), TRAILING (结尾), BOTH (起头及结尾)。 #[要移除的字符串]:从字串的起头、结尾,或起头及结尾移除的字符串。缺省时为空格。

GROUP BY
对GROUP BY后面的字段的查询结果进行汇总分组,通常是结合聚合函数一起使用的

GROUP BY 有一个原则,凡是在 GROUP BY 后面出现的字段,必须在 SELECT 后面出现; 凡是在 SELECT 后面出现的、且未在聚合函数中出现的字段,必须出现在 GROUP BY 后面

语法:SELECT "字段1", SUM("字段2") FROM "表名" GROUP BY "字段1"; SELECT Store_Name, SUM(Sales) FROM Store_Info GROUP BY Store_Name ORDER BY sales desc;

select 列名,聚合函数(列名) from 表名 group by 列名; 分组,通常会结合聚合函数使用

HAVING
用来过滤由 GROUP BY 语句返回的记录集,通常与 GROUP BY 语句联合使用

因为where的执行顺序要先于select,所以要用HAVING 代替where使用

HAVING 语句的存在弥补了 WHERE 关键字不能与聚合函数联合使用的不足。 语法:SELECT "字段1", SUM("字段2") FROM "表格名" GROUP BY "字段1" HAVING (函数条件); SELECT Store_Name, SUM(Sales) FROM Store_Info GROUP BY Store_Name HAVING SUM(Sales) > 1500;

select 列名,聚合函数(列名) from 表名 group by 列名 having 条件表达式;

having的作用根据group by的语句返回结果过滤

别名(字段別名 表格別名)

语法:SELECT "表格別名"."字段1" [AS] "字段別名" FROM "表格名" [AS] "表格別名"; SELECT A.Store_Name Store, SUM(A.Sales) "Total Sales" FROM Store_Info A GROUP BY A.Store_Name;

select 列名 AS 字段别名 from 表名 AS 表别名;

子查询(连接表格,在WHERE 子句或 HAVING 子句中插入另一个 SQL 语句)

语法:SELECT "字段1" FROM "表格1" WHERE "字段2" [比较运算符] #外查询 (SELECT "字段1" FROM "表格2" WHERE "条件"); #内查询

#可以是符号的运算符,例如 =、>、<、>=、<= ;也可以是文字的运算符,例如 LIKE、IN、BETWEEN select store_name,sum(sales) from store_info where store_name in(select store_nameme from location where region = 'west');

select sum(A.sales) from store_info A where A.store_name in (select store_name from location B where B.store_name = A.store_name);

select 列名 from 表名 where 表名 运算符 (select 列名 from 表名 where 表名)

外查询   内查询(内查询的结果会作为外查询的条件来使用)

3 表连接查询

3.1 表连接

inner join 内连接 只返回两个表的字段相等的行记录

left join 左连接 返回左表所有的行记录和右表字段相等的行记录

right join 右连接 返回右表所有的行记录和右表字段相等的行记录

union 联集 将两个select查询语句的结果合并,并去重

union all 联集 将两个select查询语句的结果合并,并去重

3.2 联集

内连接 (有交集)

select A.列名 from 左表 as A inner join 右表 as B on A.列名 = B.列名;

select A.列名 from 左表 as A inner join 右表 as B using(同名列名);

左右连接(有交集)

select A.列名 from 左表 as A left join 右表 as B on A.列名 = B.列名 where B.列名 字段 is not null;

select B.列名 from 左表 as A right join 右表 as B on A.列名 = B.列名 where A.列名 is not null;

多表查询(有交集)

select A.列名 from 左表 A,右表 B where A.列名 = B.列名;

子查询(有交集)

select A.列名 from 左表 A where A.列名 in (select B.列名 from 右表 B);

分组统计(有交集)

select A.列名,count(列名) from (select distinct 列名 from 左表 union all select distinct 列名 from 右表)A group by A.列名 having count(列名)> 1;

左连接(求左表无交集)左表有右表没有的

select [distinct] A.列名 from 左表 as A left join 右表 as B on A.列名 = B.列名 where B.列名 is null;

select A.列名 from 左表 A where A where A.列名 not in (select B.列名 from 右表 B);

右连接(求右表无交集)右表有左表没有的

select [distinct] B.列名 from 左表 as A right join 右表 as B on A.列名 = B.列名 where A.列名 is null;

select B.列名 from 右表 B where B.列名 in (select A.列名 from 左表 A);

求两个表无交集的

select A.列名 from 左表 as A left join 右表 as B on A.列名 = B.列名 where B.列名 is null union select B.列名 from 左表 as A right join 右表 as B on A.列名 = B.列名 where A.列名 is null;

select A.列名 from (select distinct 列名 from 左表 union all select distinct 列名 from 右表) A group by A.列名 having count(A.列名) = 1;

3.3 视图表

创建视图

create view V_自定义名 as (select语句)

视图表保存的是select查询语句的定义

如果select语句查询的字段是没有被处理过的源表字段,则可以通过视图表修改源表数据。

如果select语句查询的字段是被group by或函数处理过的字段,则不可以通过视图表直接修改视图表的数据。

视图表模式查看两个表无交集

create view 视图表名 as select distinct 字段 from 左表 union all select distinct 字段 from 右表; select 字段 from 视图表名 group by 字段 having count(字段) = 1;

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

使用KVM命令集管理虚拟机

14.2.1案例分析 案例环境使用一台物理机器&#xff0c;一台服务器安装CentOS7.3的64位系统&#xff08;即node01&#xff09;&#xff0c;rhel7.1是在宿主机node01中安装的虚拟机。 14.2.2案例实施 1.安装Linux虚拟机 安装过程同上一案例&#xff0c;使用Xshell 远程控制node0…

视频号上怎么开店带货?门槛和注意事项,如下所示

我是王路飞。 视频号上现在也可以开店带货了&#xff08;严格来说从22年就可以了&#xff09;。 我们团队是在22年9月份开始入局视频号电商这个赛道的&#xff0c;在此之前是专注于抖店&#xff0c;目前两个项目都在做。 今天不聊抖店&#xff0c;主要说下视频号上开店带货的…

Win10电脑关闭OneDrive自动同步的方法

在Win10电脑操作过程中&#xff0c;用户想要关闭OneDrive的自动同步功能&#xff0c;但不知道具体要怎么操作&#xff1f;首先用户需要打开OneDrive&#xff0c;然后点击关闭默认情况下将文档保存到OneDrive选项保存&#xff0c;最后关闭在这台电脑上同步设置保存就好了。接下来…

Flink 维表关联方案

Flink 维表关联方案 1、Flink DataStream 关联维表 1&#xff09;概述 1.分类 实时数据库查找关联&#xff08;Per-Record Reference Data Lookup&#xff09; 预加载维表关联&#xff08;Pre-Loading of Reference Data&#xff09; 维表变更日志关联&#xff08;Refere…

微信小程序+前后端开发学习材料

目录结构 全局文件 1.app.json 文件 用来对微信小程序进行全局配置&#xff0c;决定页面文件的路径、窗口表现、设置网络超时时间、设置多 tab 等。文件内容为一个 JSON 对象。 1.1 page用于指定小程序由哪些页面组成&#xff0c;每一项都对应一个页面的 路径&#xff08;含文…

【数值分析】Hermite插值

4. Hermite插值 理论和应用中提出的某些插值问题&#xff0c;要求插值函数 p ( x ) {p(x)} p(x) 具有一定的光滑度&#xff0c;即在插值节点处满足一定的导数条件&#xff0c;这类插值问题称为Hermite插值问题。题目大多以三次Hermite插值为主。三次Hermite插值需要四个条件&…

Leetcode的AC指南 —— 字符串/卡码网:55. 右旋字符串

摘要&#xff1a; Leetcode的AC指南 —— 字符串/卡码网&#xff1a;55. 右旋字符串。题目介绍&#xff1a;字符串的右旋转操作是把字符串尾部的若干个字符转移到字符串的前面。给定一个字符串 s 和一个正整数 k&#xff0c;请编写一个函数&#xff0c;将字符串中的后面 k 个字…

grep笔记240103

常用选项&#xff1a;&#xff1a; -i&#xff1a;忽略大小写进行匹配。 -v&#xff1a;反向匹配&#xff0c;只打印不匹配的行。 -n&#xff1a;显示匹配行的行号。 -r&#xff1a;递归查找子目录中的文件。 -l&#xff1a;只打印匹配的文件名。 -c&#xff1a;只打印匹配的行…

整理的6个Linux运维脚本

整理的6个Linux运维脚本 1、统计/etc/passwd 中能登录的用户&#xff0c;并将对应在/etc/shadow 中第二列密码提取2、查看当前连接到本机的远程IP地址3、检测本机当前用户是否为超级管理员&#xff08;root&#xff09;4、检查指定目录下是否存在对应文件5、查找 Linux 系统中的…

QT_02 窗口属性、信号槽机制

QT - 窗口属性、信号槽机制 1. 设置窗口属性 窗口设置 1,标题 2,大小 3,固定大小 4,设置图标在 widget.cpp 文件中&#xff1a; //设置窗口大小,此时窗口是可以拉大拉小的 //1参:宽度 //2参:高度 this->resize(800, 600); //设置窗口标题 this->setWindowTitle("…

使用 Palantir 表征单细胞数据中的细胞状态概率

使用 Palantir 表征单细胞数据中的细胞状态概率 写在前面的概览正文内容摘要Introduction结果马尔可夫过程The Palantir algorithm早期人类造血的景观Palantir 概括了预期的造血趋势与轨迹推理算法的比较 讨论 学习文献 写在前面的概览 Palantir算法主要用于模拟细胞分化的轨迹…

Redis缓存穿透,缓存击穿,缓存雪崩

文章目录 Redis缓存穿透&#xff0c;缓存击穿&#xff0c;缓存雪崩1. 缓存穿透1.1 解决方案1&#xff1a;缓存空数据1.2 解决方案2&#xff1a;使用布隆过滤器1.2.1 布隆过滤器介绍 2. 缓存击穿2.1 解决方案1&#xff1a;互斥锁2.2 解决方案2&#xff1a;逻辑过期 3. 缓存雪崩3…

交易逆序对的总数

题目链接 交易逆序对的总数 题目描述 注意点 0 < record.length < 50000 解答思路 本题是归并排序的扩展&#xff0c;可以先进入手撕归并排序了解利用归并排序进行合并时&#xff0c;对于左侧区间当前的首个元素leftNum&#xff0c;不论右侧区间当前的首个元素right…

【智慧地球】星图地球 | 星图地球超算数据工场

当前空天信息处理涉及并发并行的大量计算问题&#xff0c;需要高性能计算、智能计算联合调度&#xff0c;以此来实现多算力融合&#xff1b;而我国算力产业规模快速增长&#xff0c;超算算力资源正需要以任务驱动来统筹。 基于此&#xff0c;中科星图与郑州中心展开紧密合作&a…

使用 Process Explorer 和 Windbg 排查软件线程堵塞案例分享

目录 1、问题说明 2、线程堵塞的可能原因分析 3、使用Windbg和Process Explorer确定线程中发生了死循环 4、根据Windbg中显示的函数调用堆栈去查看源码&#xff0c;找到问题 4.1、在Windbg定位发生死循环的函数的方法 4.2、在Windbg中查看变量的值去辅助分析 4.3、是循环…

抖店申请流程是什么?

我是电商珠珠 想要入驻抖店的人很多&#xff0c;但是知道流程的新手却没有几个。 从开店资料到入驻流程&#xff0c;我来具体的跟大家讲一讲。 第一个&#xff0c;新手开店资质 1、营业执照 营业执照是入驻门槛之一&#xff0c;营业执照类型分为两类&#xff0c;一类为企业…

快速批量运行命令

Ansible 是 redhat 提供的自动化运维工具&#xff0c;它是 Python编写&#xff0c;可以通过 pip 安装。 pip install ansible 它通过任务(task)、角色(role)、剧本(playbook) 组织工作项目&#xff0c;适用于批量化系统配置、软件部署等需要复杂操作的工作。 但对于批量运行命…

进程的程序替换(exec函数)【Linux】

进程的程序替换详解exec函数【Linux】 程序替换的原理exec系列函数函数理解命令理解&#xff08;助记&#xff09; 关于程序替换中环境变量的解释exec函数之间的关系exec函数的使用execlexeclpexecleexecv 程序替换的原理 进程的程序替换就是让子进程执行新程序&#xff0c; 执…

使用华为云鲲鹏弹性云服务器部署Discuz

本实验将在华为云鲲鹏弹性云服务器CentOS系统的实例上&#xff0c;部署Discuz!项目&#xff0c;并进行初步的安装测试。 注意&#xff1a;官网文档有些链接失效&#xff0c;本文在官方文档的基础上作出修改&#xff0c;具体参见Discuz安装这一步 操作前提&#xff1a;登录华为…

Android : 使用GestureDetector 进行手势识别—简单应用

示例图&#xff1a; GestureDetector 介绍&#xff1a; GestureDetector 是 Android 开发中用于识别和处理手势的一个类。它允许开发者检测用户在触摸屏上的各种手势&#xff0c;如滑动、长按、双击等。通过使用 GestureDetector&#xff0c;您可以轻松地为应用程序添加手势识…