sql查询语法

  • 单表查询

  • 格式
    select 字段列表 from 表明列表 where 条件列表 group by 分组字段列表 having 分组后的条件列表 limit 起始索引 每一页的数据量

  • 基本查询
    select 字段1,字段2,字段3 from 表名;
    select * from 表名;
    select 字段1 as 别名1,字段2 as 别名2 from 表名;
    select distinct 字段列表 from 表名;(去除重复记录)

  • 条件查询
    select 字段列表 from 表名 where 条件列表;
    比较运算符:> >= < <= = !=(<>) between…and… in(…)in之后的列表中的值多选一 like(模糊匹配 单个字符_,任意个字符%)
    逻辑运算符:and(&&) or(||) not(!)
    注意:查询为null的数据,不能使用 =null,而是is null/is not null
    例子:
    查询 入职日期 在 ‘2000-01-01’ (包含) 到 ‘2010-01-01’(包含) 之间的员工信息
    select * from tb_emp where entry_date between ‘2020-01-01’ and’2010-01-01’;
    select * from tb_emp where entry_date >= ‘2020-01-01’ and entry_date<=‘2010-01-01’;
    查询 入职时间 在 ‘2000-01-01’ (包含) 到 ‘2010-01-01’(包含) 之间 且 性别为女 的员工信息
    select * from tb_emp where entry_date between ‘2000-01-01’ and ‘2010-01-01’ and gender = 2;

  • 聚合函数
    select 聚合函数(字段列表)from 表名;
    聚合函数会忽略null,对null值不进行统计
    聚合函数:count(*) max min avg sum
    注意:使用了聚合函数,select后面应该跟的是查询字段名和聚合函数

  • 分组查询
    group by 分组列表 having 过滤条件
    根据性别分组 , 统计男性和女性员工的数量
    select gender,count(*) from tb_emp group by gender;

    查询入职时间在 ‘2015-01-01’ (包含) 以前的员工 , 并对结果根据职位分组 , 获取员工数量大于等于2的职位
    select job,count() from tb_emp where entry_date <= ‘2015-01-01’ group by job having count()>=2;
    因为先用条件查询找到入职时间的员工,然后根据职位分组,分组之后再用having过滤符合job数量大于等于2的数据,同时用到了聚合函数,select后面应该跟着分组的字段和聚合函数。
    注意:where和having区别
    执行时机不同:where是分组之前进行过滤,不满足where条件,不参与分组;而having是分组之后对结果进行过滤
    判断条件不同:where不能对聚合函数进行判断,而having可以。

  • 排序查询
    order by 字段列表;
    升序 ASC(默认)
    降序 DESC
    根据入职时间对公司的员工进行升序排序,入职时间相同,再按照更新时间进行降序排序
    select * from tb_emp group by entry_date ASC,update_time DESC;
    如果是多字段排序,只有前一个字段相同时,才会根据第二个字段排序

  • 分页查询
    limit 起始索引,每页的数量(起始索引从0开始)
    查询 第2页 员工数据, 每页展示5条记录
    select * from tb_emp limit 5,5;

  • 查询时的表达式
    if(条件表达式,true取值,false取值)
    select if(gender=1,‘男性员工’,‘女性员工’) AS 性别, count() AS 人数
    from tb_emp
    group by gender;
    if(表达式, tvalue, fvalue) :当表达式为true时,取值tvalue;当表达式为false时,取值fvalue
    as 后面是别名
    case 表达式 when 值1 then 结果1 when 值2 then 结果2 … else result end
    select (case job
    when 1 then ‘班主任’
    when 2 then ‘讲师’
    when 3 then ‘学工主管’
    when 4 then ‘教研主管’
    else ‘未分配职位’
    end) AS 职位 ,
    count(
    ) AS 人数
    from tb_emp
    group by job;

  • 多表查询

  • 内连接(显示/隐式)查询两个表的交集
    隐式:select 字段列表 from 表1,表2 where 条件…;
    显示:select 字段列表 from 表1 inner join 表2 on 连接条件;
    查询员工的姓名及所属的部门名称
    隐式:
    select tb_emp.name , tb_dept.name – 分别查询两张表中的数据
    from tb_emp , tb_dept – 关联两张表
    where tb_emp.dept_id = tb_dept.id; – 消除笛卡尔积

    显示:
    select tb_emp.name , tb_dept.name
    from tb_emp inner join tb_dept
    on tb_emp.dept_id = tb_dept.id;
    可以起别名
    select emp.name , dept.name
    from tb_emp emp inner join tb_dept dept
    on emp.dept_id = dept.id;
    注意:如果指定了别名,就不能再使用表名来指定对应字段,只能用别名

  • 外连接
    左外连接:查询左边集合(包括两个集合的交集)
    右外连接:查询右边集合(包括两个集合的交集)
    select 字段列表 from 表1 left [ outer ] join 表2 on 连接条件 … ;
    select 字段列表 from 表1 right [ outer ] join 表2 on 连接条件 … ;
    查询员工表中所有员工的姓名, 和对应的部门名称
    左外连接:以left join关键字左边的表为主表,查询主表中所有数据,以及和主表匹配的右边表中的数据
    select emp.name , dept.name
    from tb_emp AS emp left join tb_dept AS dept
    on emp.dept_id = dept.id;
    左外连接和右外连接是可以相互替换的,只需要调整连接查询时SQL语句中表的先后顺序就可以了。而我们在日常开发使用时,更偏向于左外连接。

  • 子查询
    SQL语句中嵌套select语句,称为嵌套查询,又称子查询
    SELECT * FROM t1 WHERE column1 = ( SELECT column1 FROM t2 … );
    子查询可以书写的位置
    where之后
    from之后
    select之后

  • 标量子查询(子查询结果返回的是单个值)

