mysql高级语句的查询语句

news2025/1/13 9:28:45

一、排序语法,关键字排序

升序和降序

默认的排序方式就是升序

升序:ASC

降序:DESC

配合语法:order by 语法

1、升序

select * from info order by name; 根据名字升序排序,不需要加ASC

 select * from info order by id;根据id升序排序

2、 降序(指定列)

select * from info order by name desc;根据名字降序

select * from info order by id desc;  根据id降序

3、多个列排序

 以多个列作为排序关键字,只有第一个参数有相同的值第二个字段才有意义。

select * from info order by hobbid desc,id;

重复值对应的第二个字段按照指定的排序进行排序

select * from info order by id desc,score;#根据id降序,成绩升序

二、区间判断

1、and 且

两个条件都要满足

select * from info where score > 70 and score <=90; 成绩大于70且小于90

 

2、or 且 

 两个条件只要满足一个即可

select * from info where score > 70 OR score <=90;成绩大于70或者成绩小于90

符合条件的都展示出来

3、嵌套多条件

select * from info where score > 70 or ( score > 0 and score < 20 );
查找成绩大于70 或者 成绩大于0且成绩小于20

 三、分组查询

对sql查询的结果进行分组,使用group by 语句来实现

group by 语句配合聚合函数一起使用。

聚合函数的类型:统计 count,求和 sum,求平均数 avg,最大值max,最小值 min。

select  (指定列)count(name),hobbid(进行分组) from info group by hobbi;

最少两个列,group by 不能跟聚合函数后面的列  

 

 在聚合函数分组语句中,所有的非聚合函数列,都要在group by语句当中。

select count(name),hobbid,name from info group by hobbid,name;

select count(name),hobbid,name from info where score >=80 GROUP BY hobbid,name;
以爱好为分组,统计成绩大于80的名字

 

GROUP BY为一个整体,在其前面可以使用where,在其后面要使用having

select count(name),hobbid,score from info GROUP BY hobbid,score having score >=80;

select avg(score),hobbid from info group by hobbid having avg(score) >= 60;  

 

 统计姓名,以兴趣和分数作为分组,统计出成绩大于80的,然后按照降序对姓名的列进行排序

select count(name),hobbid,score from info group by hobbid,score having score > 80 order by count(name) desc;

四、偏移量 

limit 1,3 1是位置偏移量(可选参数)

如果不设定位置偏移量,默认就是从第一行开始(0+1),默认值是0

select * from info limit 3; 显示前三行

 

select * from info limit 1,3; 显示2-4行

 

使用limit 和降序,只显示最后最后三行

select * from info order by id desc limit 3;

五、别名as

 表和列的别名:因为在实际工作中,表的名字和列的名字可能会很长,书写起来不太方便,多次声明表和列时,完整的展示太复杂了,设置别名可以使书写简化了可读性增加了,简洁明了。

格式一:

select name as 姓名,score as 成绩 from info;

 格式二:

select name 姓名,score 成绩 from info;

 

格式三:

select i.name 姓名,i.score 成绩 from info i;

格式四:

select i.name 姓名,i.score 成绩 from info as i;

六、 对表进行复制

create table test as select * from info;

只能复制表的数据,不能复制表的结构,主键的约束复制不了

desc info;查看区别

 desc test;查看复制的表

 用条件方式复制表

create table test1 as select * from info where score >=60;

 test表

七、通配符

 like :模糊查询

% :表示0个,1个 或者多个字符类似于*

_:表示单个字符。

select * from info where address like 's%';

八、子查询

子查询: 内查询,嵌套查询,select语句当中又嵌套了一个select。

嵌套的select才是子查询,先执行子查询的语句,外部的select在根据子条件的结果进行过滤查找。

子查询可以是多个表,也可以是同一张表

关联语句 in not in

select(select)

select id,name,score from info where id in(select id from info where score>=80);
先将子查询的表的内容查询出来

 

多张表查询

select id,name,score from info where id  in (select id from test where score>=80);

 

select id,name,score from info where id  not in (select id from test where score>=80);

 

