3.mysql查询必备sql语句

news2025/1/10 17:02:48

文章目录

  • 1.条件查询 where
  • 2. 通配符与模糊查询
  • 3. 映射
  • 4. 排序 order_by
  • 5. 取部分 limit 和offset
  • 6. 分组 group by
  • 7.左右连表 left outer join ... on
  • 8. 联合查询 union

1.条件查询 where

表内容:
在这里插入图片描述
在这里插入图片描述

import pymysql

conn = pymysql.connect(host='127.0.0.1',port=3306,user='root',passwd='root',charset='utf8',db='db26')
cursor = conn.cursor()
# sql2 = """
# create table info(
#     id int not null auto_increment primary key,
#     name varchar(16) not null,
#     email varchar(32) not null,
#     age int,
#     depart_id int
# )default charset=utf8;
# """
# cursor.execute(sql2)
#conn.commit()
#sql = "select * from info where age>30"
# sql = "select * from info where id!=3"
#sql = "select * from info where id between 2 and 4"
#sql = "select * from info where (id between 2 and 4) and age>10"
#sql = "select * from info where id in (1,2,4)"
#sql = "select * from info where id not in (1,2,4)"
# sql = "select * from info where id in (select id from depart)"
# sql = "select * from info where not exists (select * from depart where id=5)"
#sql = "select * from info where exists (select * from depart where id=2)"
#sql = "select * from (select * from info where id>2)as T where age>10"
#sql = "select * from (select * from info where id>2) as T where age>10"


#sql = "select * from info where name like '%wu%'"
#sql = "select * from info where email like '%@live.com'"
sql = "select * from info where email like '__peiqi@live.co_'"
cursor.execute(sql)
result = cursor.fetchall()
#print(result)
for i in result:
    print(i)
cursor.close()
conn.close()

2. 通配符与模糊查询

% 代表任意个任意字符
_ 代表单个任意字符

select * from info where name like "%沛%";
select * from info where name like "%沛";
select * from info where email like "%@live.com";
select * from info where name like "武%齐";
select * from info where name like "k%y";
select * from info where email like "wupeiqi%";


select * from info where email like "_@live.com";
select * from info where email like "_upeiqi@live.com";
select * from info where email like "__peiqi@live.com";
select * from info where email like "__peiqi_live.co_";
import pymysql

conn = pymysql.connect(host='127.0.0.1',port=3306,user='root',passwd='root',charset='utf8',db='db26')
cursor = conn.cursor()
#sql = "select * from info where name like '%wu%'"
#sql = "select * from info where email like '%@live.com'"
sql = "select * from info where email like '__peiqi@live.co_'"
cursor.execute(sql)
result = cursor.fetchall()
#print(result)
for i in result:
    print(i)
cursor.close()
conn.close()

3. 映射

  • 映射是指什么?查找的内容单独建一列,
select * from info;

select id, name				from info;
select id, name as NM 		from info;
select id, name as NM, 123  from info;
注意:少些select * ,自己需求。

select 
	id,
	name,
	666 as num,
	( select max(id) from depart ) as mid, -- max/min/sum  只能返回一个值,max(id)是一个值
	( select min(id) from depart) as nid, -- max/min/sum
	age
from info;
select 
	id,
	name,
	( select title from depart where depart.id=info.depart_id) as x1
from info;

# 注意:效率很低

select 
	id,
	name,
	( select title from depart where depart.id=info.depart_id) as x1,
	-- 顺序:先查表info,取出id,name列,再查当列的depart_id是否等于depart.id,AS后是重命名
	( select title from depart where depart.id=info.id) as x2
from info;
select 
	id,
	name,
	case depart_id when 1 then "第1部门" end v1
from info;

select 
	id,
	name,
	case depart_id when 1 then "第1部门" else "其他" end v2
	-- case语句 如果depart_id为1,就写为第一部门,否则就其他  该列为v2
from info;