查询"教研部"的所有员工信息

可以将需求分解为两步:

  1. 查询 “教研部” 部门ID
  2. 根据 “教研部” 部门ID,查询员工信息

– 1.查询"教研部"部门ID
select id from tb_dept where name = ‘教研部’; #查询结果:2
– 2.根据"教研部"部门ID, 查询员工信息
select * from tb_emp where dept_id = 2;

– 合并出上两条SQL语句
select * from tb_emp where dept_id = (select id from tb_dept where name = ‘教研部’);

查询在 “方东白” 入职之后的员工信息

可以将需求分解为两步:

  1. 查询 方东白 的入职日期
  2. 查询 指定入职日期之后入职的员工信息

– 1.查询"方东白"的入职日期
select entrydate from tb_emp where name = ‘方东白’; #查询结果:2012-11-01
– 2.查询指定入职日期之后入职的员工信息
select * from tb_emp where entrydate > ‘2012-11-01’;

– 合并以上两条SQL语句
select * from tb_emp where entrydate > (select entrydate from tb_emp where name = ‘方东白’);

  • 列子查询
    子查询返回的结果是一列(可以是多行),这种子查询称为列子查询
    in 在指定集合范围内多选一
    not in 不在指定集合范围内
    查询"教研部"和"咨询部"的所有员工信息

分解为以下两步:

  1. 查询 “销售部” 和 “市场部” 的部门ID
  2. 根据部门ID, 查询员工信息

– 1.查询"销售部"和"市场部"的部门ID
select id from tb_dept where name = ‘教研部’ or name = ‘咨询部’; #查询结果:3,2
– 2.根据部门ID, 查询员工信息
select * from tb_emp where dept_id in (3,2);

– 合并以上两条SQL语句
select * from tb_emp where dept_id in (select id from tb_dept where name = ‘教研部’ or name = ‘咨询部’);

  • 行子查询
    子查询返回的结果是一行(可以是多列)
    常用的操作符:= 、<> 、IN 、NOT IN
    查询与"韦一笑"的入职日期及职位都相同的员工信息

可以拆解为两步进行:

  1. 查询 “韦一笑” 的入职日期 及 职位
  2. 查询与"韦一笑"的入职日期及职位相同的员工信息

– 查询"韦一笑"的入职日期 及 职位
select entrydate , job from tb_emp where name = ‘韦一笑’; #查询结果: 2007-01-01 , 2
– 查询与"韦一笑"的入职日期及职位相同的员工信息
select * from tb_emp where (entrydate,job) = (‘2007-01-01’,2);

– 合并以上两条SQL语句
select * from tb_emp where (entrydate,job) = (select entrydate , job from tb_emp where name = ‘韦一笑’);

  • 表子查询
    子查询返回的结果是多行多列,常作为临时表
    查询入职日期是 “2006-01-01” 之后的员工信息 , 及其部门信息

