MySQL 基础知识(六)之数据查询(一)

目录

1 基本查询

1.1 查询相关列 (select * / 列名)

1.2 别名 (as)

1.3 去重 (distinct)

1.4 对列中的数据进行运算 (+、-、*、/)

2 条件查询 (where)

2.1 等值查询 (=)

2.2 非等值查询 (>、<、>=、<=、!=、><)

2.3 逻辑判断 (and、or、not)

2.4 区间判断 (between and)

2.5 NULL 值判断 (is null、is not null)

2.6 in 运算符

2.7 模糊查询 (like)

3 分支查询

4 排序 (order by)

5 日期和时间函数


1 基本查询

goods 表

drop table if exists goods;
create table goods (
id int(10) primary key auto_increment,
name varchar(14),
netprice float(7,2),
saleprice float(7,2),
weight float(7,2),
stockdate date
)charset=utf8; 

#单条插入
insert into goods(name,netprice, saleprice, weight, stockdate) values('香蕉', 2.5, 3.8, 24, '2024-02-13');

#多条插入
insert into goods(name,netprice, saleprice, weight, stockdate) values
('苹果', 4.5, 7.2, 15, '2024-02-12'),
('苹果', 4.5, 7.5, 65, '2024-02-14'),
('橘子', 3.2, 4.5, 52, str_to_date('02-12-2024', '%m-%d-%Y')),
('橘子', 2.8, 4.5, 76, '2024-02-13'),
('橘子', 3.1, 5.2, 63, '2024-02-14'),
('葡萄', 2.1, 4.7, 26, str_to_date('2024/02/14', '%Y/%m/%d'));

1.1 查询相关列 (select * / 列名)

生产环境下,优先使用列名查询。* 的方式虽然看起来便捷,但实际上需要转换成全列名,效率低,可读性差

select * from goods;
select id, name, stockdate from goods;

   

关键字顺序

select

        ...

from

        ...

以上语句执行顺序:

  1. from
  2. select

1.2 别名 (as)

 通过 as 可以对列名取别名,as 可以省略(列名和别名之间用空格隔开)

select id as '商品id', name as '商品名', netprice '进价', saleprice '售价' from goods;

1.3 去重 (distinct)

 通过 distinct 将查询结果中的重复行去除

select name from goods;
select distinct name from goods;

 

1.4 对列中的数据进行运算 (+、-、*、/)

 可以对列中的数据进行加 +、减 -、乘 *、除 /

select id '商品id', name '商品名', (saleprice - netprice) * weight as '利润' from goods; 

2 条件查询 (where)

通过 where 进行条件查询

关键字顺序

select

        ...

from

        ...

where

        ...

以上语句执行顺序:

  1. from
  2. where
  3. select

2.1 等值查询 (=)

select * from goods where name = '苹果';

2.2 非等值查询 (>、<、>=、<=、!=、><)

# 从商品中选择 weight > 52 的商品
select id, name, netprice, saleprice, weight from goods where weight > 52;

# 从商品中选择 weight < 52 的商品
select id, name, netprice, saleprice, weight from goods where weight < 52;

# 从商品中选择 weight >= 52 的商品
select id, name, netprice, saleprice, weight from goods where weight >= 52;

# 从商品中选择 weight <= 52 的商品
select id, name, netprice, saleprice, weight from goods where weight <= 52;

# 从商品中选择 weight != 52 的商品,此外 != 还可以这样用,如 name != '苹果'
select id, name, netprice, saleprice, weight from goods where weight != 52;

# 从商品中选择 weight <> 52 的商品,<> 等价于 !=
select id, name, netprice, saleprice, weight from goods where weight <> 52;

 

2.3 逻辑判断 (and、or、not)

# 选择 weight > 52 且 name != '苹果' 的商品
select id, name, netprice, saleprice, weight from goods where weight > 52 and name != '苹果';

# 选择 weight > 52 或 not name = '苹果' 的商品(not name = '苹果' 等价于 name != '苹果')
select id, name, netprice, saleprice, weight from goods where weight > 52 or not name = '苹果';

2.4 区间判断 (between and)

# 选择 24 <=  weight <= 50 的商品
select id, name, netprice, saleprice, weight from goods where weight between 24 and 50;

2.5 NULL 值判断 (is null、is not null)

# 查询表 goods 中 weight 为 null 的商品
select * from goods where weight is null;

# 查询表 goods 中 weight 不为 null 的商品
select * from goods where weight is not null;