select 
	id,
	name,
	case depart_id when 1 then "第1部门" end v1,
	case depart_id when 1 then "第1部门" else "其他" end v2,
	case depart_id when 1 then "第1部门" when 2 then "第2部门" else "其他" end v3,
	-- case语句 如果depart_id为1,就写为第一部门,如果是2 就是第2部门 否则就其他  该列为v2
	case when age<18 then "少年" end v4,
	case when age<18 then "少年" else "油腻男" end v5,
	case when age<18 then "少年" when age<30 then "青年" else "油腻男" end v6
	-- case语句 如果age<18就是少年,age<30就是青年,否则就其他 就是油腻, 该列为v6
from info;

4. 排序 order_by

select * from info order by age desc; -- 倒序
select * from info order by age asc;  -- 顺序

select * from info order by id desc;
select * from info order by id asc;
select * from info order by age asc,id desc; -- 优先按照age从小到大;如果age相同则按照id从大到小。


select * from info where id>10 order by age asc,id desc;
select * from info where id>6 or name like "%y" order by age asc,id desc;

5. 取部分 limit 和offset

select * from info limit 5;   										-- 获取前5条数据
select * from info order by id desc limit 3;						-- 先排序,再获取前3条数据
select * from info where id > 4 order by id desc limit 3;			-- 先排序,再获取前3条数据

select * from info limit 3 offset 2;	-- 从位置2开始,向后获取前3数据

limit 配合offset可以用于分页操作,比如在数据表内有1000条数据,每页显示10个,可以分为100页