update info set score=80 where id in (select id from test where id =2);
根据test表中的id=2,然后更新info表中id=2的分数

 info表修改前

 

info表修改后

在子查询当中多表查询(不要超过三张)和别名:

info表

test表

 

info表和test表,这两张表id部分相同,然后根据id相同的部分来查询info表的id的值

 

select a.id from info a where id in (select b.id from test b where a.id = b.id );

查询出info表成绩大于80的数据

select a.name from info a where a.score>80 and  a.id in (select b.id from test b where a.id = b.id );

求出平均数

select avg(a.score) from info a where   a.id in (select b.id from test b where a.id = b.id );

 九、exists

exists 判断子查询的结果是否为空,不为空返回true,空返回false

select count(*)from info where exists (select id from test where score>80);

这里不是in和not in会传给主表。

这里只是判断条件,存在才执行,不存在,结果为空则不执行。

这里的值不是计数的作用

 查询分数,如果分数小于50的则统计info的字段数

select count(*) from info where exists (select id from info where score<50);

select id from info where score<50查询这个条件存不存在,仅仅是一个判断的条件,并不是将结果传到下一个命令中,结果存在执行此条命令select count(*) from info,若不存在则不执行。

十、视图

视图是一个虚拟表,表的数据是基于查询的结果生成的,视图可以简化复杂的查询,隐藏复杂的细节,访问数据更安全。

视图是多表数据的集合体。

1、视图和表之间的区别

  • 存储方式,表是实际的数据行,视图不存储数据,仅仅是查询结果的虚拟表
  • 数据更新,更新表可以直接更新视图表的数据
  • 占用空间,表实际占用空间,视图表不占用空间,只是一个动态结果的展示。

视图表的数据可能是一张表的部分查询数据,也可能是多个表的一部分查询数据。

2、查看当前数据库中的视图表

show full tables in xy102 where table_type like 'VIEW';

 

create view test2 as select * from info where score >=80;

 

查询select * from test2;实际上等于执行select * from info where score >=80

 

 当修改表中id=1的分数修改为79,视图表执行执行select * from test2;

结果 

 

当修改视图id=2的分数修改为90时,查看原表也被修改

5.5之前视图只读,5.5之后双向的,修改视图表的信息,原表是数据也会发生更改

视图表:  

原表:

 

 创建一张视图表,视图表包含id name address,从info和test当中的name值相同的部分创建

create view test4 as select a.id,a.name,a.address from info a where a.name in 
(select b.name from test b where a.name = b.name );

 

1、视图就是查询语句的别名,有了视图表可以简化查询的语句

2、表的权限不一样,库的权限是有控制的,所以查询视图表的权限相对低

3、既可以保证原表的数据安全,也简化了查询的过程

删除视图表

drop view test4;

十一、 连接查询

把两张表或者多个表的记录结合起来,基于这些表,共同的字段,进行数据的拼接。

前提:要确定一个主表作为结果集,然后把其他表的行,有选择性的选定到结果上。

test1表

 

test2表

 

连接的类型:

1、内连接inner join

取两张表或者多张表之间符合条件的数据记录的集合。

取两个表或者多个表之间的交集

select a.a_id,a.a_name from test1 a INNER JOIN test2  b on a.a_name=b.b_name;

select * from test1 a INNER JOIN test2  b on a.a_name=b.b_name;

 

2、左连接

左外连接,left jion .......on 或者left outer join

以左边的表为基础,接收左表的所有行,以左表的记录和右表的记录进行匹配

匹配左表的所有,以及右表中符合条件的行,不符合显示null,不展示。

select * from test1 a left join test2 b on a.a_name=b.b_name;

写在left左边的为左表,在左边中选择name作为一个筛选的条件,只有结果相同的其显示的都能显示出来,否则是null。

以比较条件为标准,两个表相同的展示出来,并作拼接,不同的结果显示null

 3、右连接

右外连接,right jion .......on 或者right outer join

以右边的表为基础,接收右表的所有行,以右表的记录和左表的记录进行匹配

匹配右表的所有,以及左表中符合条件的行,不符合显示null,不展示。