分解为两步执行:

  1. 查询入职日期是 “2006-01-01” 之后的员工信息
  2. 基于查询到的员工信息,在查询对应的部门信息

select * from emp where entrydate > ‘2006-01-01’;

select e.*, d.* from (select * from emp where entrydate > ‘2006-01-01’) e left join dept d on e.dept_id = d.id

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

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

相关文章

SpringBoot 集成分布式任务调度 XXL-JOB【保姆级上手】

文章目录 XXL-JOB 介绍分布式任务调度XXL-JOB 概述 快速入门下载源码初始化调度数据库编译源码调度中心调度中心介绍配置调度中心部署调度中心集群部署调度中心&#xff08;可选&#xff09;Docker 镜像方式搭建调度中心&#xff08;可选&#xff09; 执行器执行器介绍添加依赖…

机器学习-关联规则算法Apriori及编码实现

一、前置知识 在了解关联规则之前首先了解一些相关概念&#xff0c;包含项集、频繁项集、支持度、置信度、提升度等基础概念。假如我们在经营一家商品超市&#xff0c;顾客进行购买商品的订单信息如下&#xff1a; TID ItemsT1 {耳机&#xff0c;背包}T2{背包&#xff0c;手…

外包干了5天,技术退步明显.......

先说一下自己的情况&#xff0c;大专生&#xff0c;18年通过校招进入杭州某软件公司&#xff0c;干了接近4年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落! 而我已经在一个企业干了四年的功能测…

JAVA面试大全之基础篇

目录 1、语法基础 1.1、面向对象特性?​​​​​​​ 1.2、a = a + b 与 a += b 的区别

发掘服务器硬件优势:怎样有效管理、维护、更新

1. 概述 服务器是许多信息技术的核心&#xff0c;通过提供计算和存储资源&#xff0c;以用于企业和机构的数据处理和存储。服务器硬件也是服务器的核心组成部分&#xff0c;在服务器架构和配置中扮演着重要角色。 服务器硬件的优势&#xff1a; - 提供更高的性能和处理能力。…

meanshift论文学习

1. abstract 2. 理论解读 目标函数 然后对(11)求导&#xff0c;求解x&#xff0c;x实际就是求解当图像位置的值&#xff0c;求导之后表示为&#xff1a; 进一步整理得&#xff1a; 上式第二项即为meanshift 进一步整理为 上式表明了均值漂移与核函数之间的关系。 3. 缺点…

AI预测福彩3D第22弹【2024年3月31日预测--第4套算法重新开始计算第8次测试】

昨天周六单位事情比较多&#xff0c;忙了一天&#xff0c;回来比较晚了&#xff0c;实在没有闲暇时间去做预测了&#xff0c;先给各位道个歉。今天上午比较忙&#xff0c;下午有点空&#xff0c;趁这个时间赶紧把预测的结果发出来供大家参考。 今天继续对第4套算法进行测试&…

阿里云的服务码获取的申请按钮怎么是灰色的

您好&#xff0c;您目前已经进入阿里云备案工单服务渠道&#xff0c;很高兴为您服务。工单渠道的服务响应时效为0-90分钟&#xff0c; 如您所遇到的问题比较着急&#xff0c;您可以通过阿里云官网右上角联系我们中的“在线服务”进行咨询&#xff0c;我们会第一时间为您服务。感…

CentOS7 磁盘相关的命令及磁盘重新调整分配

umount 在CentOS 7中&#xff0c;umount是一个常用的命令&#xff0c;用于卸载文件系统。以下是一些常用的umount命令&#xff1a; 卸载指定的文件系统&#xff1a; umount /dev/sdXN 其中&#xff0c;/dev/sdXN是你想要卸载的分区。例如&#xff0c;/dev/sda1。 卸载并…

【MySQL】聊聊全表查询会不会把数据库内存打爆

是实际的开发中&#xff0c;可能因为误操作。可能会执行一个全表扫描的SQL&#xff0c;如果这个表的数据比较大&#xff0c;比如10G&#xff0c;但是数据库内存8G &#xff0c;会不会将这个数据库内存打爆。带着这个问题&#xff0c;我们来深入学习下。其实主要就是一个server层…