2.6 in 运算符

  • in 运算符语法:
    • where 列名 in (value1, value2, ...)
    • where 列名 not in (value1, value2, ...)
    • 只要列值在列表项 (value1, value2, ...) 中,则该行符合条件
  • in 列表项不仅支持数字,也支持字符甚至时间日期类型等,并且可以将这些不同类型的数据项混合排列而无须跟 column(列) 的类型保持一致,如 in (1, 2,'str')
  • in 可以和 and、or、>、<= 等运算符结合使用
  • in 列表项可以是子查询
  • 如果 in 的列表项是确定的,那么可以用多个 or 来代替。一般认为,如果是对索引字段进行操作,使用 or 效率高于 in,但对于列表项不确定的时候(如需要子查询得到结果),就必须使用 in 运算符。另外,对于子查询表数据小于主查询的时候,也是适用 in 运算符的
select id, name, netprice, saleprice from goods where name in ('苹果', '香蕉');

2.7 模糊查询 (like)

  • “_” 表示单个任意字符
  • “%” 表示任意个任意字符( 0 ~ n 个任意字符)
# 查询表 goods 中 stockdate 为 '2024-02-x4' 的商品
select id, name, stockdate from goods where stockdate like '2024-02-_4';

# 查询表 goods 中 saleprice 为 7.xx 的商品
select id, name, saleprice from goods where saleprice like '7.%';

# 查询表 goods 中 name 不为 '苹x' 的商品
select id, name stockdate from goods where name not like '苹_';

3 分支查询

分支查询语法:

case

        when 条件1 then 结果1

        when 条件2 then 结果2

        ...

        else 结果n

end

select id, name, stockdate,
    case
        when stockdate = '2024-02-12' then '前天'
        when stockdate = '2024-02-13' then '昨天'
        when stockdate = '2024-02-14' then '今天'
        else '不知道'
    end as time
from goods;

4 排序 (order by)

order by 列名 asc / desc;

asc 表示升序,desc 表示降序,默认是升序

关键字顺序

select

        ...

from

        ...

where

        ...

order by

        ...

以上语句执行顺序:

  1. from
  2. where
  3. select
  4. order by
# 按照 weight 重量升序
select id, name, netprice, saleprice, weight from goods order by weight;
# 按照 weight 重量降序
select id, name, netprice, saleprice, weight from goods order by weight desc;
先按照 netprice 进价降序,如果 netprice 相等,则按照 id 降序
select id, name, netprice, saleprice, weight from goods order by netprice desc, id asc;

5 日期和时间函数

时间函数描述
sysdate()获得当前系统时间(年、月、日、时、分、秒)
curdate()获得当前日期
curtime()获得当前时间
week(date)获得指定日期是一年中的第几周
year(date)获得指定日期的年份
month(date)获得指定日期的月份
day(date)获得指定日期是月份的第几天
hour(date)获得指定时间的小时值
minute(date)获得指定时间的分钟值
second(date)获得指定时间的秒值
datediff(enddate,startdate)

获得两个时间相隔的天数 enddate - startdate

注意和 SQL Server 中的 datediff(datepart,startdate,enddate) 不同

adddate(date,n)在指定日期后面加 n 天
str_to_date(str,fmt)将不同时间格式的字符串转为的特定格式的日期  ('%Y-%m-%d')
date_format(date,fmt)将时间转为不同时间格式的字符串

时间格式描述
%Y年,4 位
%y年,2 位
%X年,其中的星期日是周的第一天,4 位,与 %V 使用
%x年,其中的星期一是周的第一天,4 位,与 %v 使用
%b缩写月名
%c

月,数值

%M月名
%m

月,数值(00-12)

%j年的天 (001-366)
%D带有英文前缀的月中的天
%d月的天,数值(00-31)
%e

月的天,数值(0-31)

%U周 (00-53) ,星期日是一周的第一天
%u周 (00-53) ,星期一是一周的第一天
%V周 (01-53) ,星期日是一周的第一天,与 %X 使用
%v

周 (01-53) ,星期一是一周的第一天,与 %x 使用

%w

周的天 (0=星期日, 6=星期六)

%a缩写星期名
%W星期名
%T

时间,24-小时 (hh:mm:ss)

%r

时间,12-小时(hh:mm:ss AM 或 PM)

%pAM 或 PM
%H小时 (00-23)
%h小时 (01-12)
%I小时 (01-12)
%k小时 (0-23)
%l小时 (1-12)
%i分钟,数值(00-59)
%S秒(00-59)
%s秒(00-59)
%f微秒
# 获得当前系统时间、当前日期、当前时间
select sysdate(), curdate(), curtime();