select * from test1 a right join test2 b on a.a_name=b.b_name;

 

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

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

相关文章

kubernetes prometheus 系列| helm 部署prometheus+grafana

一、环境准备 部署k8s集群 k8sv1.26直通车搭建 安装存储类 nfs动态供给直通车 安装helm工具 https://github.com/helm/helm/releases tar -zxvf helm-v3.5.4-linux-amd64.tar.gz sudo mv linux-amd64/helm /usr/local/bin/helm chmod ox /usr/local/bin/helm helm version二、…

day05 1.多线程基本概念 2.线程支持函数(多线程编程)

1、使用两个线程完成两个文件的拷贝&#xff0c;分支线程1拷贝前一半&#xff0c;分支线程2拷贝后一半&#xff0c;主线程回收两个分支线程的资源 #include <myhead.h>int copy_file(const char *srcfile,const char *destfile,int start,int len);struct Buff {const c…

TMGM官网中国大陆地区客户

仅限TMGM官网中国大陆地区客户且每位客户每月仅限参与一次 申请限制&#xff1a;客户完成某一档位并点击兑换礼物后&#xff0c;该活动结束。若客户继续入金达到下一个档位&#xff0c;可以获得多份该档位礼物&#xff0c;此时无法通过活动板块继续申请&#xff0c;需要联系客…

案例 —— 怪物出水

一&#xff0c;Ocean Setup 设置海洋Surface Grid&#xff08;使用Large Ocean工具架&#xff09; 调节默认Grid的大小尺寸及细分&#xff08;使用非常小尺寸来测试&#xff09;&#xff1b;调整频谱输入点的多少&#xff0c;频谱Grid Size&#xff0c;波浪方向&#xff0c;速度…

Python基础教程(三)类和对象、异常处理和模块

8.类与对象 8.1 面向对象 面向对象的三大基本特征: 封装、继承、多态。 在面向对象编程中&#xff0c;封装&#xff08;Encapsulation&#xff09;是一种将数据和操作&#xff08;方法&#xff09;组合在一起的机制。通过封装&#xff0c;我们可以隐藏数据的具体实现细节&am…

鸿蒙系统开发【设备安全服务-应用设备状态检测】安全

设备安全服务-应用设备状态检测 介绍 本示例向您介绍如何在应用中获取DeviceToken用于对应用的设备状态进行检测。 需要使用设备安全服务接口 kit.DeviceSecurityKit。 效果预览 Sample工程的配置与使用 在DevEco中配置Sample工程的步骤如下 [创建项目]及[应用]。打开Sam…

算法训练1

01背包问题 背包状态方程----动态规划 二维dp 使用 f[i][j] max(f[i-1][j] ,f[i-1][j - w[i]] v[i]); 伪代码&#xff1a; int dp[100][100]; void test6() {int n; //装备数量int m; //背包容量int v[105], w[105]; //前面空间&#xff0c;后面价值for (int i 1; i &l…

快速排序(上)

快速排序 前言 快速排序算法是最流行的排序算法,且有充足的理由,因为在大多数情况下,快速排序都是最快的。所以学习快速排序算法十分有必要。当然&#xff0c;既然它这么好&#xff0c;也就不太容易理解。 正文 Hoare版快排 快速排序是Hoare在1962年提出的一种二叉树结构的…

专业知识 | 操作系统与网络 | 3. Linux 环境基础开发工具使用

知足知不足&#xff0c;有为有不为&#xff01;——《心安即是归处》 目录 专业知识 | 操作系统与网络 | 3. Linux 环境基础开发工具使用 专业知识 | 操作系统与网络 | 3. Linux 环境基础开发工具使用

SpringDataJPA(三):多表操作,复杂查询

一、Specifications动态查询 有时我们在查询某个实体的时候&#xff0c;给定的条件是不固定的&#xff0c;这时就需要动态构建相应的查询语句&#xff0c;在Spring Data JPA中可以通过JpaSpecificationExecutor接口查询。相比JPQL,其优势是类型安全,更加的面向对象。 import …