- 第一页:`select * from info limit 10 offset 0;`
- 第二页:`select * from info limit 10 offset 10;`
- 第三页:`select * from info limit 10 offset 20;`
- 第四页:`select * from info limit 10 offset 30;

6. 分组 group by

sql = "select depart_id,max(age),min(age),avg(age),count(id),sum(age) from info group by depart_id" 
-- 查询 按照depart_id分组后 按照分组后的每组找出聚合函数后的内容,
sql = "select depart_id,count(id) from info group by depart_id having count(id) > 2;"
-- 先分组 后having子查询
sql = "select count(id) from info"
sql = "select min(id) from info"
select * from info where id in (select max(id) from info group by age);
-- 先查找每个年龄的最大ID,后查询这些ID的信息
select age,count(id) from info group by age having count(id) > 2;
-- 
select age,count(id) from info where id > 4 group by age having count(id) > 2;  
-- 聚合条件放在having后面

-- 一个最复杂的例子
select age,count(id) from info where id > 2 group by age having count(id) > 1 order by age desc limit 1;
- 要查询的表info
- 条件 id>2
- 根据age分组
- 对分组后的数据再根据聚合条件过滤 count(id)>1
- 根据age从大到小排序
- 获取第1

7.左右连表 left outer join … on

主表 left outer join 从表 on 主表.x = 从表.id 
-- 左外连接时左边的表是主表,根据某个条件进行连表,利用了一个主表和一个从表
select * from info left outer join depart on info.depart_id = depart.id;
sql = "select info.id,info.name,info.email,info.age,info.depart_id,depart.title from info left outer join depart on info.depart_id=depart.id"
-- 左连接并显示指定字段
sql = "select * from info right outer join depart on info.depart_id=depart.id"
-- 右连接 右边是主表  左边是从表
sql = "select * from info right join depart on info.depart_id=depart.id"
-- 谁是主表 就要展示谁为主,没有对应的展示那些元素为null,主要使用的是左外连接
select * from info left outer join depart on ....
select * from depart left outer join info on ....
简写  可以去掉outer  默认是外连接

内连接:表 inner join 表 on 条件

互相匹配,只有两者能关联上的数据才会显示,没有关联的数据就不会显示
select * from info inner join depart on info.depart_id=depart.id;

8. 联合查询 union

  • 又称为上下连表 很少用到,可以用于多张表联合去重
select id,title from depart 
union
select id,name from info;


select id,title from depart 
union
select email,name from info;
-- 列数需相同
-- 数据类型不一致没问题

select id from depart 
union all
select id from info;

-- 保留所有,查询时不会自动去重
到目前为止SQL执行顺序:
    join/union
    on 
    where 
    group by
    having 
    order by
    limit 

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

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

相关文章

向QAbstractItemView子类如:QTreeView、QTableView等子项单元格插入窗体小部件的功能实现(第2种方法)

1.前言工作中经常会遇到这样的需求&#xff1a;向QAbstractItemView子类如QTreeView、QTableView单元格插入窗体小部件&#xff0c;如&#xff1a;进度条、按钮、单行编辑框等。下面链接的系列博文就是讲解如何实现该功能的。《向QAbstractItemView子类如:QTreeView、QTableVie…

LeetCode 2500. 删除每行中的最大值

给你一个 m x n 大小的矩阵 grid &#xff0c;由若干正整数组成。 执行下述操作&#xff0c;直到 grid 变为空矩阵&#xff1a; 从每一行删除值最大的元素。如果存在多个这样的值&#xff0c;删除其中任何一个。 将删除元素中的最大值与答案相加。 注意 每执行一次操作&#…

行为型模式-状态模式

1.概述 【例】通过按钮来控制一个电梯的状态&#xff0c;一个电梯有开门状态&#xff0c;关门状态&#xff0c;停止状态&#xff0c;运行状态。每一种状态改变&#xff0c;都有可能要根据其他状态来更新处理。例如&#xff0c;如果电梯门现在处于运行时状态&#xff0c;就不能…

时序数据处理中的拟合问题

对于深度学习或机器学习模型而言,我们不仅要求它对训练数据集有很好的拟合(训练误差),同时也希望它可以对未知数据集(测试集)有很好的拟合结果(泛化能力),所产生的测试误差被称为泛化误差。度量泛化能力的好坏,最直观的表现就是模型的过拟合(overfitting)和欠拟合(…

一起Talk Android吧(第四百七十五回:渐变类视图动画)

文章目录使用方法属性介绍示例代码共用属性各位看官们大家好&#xff0c;上一回中咱们说的例子是"如何使用视图动画",这一回中咱们说的例子是"渐变类视图动画"。闲话休提&#xff0c;言归正转&#xff0c;让我们一起Talk Android吧&#xff01; 看官们&am…

移动web动画

移动web动画动画动画属性鼠标经过暂停动画多组动画鼠标经过暂停动画多组动画动画 动画最大的特点可以不用鼠标触发&#xff0c;自动的&#xff0c;反复的执行某些动画。 动画使用分为定义和调用&#xff1a; 定义&#xff1a; /* 1. 定义的动画 */ keyframes dance {from {tr…

恶意代码分析实战 12 对抗反汇编

12.1 Lab15-01 问题 这个二进制程序中使用了何种对抗反汇编技术&#xff1f; 首先&#xff0c;使用IDA载入该文件。 我们可以看到这个程序在地址0040100E处存在一个对抗反汇编技术的痕迹。 eax总是被置为零&#xff0c;jz跳转总是被执行。所以我们认为这一行是假冒的call指…

Docker的架构设计

前面我们研究了Docker容器的本质是一个特殊的进程&#xff0c;那么这个特殊进程是如何创建、如何终止的那&#xff1f;也就是说是谁来管理这个容器进程的生命周期的那&#xff1f;在mac操作系统中我们可以通过活动监视器来观察操作系统里面有哪些进程&#xff0c;以及通过活动监…

推荐算法:序列召回

目录 序列召回&#xff08;一&#xff09; 序列召回&#xff08;二&#xff09; 序列召回&#xff08;三&#xff09; 序列召回&#xff08;四&#xff09; 序列召回&#xff08;一&#xff09; 源自论文&#xff1a;http://arxiv.org/abs/1511.06939 基于GRU的序列召回中通过…

青训营项目实战1

项目实战 实现掘金青训营报名页码的后端部分 需求描述 展示话题&#xff08;标题、文字描述&#xff09;和回帖列表 不考虑前端页面实现&#xff0c;仅实现一个本地web服务 话题和回帖数据用文件存储 附加要求&#xff1a; 支持发布帖子 本地id生成要保证不重复 append文件 更…

【ONE·C || 指针】

总言 C语言&#xff1a;指针的使用介绍。 文章目录总言1、指针初阶1.1、是什么1.2、指针和指针类型1.2.1、指针类型介绍1.2.2、作用一&#xff1a;指针解引用1.2.3、作用二&#xff1a;指针整数1.3、野指针1.3.1、野指针是什么1.3.2、为什么存在野指针1.3.3、如何避免野指针1.4…

ReentrantLock从入门到踢门

1. ReentrantLock是什么Lock提供了比synchronized方法和语句更广泛的锁定操作。 更灵活的结构化&#xff0c;并且支持多个相关联的对象Condition。它实现了Lock、Serializable序列化接口。图1 ReentrantLock实现接口图1.1 Lock1.1.1 lock// 获取锁 void lock();1.1.2 lockInter…

SpringMVC -->ant风格的路径 -->占位符 -->获取请求参数 -->@RequestParam

文章目录SpringMVC支持ant风格的路径SpringMVC支持路径中的占位符SpringMVC获取请求参数通过servletAPI获取通过控制器方法的形参获取请求参数RequestParam注解处理请求参数和控制器方法的形参的映射关系代码样例SpringMVC支持ant风格的路径 &#xff1f;&#xff1a;表示任意的…

爆火微信公众号自定义早安推送,爱她就给她推送

为女朋友打造专属早安推送先上截图电脑端看的效果手机端看的效果一、申请微信公众号测试号二、让他/她扫码关注测试公众号三、新增模板消息四、天气API五、使用 leancloud 部署云函数六、源代码先上截图 电脑端看的效果 手机端看的效果 一、申请微信公众号测试号 https://mp.w…

Kettle(7):插入/更新组件

1 组件介绍 插入/更新组件能够将Kettle抽取的数据&#xff0c;与某个表的数据进行对比&#xff0c;如果数据存在就更新&#xff0c;不存在就插入。 2 需求 修改 t_user中的张三这一行数据&#xff0c;修改age为80 同时&#xff0c;我们想要使用Kettle将 t_user1 中的张三这一…

【编程入门】N种编程语言做个记事本

背景 前面已输出多个系列&#xff1a; 《十余种编程语言做个计算器》 《十余种编程语言写2048小游戏》 《17种编程语言10种排序算法》 《十余种编程语言写博客系统》 《十余种编程语言写云笔记》 本系列对比云笔记&#xff0c;将更为简化&#xff0c;去掉了网络调用&#xff0…

量化选股——基于多因子模型的量化策略(第1部分—因子测算策略构建)

文章目录1.多因子模型概述2.因子挖掘3.多因子策略4.多因子策略构建基于多因子的策略通用流程Fama-French三因子因子效果测算方法因子测算结论&量化策略构建东西有点多&#xff0c;拆开成多个文章&#xff0c;边写边整合~&#xff0c;应该会分成2部分&#xff1a; 第1部分—…

【每日一道智力题】之坤坤猜生日(面试高频)

&#x1f680;write in front&#x1f680; &#x1f4dc;所属专栏&#xff1a;每日一题 &#x1f6f0;️博客主页&#xff1a;睿睿的博客主页 &#x1f6f0;️代码仓库&#xff1a;&#x1f389;VS2022_C语言仓库 &#x1f3a1;您的点赞、关注、收藏、评论&#xff0c;是对我最…

文本特征工程——下篇

文本特征下篇 针对梯度提升树模型对文本特征进行特征工程&#xff0c;我们需要充分挖掘LabelLabelLabel编码丢失信息&#xff0c;例如上面的名字特征。内部存在非常强的规律&#xff0c;Mr等信息。这些信息反映了性别相关的信息。如果直接进行Label编码就会丢失此类信息&#…

高通平台开发系列讲解(GPS篇)NMEA数据包解析

文章目录 一、通用NMEA语句类型二、 NMEA语句格式2.1、GSV语句2.2、RMC语句2.3、GSA语句2.4、VTG语句2.5、DTM语句2.6、GNS语句2.7、GGA语句2.8、GLL语句2.9、GST语句2.10、ZDA语句沉淀、分享、成长,让自己和他人都能有所收获!😄 📢 NMEA-0183是美国国家海洋电子协会为海…