Python数据分析七

一、Python之定义列表 当我们在Python中定义一个列表时&#xff0c;可以使用方括号 [] 和逗号 , 来将多个元素放在一起。以下是一个示例代码&#xff1a; # 定义一个空列表 my_list []# 定义一个带有初始元素的列表 my_list [1, 2, 3, 4, 5]# 列表中可以包含不同类型的数据…

每日一题 第五十六期 洛谷 k倍区间

[蓝桥杯 2017 省 B] k 倍区间 题目描述 给定一个长度为 N N N 的数列&#xff0c; A 1 , A 2 , ⋯ A N A_1,A_2, \cdots A_N A1​,A2​,⋯AN​&#xff0c;如果其中一段连续的子序列 A i , A i 1 , ⋯ A j ( i ≤ j ) A_i,A_{i1}, \cdots A_j(i \le j) Ai​,Ai1​,⋯Aj​(…

python-pytorch 常用api打卡0.1.330

python-pytorch 常用api打卡0.1.100 torch.nntorch.nn.Flattentorch.nn.Lineartorch.nn.ReLUtorch.nn Modulemodel.train(True) Tensor操作argmax函数 torch.nn torch.nn.Flatten 维度计数是从0开始m nn.Flatten()默认从1维开始合并合并的维度值&#xff0c;就是这些维度的乘…

python学习20:python中的函数知识点

python中的函数知识点 1.函数中的返回值 什么是函数的返回值&#xff1f;&#xff1a;函数在执行的时候&#xff0c;返回给调用者的结果返回值的应用语法&#xff1a;使用关键词return来返回结果注意&#xff1a;函数体在遇到return后就结束了&#xff0c;所以写在return后的…

KUKA机器人调整示教器灵敏度(校屏)

KUKA机器人KRC4的示教器升级后&#xff0c;示教器屏幕由之前的电阻屏改为电容屏&#xff0c;不仅在外观上有所变化&#xff0c;屏幕校准的方法也有所不同。通过以下方法分别对新旧两款示教器进行屏幕校正&#xff0c;调整示教器屏幕灵敏度。 对新款示教器而言&#xff1a; 一…

Java -- 类加载机制

类加载机制 使用某个类时&#xff0c;如果该类的class文件没有加载到内存时&#xff0c;则系统会通过以下三个步骤来对该类进行初始化.   类的加载&#xff08;Load&#xff09; → 2.类的连接&#xff08;Link&#xff09; → 3.类的初始化&#xff08;Initialize&#xf…

深入理解 MySQL 索引:优化查询性能的关键

在数据库领域中&#xff0c;索引是优化查询性能的关键之一。MySQL 作为一个广泛使用的关系型数据库&#xff0c;其索引的设计和使用对于提高查询效率和加速数据检索非常重要。在本文中&#xff0c;我们将深入探讨 MySQL 索引的原理、类型以及如何在实际应用中优化查询性能。 1…

Python快速入门系列-5(Python标准库与常用模块)

第五章:Python标准库与常用模块 5.1 常用内置模块介绍5.1.1 os模块5.1.2 datetime模块5.1.3 random模块5.2 文件操作与IO处理5.2.1 文件读写5.2.2 文件复制与移动5.2.3 文件遍历与递归操作5.3 正则表达式5.3.1 匹配字符串5.3.2 替换字符串5.3.3 高级匹配结语Python作为一门强大…

工厂方法模式与抽象工厂模式的深度对比

​&#x1f308; 个人主页&#xff1a;danci_ &#x1f525; 系列专栏&#xff1a;《设计模式》 &#x1f4aa;&#x1f3fb; 制定明确可量化的目标&#xff0c;坚持默默的做事。 &#x1f680; 转载自&#xff1a;设计模式深度解析&#xff1a;工厂方法模式与抽象工厂模式的深…

深度学习论文中结构A+B效果很好,怎么讲故事写成一篇优质的论文?

牛牛牛肉饭&#xff1a; AB的故事不一定好讲 但是可以包装成&#xff1a;A族 B族有效成分 C杂质 D微量杂质 我们创新性的提出了全新的算法Pipeline&#xff0c;涵盖ABCD&#xff0c;极大的改进了该领域的算法范式&#xff0c;除此之外我们系统分析了 A以及其相似算法对 新…