# 获得指定日期是一年中的第几周、指定日期的年份、月份、指定日期是月份的第几天
select week('2024-02-14') week, year('2024-02-14') year, month('2024-02-14') month, day('2024-02-14') day;

# 获得指定时间的小时值、分钟值、秒值
select hour('16:33:24'),minute('16:33:24'), second('16:33:24');

# 获得两个时间之间相隔的天数,只计算日期,这里是2024-03-02 减去 2024-02-29 得到两天
select datediff('2024-03-02 08:00:00','2024-02-29 10:00:00') day;

# 将不同时间格式的字符串转为的特定格式的日期
select str_to_date('2024/02-13 13:4356','%Y/%m-%d %H:%i%s');

# 将时间转为不同时间格式的字符串
select date_format(sysdate(), '%Y/%m/%d %H:%i:%s');

# 在 '2024-02-28 23:59:59' 加 1 / 2 天
select adddate('2024-02-28 23:59:59',1);
select adddate('2024-02-28 23:59:59',2);

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

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

相关文章

Shell 学习笔记(一)-Shell脚本编程简介

一 什么是shell&#xff1f; shell是一个用 C 语言编写的程序&#xff0c;它是用户使用 Linux 的桥梁。Shell 既是一种命令语言&#xff0c;又是一种程序设计语言。 Shell 是指一种应用程序&#xff0c;这个应用程序提供了一个界面&#xff0c;用户通过这个界面访问操作系统内…

rocketMQ下载、安装及配置

topic主题 - 里边存在多个队列&#xff08;队列是真实存在的&#xff09; rocketMQ安装及配置 一、官网下载 windows和linux系统版本都一样。Binary 下载 下载 | RocketMQ (apache.org) 二、修改运行内存及broker.conf、配置环境变量 1、修改根目录->bin目录下runserve…

ubuntu22.04@laptop OpenCV Get Started: 010_blob_detection

ubuntu22.04laptop OpenCV Get Started: 010_blob_detection 1. 源由2. blob应用Demo2.1 C应用Demo2.2 Python应用Demo 3. 重点分析3.1 Threshold3.2 Area3.3 Circularity3.4 Convexity3.5 Inertia Ratio 4. 总结5. 参考资料6. 补充 1. 源由 Blob是图像中的一组连接像素&#…

猫头虎分享已解决Bug || 代码部署失败(Code Deployment Failure):DeploymentError, FailedRelease

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通鸿蒙》 …

点云旋转处理

实现代码为&#xff1a; //以中心化点进行旋转double theta atan(maindirection.a);//计算的是弧度单位for (int i 0; i < origipts.size(); i){pcl::PointXYZ tempone;tempone.x aftercenerlizepts[i].x*cos(theta) aftercenerlizepts[i].y*sin(theta) center.x;temp…

SPFA最短路

文章目录 从Bellman-Ford开始核心思想模拟算法执行过程时间复杂度模板 spfaspfa优化的思想模板 从Bellman-Ford开始 对于所有边权都大于等于0的图&#xff0c;任意两个顶点之间的最短路&#xff0c;显然不会经过重复的顶点或者边。也就是说任意一条最短路经过的定点数不会超过…

动态内存管理:new和delete的底层探索

之前我们在C语言上是学过malloc和calloc还要realloc等函数来在堆上获取相应的内存&#xff0c;但是这些函数是存在缺陷的&#xff0c;今天引入对new和delete的学习&#xff0c;来了解new和delete的底层实现。 首先就是在C中我们为什么要对内存进行区域的分块&#xff1f; 答案…

MyBatisPlus基础操作之增删改查

目录 一、基本使用 1.1 插入数据 1.2 删除操作 1.3 更新操作 二、条件构造器Wrapper 2.1 常用AbstractWrapper方法 2.1.1 示例一 2.2.2 示例二 2.2.3 示例三 2.2 常用QueryWrapper方法 2.2.1 示例一 2.2.2 示例二 2.2.3 示例三&#xff08;常用&#xff09; 2.3 常…

攻防演练后的一点随记

攻防演练 攻防演练算是告一段落了&#xff0c;各位红队和蓝队的兄弟们都辛苦了&#xff0c;写一点随记&#xff0c;供大家参考。 记得第一次参加攻防演练是在2018年&#xff0c;当时被派到北京&#xff0c;在某个政企单位做攻防演练支撑工作&#xff0c;然后2020年又被紧急派到…