Spring Boot 整合 Dubbo3 + Nacos 2.4.0

准备工作&#xff1a;Nacos 一、前置工作 安装Nacos&#xff0c;参考&#xff1a;Nacos 快速开始 此次安装 Nacos 最新版本&#xff1a;2.4.0 单机版 安装教程&#xff1a;Linux 安装 nacos 2.4.0-CSDN博客 二、创建配置文件 创建命名空间 新增配置文件 dubbo:application:i…

关于uniapp的vue2.x版本的路由守卫拦截方案

使用uni-read-pages和uni-simple-router实现&#xff0c;方案思路如下 首先在packge.json把下面两个依赖npm install 一下&#xff0c;我目前是这两个版本&#xff0c;别的版本号没有测试过 "dependencies": {"uni-read-pages": "^1.0.5",&quo…

matplotLib在图中标出最后一个点的值

import matplotlib.pyplot as plt import numpy as np# 生成100个随机数据 data np.random.rand(100)# 绘制数据 plt.plot(data, labelData Points)# 获取最后一个数据点的位置和值 last_x len(data) - 1 last_y data[-1]# 用红圈标出最后一个点 plt.plot(last_x, last_y, r…

《动手做科研》09. 万事具备,只欠行动

地址链接:《动手做科研》09. 万事具备&#xff0c;只欠行动 欢迎加入我的知识星球&#xff0c;定期分享AI论文干货知识&#xff01; 导读: 当你坚持学习到这一步&#xff0c;并且之前的内容都有跟着操作&#xff0c;那么恭喜你&#xff0c;你已经在脑力层面消化了最难的知识&am…

AI表情神同步!LivePortrait安装配置,一键包,使用教程

快手在AI视频这领域还真有点东西&#xff0c;视频生成工具“可灵”让大家玩得不亦乐乎。 现在又开源了一款超好玩的表情同步&#xff08;表情控制&#xff09;项目。 一看这图片&#xff0c;就知道是小视频平台出的&#xff0c;充满了娱乐性。发布没几天就已经有8000Star。 项…

7月Langchain-Chatchat 0.3.1最新 win系统-安装教程,踩坑2小时,5分钟拿去!

Win11安装 langchain-chatchat 0.3.1最新版 1. 虚拟环境安装和python包安装 conda create -n chat310 python3.10#这里很重要 需要先安装cuda版本的torch pip install torch2.3.1 torchvision0.18.1 torchaudio2.3.1 --index-url https://download.pytorch.org/whl/cu121pip…

六种方法实现Python文件之间的互动!

一、exec() 首先&#xff0c;我们生成一个名为**“file1.py”的python文件**&#xff1a; # file1.py print("Hello from file1!")然后&#xff0c;再生成一个名为“main.py”的python文件&#xff1a; # main.py filename file1.py with open(filename) a…

vlunstack-1(横向,phpmyadmin拿shell,xycms拿shell,cs和msf联动)

Vulnstack-1 内网环境搭建 环境配置&#xff1a; 靶机介绍 包括win7的web端&#xff0c;还有win2003为域成员&#xff0c;域控为win2008 win7内网ip&#xff1a;192.168.157.153 外网ip&#xff1a;192.168.52.143 域成员 win2003 ip 192.168.52.141 域控 win2008 ip 192.168…

基于WEB的仓库管理系统的设计与实现

点击下载源码 基于WEB的仓库管理系统的设计与实现 摘 要 仓库物品的管理是与我们的日常生活息息相关的一个重大问题。随着我国经济飞速的发展&#xff0c;改革开放的不断深入&#xff0c;企业要想在激烈的市场竞争中立于不败之地&#xff0c;要想继续的发展与生存&#xff0…

IDEA报错无效的目标发行版:17

问题描述&#xff1a;由于要接手另外一个项目&#xff0c;之前项目用的jdk17&#xff0c;新项目用的jdk8。需要切换jdk&#xff0c;idea切换之后启动报错 检查之后发现是没切换完全&#xff0c;一共需要切换如下几个地方&#xff1a; 切换前提&#xff1a;电脑上安装了多个版本…