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,casewhen 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);

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

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

相关文章

源码推荐:hello-algo @ github

github https://github.com/krahets/hello-algo 本项目旨在创建一本开源、免费、对新手友好的数据结构与算法入门教程。全书采用动画图解&#xff0c;结构化地讲解数据结构与算法知识&#xff0c;内容清晰易懂&#xff0c;学习曲线平滑。算法源代码皆可一键运行&#xff0c;支…

超越Swagger和Postman:使用Visual Studio的.http文件轻松调试Web API

在软件开发过程中&#xff0c;调试Web API是至关重要的环节。传统上&#xff0c;开发人员经常使用Swagger或Postman等工具来测试API。然而&#xff0c;Visual Studio提供了一项内置功能&#xff0c;使用.http文件可以更快速、简便地调试Web API。本文将介绍如何使用Visual Stud…

Node.js开发-包管理工具

包管理工具 1) 概念2) npm3) 配置命令别名 1) 概念 管理『包』的应用软件&#xff0c;可以对「包」进行 下载安装 &#xff0c; 更新 &#xff0c; 删除 &#xff0c; 上传 等操作 借助包管理工具&#xff0c;可以快速开发项目&#xff0c;提升开发效率 下面列举了前端常用的…

上位机图像处理和嵌入式模块部署(借鉴与学习)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 对于很多学院派的同学来说&#xff0c;他们对市场的感觉一般是比较弱的。如果写一个软件的话&#xff0c;或者说开发一个项目的话&#xff0c;他们…

(一)【Jmeter】JDK及Jmeter的安装部署及简单配置

JDK的安装和环境变量配置 对于Linux、Mac和Windows系统&#xff0c;JDK的安装和环境变量配置方法略有不同。以下是针对这三种系统的详细步骤&#xff1a; 对于Linux系统&#xff1a; 下载适合Linux系统的JDK安装包&#xff0c;可以选择32位或64位的版本。 将JDK的安装包放置…

六、Java高级-泛型(二)

2、泛型的实现 2.1 泛型的使用 1、类或接口后面→泛型类/泛型接口&#xff08;参数化的类型&#xff09; 当类中的某个成员变量不确定时&#xff0c;可以考虑在类的上面声明泛型&#xff1b;当类/接口中某个非静态方法的形参或返回值不确定时。当类或接口中的某个/某些非静态…

VueCLI核心知识3:全局事件总线、消息订阅与发布

这两种方式都可以实现任意两个组件之间的通信 1 全局事件总线 1.安装全局事件总线 import Vue from vue import App from ./App.vueVue.config.productionTip false/* 1.第一种写法 */ // const Demo Vue.extend({}) // const d new Demo()// Vue.prototype.x d // 把Dem…

【算法】树状数组和线段树

文章目录 一、树状数组二、线段树 一、树状数组 O ( l o g n ) O(logn) O(logn) &#xff1a;单点修改、区间查询 与前缀和的区别&#xff1a; 前缀和是离线的&#xff0c;每次动态修改原数组某个元素&#xff0c;都需要重新求一遍前缀和&#xff0c;因此单点修改是 O ( n )…

RK3568平台开发系列讲解(实验篇)用户空间和内核空间数据交换

🚀返回专栏总目录 文章目录 一、用户空间和内核空间数据交换二、实验驱动代码三、应用测试代码沉淀、分享、成长,让自己和他人都能有所收获!😄 一、用户空间和内核空间数据交换 内核空间和用户空间的内存是不能互相访问的。但是很多应用程序都需要和内核进行数据的交换,…

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

AI视野今日CS.NLP 自然语言处理论文速览 Wed, 17 Jan 2024 (showing first 100 of 163 entries) Totally 100 papers &#x1f449;上期速览✈更多精彩请移步主页 Daily Computation and Language Papers Deductive Closure Training of Language Models for Coherence, Accur…

Mamba-UNet:用于医学图像分割的类似UNet的纯视觉Mamba网络