【STM32 CubeMX】学STM必会的数据结构——环形缓冲区

文章目录 前言一、环形缓冲区是什么二、实现环形缓冲区实现分析2.1 环形缓冲区初始化2.2 写buf2.3 读buf2.4 测试 三、代码总况总结 前言 在嵌入式系统开发中&#xff0c;经常需要处理数据的缓存和传输&#xff0c;而环形缓冲区是一种常见且有效的数据结构&#xff0c;特别适用…

提前部署游戏业务防护,为何如此重要?

现在做网络游戏的企业都知道服务器的安全对于我们来说很重要&#xff01;互联网上面的DDoS攻击和CC攻击等等无处不在&#xff0c;而游戏服务器对服务器的防御能力和处理能力要求更高&#xff0c;普通的服务器则是比较注重各方面能力的均衡。 随着游戏行业的壮大&#xff0c;网络…

java 宠物在线商城系统Myeclipse开发mysql数据库web结构jsp编程servlet计算机网页项目

一、源码特点 java 宠物在线商城系统是一套完善的java web信息管理系统 servletdaobean mvc模式&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S 模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开发&…

尚硅谷最新Node.js 学习笔记(三)

目录 六、Node.js 模块化 6.1、介绍 什么是模块化与模块&#xff1f; 什么是模块化项目&#xff1f; 模块化好处 6.2、模块暴露数据 模块初体验 暴露数据 6.3、导入&#xff08;引入&#xff09;模块 6.4、导入模块的基本流程 6.5、CommonJS规范 七、包管理工具 7…

站在C/C++的肩膀速通Java面向对象

默认学过C或C&#xff0c;对变量、表达式、选择、循环都会。 运行特征 解释型语言&#xff08;JavaScript、Python等&#xff09; 源文件-(平台专属解释器)->解释器中执行编译型语言&#xff08;C、Go等&#xff09; 源文件-(平台编译器)->平台可执行文件Java 源文件-(…

算法详解:滑动窗口-- 最大连续1的个数 III

题目来源:力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 本期讲解滑动窗口经典例题,我会从三个点开始讲解题目1.题目解析2.算法原理 3.编写代码 1.题目解析 这道题目理解起来还是比较简单的,我们简单分析一下,也就是给定一个数组,数组是由1和0组成…

AtCoder Beginner Contest 335 (Sponsored by Mynavi) --- F - Hop Sugoroku -- 题解

目录 F - Hop Sugoroku 题目大意&#xff1a; 思路解析&#xff1a; 代码实现&#xff1a; F - Hop Sugoroku 题目大意&#xff1a; 思路解析&#xff1a; 容易想到这是一个dp题&#xff0c;然后初始转移方程为&#xff1a; 如果当a[i] 较大时&#xff0c;时间复杂度为 O(N…

【AI视野·今日NLP 自然语言处理论文速览 第七十九期】Thu, 18 Jan 2024

AI视野今日CS.NLP 自然语言处理论文速览 Thu, 18 Jan 2024 Totally 35 papers &#x1f449;上期速览✈更多精彩请移步主页 Daily Computation and Language Papers Deciphering Textual Authenticity: A Generalized Strategy through the Lens of Large Language Semantics …

MySQL数据库-MVCC多版本并发控制

mvcc,多版本并发控制&#xff08;Multi-Version Concurrency Control&#xff09;,是一种用于数据库管理系统中的并发控制方法. 在传统的并发控制方法中,如锁定机制,当一个事务修改数据时,会对相关的数据对象进行锁定,其他事务需要等待该锁释放才能进行操作。这种方法存在着事…

操作系统-408

一、操作系统概述 1、定义 负责协调软件和硬件的计算机资源的工作为上层应用提供简易的服务操作系统是系统软件 2、功能&#xff1a; 操作系统是系统资源的管理者 处理机管理存储器管理文件管理设备管理向上层提供方便易用的服务 命令接口程序接口对硬件机器的扩展 3、特征…

详解tomcat中的jmx监控

目录 1.概述 2.如何开启tomcat的JMX 3.tomcat如何实现JMX的源码分析 1.概述 本文是博主JAVA监控技术系列文章的第二篇&#xff0c;前面一篇文章中我们介绍了JAVA监控技术的基石——jmx&#xff1a; 【JMX】JAVA监控的基石-CSDN博客 本文我们将从使用和源码实现两个方面聊…