文章目录 摘要1、引言2、方法2.1、架构概述2.2、VSS 块2.3、编码器2.4、解码器2.5、瓶颈和跳跃连接3、实验与结果3.1、数据集3.2、实现细节3.3、基准方法3.4、评估指标3.5、定性结果3.6、定量结果4、结论摘要 在医学图像分析的最新进展中,卷积神

【手写数据库toadb】数据字典缓存的实现方法和接口分享,面向对象设计思想,接口单一化

412数据字典的缓存 ​专栏内容: 手写数据库toadb 本专栏主要介绍如何从零开发,开发的步骤,以及开发过程中的涉及的原理,遇到的问题等,让大家能跟上并且可以一起开发,让每个需要的人成为参与者。 本专栏会定期更新,对应的代码也会定期更新,每个阶段的代码会打上tag,方便…

优化策略模式,提高账薄显示的灵活性和扩展性

接着上一篇文章&#xff0c;账薄显示出来之后&#xff0c;为了提高软件的可扩展性和灵活性&#xff0c;我们应用策略设计模式。这不仅仅是为了提高代码的维护性&#xff0c;而是因为明细分类账账薄显示的后面有金额分析这个功能&#xff0c;从数据库后台分析及结合Java语言特性…

2023年中国网络安全产业发展态势

文章目录 前言一、需求依然增长,市场竞争加剧二、产业增速放缓,融资市场降温三、产业结构变革,优化整合途径(一)电信运营商快速入场,互联网厂商加速网络安全领域布局。(二)网络安全商业模式在发生变化,网络安全运营服务、托管服务模式正在逐渐被客户认同。(三)国内安…

gorm day7

gorm day7 gorm Belongs To关系gorm Has One关系 gorm Belongs To关系 在看文档之前先进行一些基本概念的学习&#xff1a; 什么是主键&#xff1f;&#xff08;Primary Key) 主键是一个表中的特定列&#xff08;或一组列&#xff09;&#xff0c;用来唯一标识表中的每一行记…

每日一个脚本之一键部署Docker

每日一个shell脚本之一键部署Docker 源码参上 #!/usr/bin/bash # **************************************# CSDN: M乔木 # qq邮箱: 2776617348qq.com # 解释器: 这是一个shell脚本 # *************************…

1.合唱队形

Problem: 1.合唱队形 文章目录 思路解题方法复杂度Code 思路 这是一个动态规划问题。我们可以通过两次动态规划来解决这个问题。首先&#xff0c;我们从左到右进行动态规划&#xff0c;计算出每个位置的最长递增子序列长度。然后&#xff0c;我们从右到左进行动态规划&#xff…

2024幻兽帕鲁服务器创建教程_阿里PK腾讯超简单

幻兽帕鲁官方服务器不稳定&#xff1f;自己搭建幻兽帕鲁服务器&#xff0c;低延迟、稳定不卡&#xff0c;目前阿里云和腾讯云均推出幻兽帕鲁专用服务器&#xff0c;腾讯云直接提供幻兽帕鲁镜像系统&#xff0c;阿里云通过计算巢服务&#xff0c;均可以一键部署&#xff0c;鼠标…

vscode 提取扩展时出错。XHR failed

检查 vscode 设置中的代理服务器&#xff0c;位置如下图 清空 vocode 中的 Proxy&#xff0c;我黄线框的部分&#xff0c;内容清空。 检查电脑系统环境变量&#xff0c;是否设置了 http_proxy 和 https_proxy&#xff0c;如果有设置&#xff0c;则删除这两项&#xff0c;下载完…

leetcode 102.二叉树的层序遍历

这道题讲的就是对于树的数据结构的考察&#xff0c;这里用了一个比较常用的容器就是队列。 思路&#xff1a;首先我们知道&#xff0c;层序遍历也就是广度优先遍历的一种变形而已&#xff0c;既然我们知道广度优先搜索&#xff0c;就应该知道用队列进行辅助输出。 当根节点是…