MySQL数据库之基础查询语句(DQL数据查询语句)

2023-10-27

目录

一、查询条件

(1)where子句

(2)like模糊查询

二、查询结果处理

(1)设置查询列

(2)列的计算

(3)as字段取别名

(4)distinct 消除重复⾏

(5)函数

(6)分组查询group by

(7)排序 - order by

(8)分⻚查询 - limit


数据库的基础查询语法:从数据表(单个表/多个表)中提取出满足特定条件的语句为查询语句。

基本的查询语法如下:

select 结果显示语句 from 需要查询的表 where 查询条件语句 结果处理语句;

基本的查询语句是通过select ...from .... where ....的形式呈现。本次文章主要讲述的是结果显示语句,查询条件语句,结果处理语句。

一、查询条件

(1)where子句

where子句:在删除、修改及查询的语句后都可以添加where⼦句(条件),⽤于筛选满⾜特定的添加的数据进⾏删除、修改和查询操作。因此,在数据库的所有操作中where子句是重中之中。

#删除
delete from tableName where conditions;
#修改更新
update tabeName set ... where conditions;
#查询
select .... from tableName where conditions;

where后接赛选条件语句,条件语句是通过条件关系运算符和逻辑关系运算符进行的条件赛选。

条件关系运算符:

## = 等于。
select * from stus where stu_num = '20210101';

## != <> 不等于。
select * from stus where stu_num != '20210101';
select * from stus where stu_num <> '20210101';

## > ⼤于。
select * from stus where stu_age>18;

## < ⼩于。
select * from stus where stu_age<20;

## >= ⼤于等于。
select * from stus where stu_age>=20;

## <= ⼩于等于。
select * from stus where stu_age<=20;

## between and 区间查询 between v1 and v2 [v1,v2],含有左右数值。
select * from stus where stu_age between 18 and 20;

逻辑关系运算符:

## and 并且 筛选多个条件同时满⾜的记录
select * from stus where stu_gender='⼥' and stu_age<21;

## or 或者 筛选多个条件中⾄少满⾜⼀个条件的记录
select * from stus where stu_gender='⼥' or stu_age<21;

## not 取反
select * from stus where stu_age not between 18 and 20;

(2)like模糊查询

where后除了简单的关系运算符外,还可以跟like+模糊匹配符进行模糊匹配。除此之外还有正则表达式的方法进行模糊匹配,在后续的学习中我们会单独提及正则表达式的用法。
基本语法:

select * from tableName where 列名 like 'reg';

LIKE 关键字支持百分号“%”和下划线“_”通配符。

“%”是 MySQL 中最常用的通配符,它能代表任何长度的字符串,字符串的长度可以为 0。例如,a%b表示以字母 a 开头,以字母 b 结尾的任意长度的字符串。该字符串可以代表 ab、acb、accb、accrb 等字符串。

“_”只能代表单个字符,字符的长度不能为 0。例如,a_b可以代表 acb、adb、aub 等字符串。

总结如下:

% 表示任意多个字符 【 %o% 包含字⺟o】
_ 表示任意⼀个字符 【 _o% 第⼆个字⺟为o】
示例:

# 查询学⽣姓名包含字⺟o的学⽣信息
select * from stus where stu_name like '%o%';

# 查询学⽣姓名第⼀个字为`张`的学⽣信息
select * from stus where stu_name like '张%';

# 查询学⽣姓名最后⼀个字⺟为o的学⽣信息
select * from stus where stu_name like '%o';

# 查询学⽣姓名中第⼆个字⺟为o的学⽣信息
select * from stus where stu_name like '_o%';

二、查询结果处理

查询结果处理分为两个部分,一是在select之后,from语句之前的结果显示语句,同时在这儿也可以进行结果的处理,运用聚合函数进行计算,二是在where条件语句之后,对结果进行排序、分组。

(1)设置查询列

设置查询列,是在select之后,from之前设置你所需要显示结果的列。columname是列名,列名个数就是显示的个数,若填入字符*,则显示查询结果的全部列的对应数据。

select columName1,columnName2,... from stus where stu_age>20;

(2)列的计算

通过与计算列相匹配的数据类型的数据通过数学运算符进行计算称为列的计算,如法格式如下:

## 出⽣年份 = 当前年份 - 年龄
select stu_name,2021-stu_age from stus;

(3)as字段取别名

我们通过查询语句得到的最后显示结果列名往往是原来的列名,当我们需要对生成的结果列名进行修改,得到我们想要的结果表时,我们可以通过as进行赋名,当然除了as的方法,我们还可以通过空格+别名的方式进行重新命名。当然这个方法在我们后面的多表联查时表名的赋予也同样适用。

#我们可以为查询结果的列名 去⼀个语义性更强的别名 (如下案例中 as 关键字也可以省
略)
select stu_name,2021-stu_age as stu_birth_year from stus;

select stu_name as 姓名,2021-stu_age as 出⽣年份 from stus;

(4)distinct 消除重复⾏

我们经常在表里查询信息时会不可避免的出现重复值,列如在查询年龄时会出现年龄的人,我们想要得到 表的年龄值时就可以通过distinct语句将结果进行筛查。

select distinct stu_age from stus;

(5)函数

①聚合函数

SQL中提供了⼀些可以对查询的记录的列进⾏计算的函数——聚合函数
count:用于统计计数

# 统计学⽣表中学⽣总数
select count(stu_num) from stus;

# 统计学⽣表中性别为男的学⽣总数
select count(stu_num) from stus where stu_gender='男';

max:用于求出数值类型的最大值

select max(stu_age) from stus;

min:用于求出数值类型的最小值

select min(stu_age) from stus where stu_gender='⼥';

sum:用于数值类型的数据求和

# 计算所有性别为男的学⽣的年龄的综合
select sum(stu_age) from stus where stu_gender='男';

avg:用于数值类型的数据求平均数

select avg(stu_age) from stus where stu_gender='男';

②⽇期函数
当我们向⽇期类型的列添加数据时,可以通过字符串类型赋值(字符串的格式必须为
yyyy-MM-dd hh:mm:ss)
如果我们想要获取当前系统时间添加到⽇期类型的列,可以使⽤ now() 或者 sysdate()
对于一个数据库系统,操作人员往数据库中插入数据,删除数据、更新数据时,我们都希望能知道数据修改的时间,数据操作人是谁,因此日期函数就可以很好的解决这个问题,直接可以获取当前系统的时间。

# 通过now()获取当前时间
insert into
stus(stu_num,stu_name,stu_gender,stu_age,stu_tel,stu_qq,stu_enterence)
values('20210109','张⼩四','⼥',20,'13434343355','1233333',now());

# 通过sysdate()获取当前时间
insert into
stus(stu_num,stu_name,stu_gender,stu_age,stu_tel,stu_qq,stu_enterence)
values('20210110','李雷','男',16,'13434343366','123333344',sysdate());

③字符串函数
通过SQL指令对字符串进⾏处理。

concat()拼接函数

# concat(colnum1,colunm2,...) 拼接多列

select concat(stu_name,'-',stu_gender) from stus;

 upper()字段值换成大写

# upper(column) 将字段的值转换成⼤写
select upper(stu_name) from stus;

 upper()字段值换成小写

# lower(column) 将指定列的值转换成⼩写
select lower(stu_name) from stus;

substring()定列中截取部分显示

# substring(column,start,len) 从指定列中截取部分显示 start从1开始
select stu_name,substring(stu_tel,8,4) from stus;

(6)分组查询group by

分组:就是将数据表中的记录按照指定的类进⾏分组
在MySQL数据库查询语句(DQL)中对结果集的分组、赛选、排序都有严格的顺序要求,只能按照以下顺序来写,调换位置会报错。

select 分组字段/聚合函数
from 表名
[where 条件]
group by 分组列名 
[having 条件]
[order by 排序字段]

注意:

①select 后使⽤ * 显示对查询的结果进⾏分组之后,显示每组的第⼀条记录(这种显示通
常是⽆意义的)
②select 后通常显示分组字段和聚合函数(对分组后的数据进⾏统计、求和、平均值等)
语句执⾏属性: 先根据where条件从数据库查询记录 ! group by对查询记录进⾏分
组 #执⾏having对分组后的数据进⾏筛选
 

# 先对查询的学⽣信息按性别进⾏分组(分成了男、⼥两组),然后再分别统计每组学⽣的个数
select stu_gender,count(stu_num) from stus group by stu_gender;

 

# 查询所有学⽣,按年龄进⾏分组,然后分别统计每组的⼈数,再筛选当前组⼈数>1的组,再按
年龄升序显示出来
select stu_age,count(stu_num)
from stus
group by stu_age
having count(stu_num)>1
order by stu_age;

 

(7)排序 - order by

将查询到的满⾜条件的记录按照指定的列的值升序/降序排列,排序可以分为单字段排序和多字段排序。
排序的基础语法如下:

select * from tableName where conditions order by columnName asc|desc;

order by columnName 表示将查询结果按照指定的列排序
asc 按照指定的列升序(默认)
desc 按照指定的列降序

# 单字段排序
select * from stus where stu_age>15 order by stu_gender desc;

# 多字段排序 : 先满⾜第⼀个排序规则,当第⼀个排序的列的值相同时再按照第⼆个列的规则
排序
select * from stus where stu_age>15 order by stu_gender asc,stu_age desc;

 

(8)分⻚查询 - limit

当数据表中的记录⽐较多的时候,如果⼀次性全部查询出来显示给⽤户,⽤户的可读性/
体验性就不太好,因此我们可以将这些数据分⻚进⾏展示。

select ...
from ...
where ...
limit num1,num2
#①param1 int , 表示获取查询语句的结果中的第⼀条数据的索引(索引从0开始)
#②param2 int, 表示获取的查询记录的条数(如果剩下的数据条数<param2,则返回剩下
的所有记录)

例题:

对数据表中的学⽣信息进⾏分⻚显示,总共有10条数据,我们每⻚显示3条
 

# 查询第⼀⻚:
select * from stus [where ...] limit 0,3; 

# 查询第⼆⻚:
select * from stus [where ...] limit 3,3;

# 查询第三⻚:
select * from stus [where ...] limit 6,3;

# 如果在⼀张数据表中:
# pageNum表示查询的⻚码
# pageSize表示每⻚显示的条数
# 通⽤分⻚语句如下:
select * from <tableName> [where ...] limit (pageNum-
1)*pageSize,pageSize;

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MySQL数据库之基础查询语句(DQL数据查询语句) 的相关文章

  • 显示表 FULLTEXT 索引列

    我希望运行一个查询 该查询将返回表中全文索引的列列表 该表采用 MyISAM 格式 我将使用 php 来构建查询 理想情况下 我会运行查询 它会返回信息 以便我可以构造一个以逗号分隔的列字符串 例如 名 姓 电子邮箱 这在 MySQL 中可
  • Mysql innoDB 不断崩溃[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我的数据库 mysql 服务器不断崩溃 重新启动 我不知道该怎么办 我不断在 dbname org err 文件中收到以下内容 13120
  • 使用 Spark DataFrame 获取组后所有组的 TopN

    我有一个 Spark SQL DataFrame user1 item1 rating1 user1 item2 rating2 user1 item3 rating3 user2 item1 rating4 如何按用户分组然后返回TopN
  • 使用 MS Access 获取行的第一个实例

    EDITED 我有这个查询 我想SELECT表中记录的第一个实例petTable SELECT id pet ID FIRST petName First Description FROM petTable GROUP BY pet ID
  • 获取家庭成员

    假设以下家庭 其构建架构是 create table PersonConn child int parent int insert into PersonConn values 1 2 insert into PersonConn valu
  • 查询中列的顺序重要吗?

    当从 MySQL 表中选择列时 与表中的顺序相比 选择列的顺序是否会影响性能 不考虑可能覆盖列的索引 例如 您有一个包含行 uid name bday 的表 并且有以下查询 SELECT uid name bday FROM table M
  • SPARK SQL - 当时的情况

    我是 SPARK SQL 的新手 SPARK SQL 中是否有相当于 CASE WHEN CONDITION THEN 0 ELSE 1 END 的内容 select case when 1 1 then 1 else 0 end from
  • 根据表sql中的行替换字符串中的字符

    我需要用一些映射的字符替换字符串中的字符列表 我有一个表 dbo CharacterMappings 有 2 列 CharacterToFilter 和 ReplacementCharacter 假设这个表中有3条记录 Filter Rep
  • 连接两个表的查询的 SQL Server“FOR XML”输出

    我是 SQL Server 中 FOR XML 功能的新手 我正在使用 SQL Server 2012 我有两个表 Word 和 Word Expansion 样本数据 表 字 WordOID Word 1 PIPE 2 WIRE 表 Wo
  • 截断 Mysql 表 Cron 作业?

    我在如何使用 cron 作业截断 Mysql 表时遇到了一些麻烦 无论我尝试什么 我似乎都无法让数据库清除表格 感谢您的帮助 mysql uderp example pexample hlocalhost Dexample e TRUNCA
  • MySQL Connector/C++ 库链接错误问题

    PROBLEM 好吧 我一直在尝试遵循 MySQL Forge Wiki 和其他一些网站上的示例代码 这些网站提供了有关如何获得简单数据库连接的教程 但由于某种原因 我的项目总是因链接错误而失败 我可以我自己不明白为什么或如何解决它 我仍在
  • 更改迁移中的自动​​增量值(PostgreSQL 和 SQLite3)

    我有一个托管在 Heroku 上的项目 想要更改表的自动增量起始值 我在本地使用 SQLite3 Heroku 使用 PostgreSQL 这是我在迁移中所拥有的 class CreateMytable lt ActiveRecord Mi
  • 使用 JSON 参数的 Postgres 批量 INSERT 函数

    这是一个plpgsqlpostgres 的函数9 6 它试图INSERT一行 如果插入没有失败 由于违反键约束 那么它会运行更多命令 CREATE FUNCTION foo int text text RETURNS void AS BEG
  • 为什么我的 if 语句没有按我预期的方式工作?

    我正在尝试实现以下目标 我向我的 SQL 数据库询问使用SELECT FROM subjects 这样做之后我要求使用数组mysqli fetch assoc 在那之前一切都很好 现在的问题是 当我尝试在每个循环中修改 genero 的值
  • 在 MySQL 中使用 COUNT 时如何返回 0 而不是 null

    我使用此查询返回存储在 sTable 中的歌曲列表以及存储在 sTable2 中的总项目数 SQL queries Get data to display sQuery SELECT SQL CALC FOUND ROWS str repl
  • 使用 where 进行 select 语句时,HSQLDB 用户缺乏权限或未找到对象错误

    我的数据库使用 SQuirrel SQL 客户端版本 3 5 3 和 HSQLDB 我已经能够为其指定相应的驱动程序 内存中 并创建一个别名 我创建了一个表 CREATE TABLE ENTRY NAME VARCHAR 100 NOT N
  • 当所有维度值都具有 100% 重要性时处理多对多维度

    我至少会尽力保持简洁 假设我们正在跟踪一段时间内的账户余额 所以我们的事实表将包含诸如 账户余额情况表 FK 账户ID FK 日期ID Balance 显然你有一个账户维度表 and a 日期维度表 所以现在我们可以轻松地过滤帐户或日期 或
  • 对多个数据库执行 SQL 查询

    我知道我的帖子与该论坛中的其他帖子的标题非常相似 但我真的找不到我需要的答案 这是我的问题 我的 Windows Server 上运行着 SQL Server 在我的 SQL Server 中 我有大约 30 个数据库 它们都具有相同的表和
  • MySQL Connector C/C API - 使用特殊字符进行查询

    我是一个 C 程序 我有一个接受域名参数的函数 void db domains query char name 使用 mysql query 我测试数据库中是否存在域名 如果不是这种情况 我插入新域名 char query 400 spri
  • MySQL 查询计算上个月

    我想计算上个月的订单总额 我收到了从当前日期获取当月数据的查询 SELECT SUM goods total AS Total Amount FROM orders WHERE order placed date gt date sub c

随机推荐

  • Android 实现点击输入框以外的区域隐藏软键盘

    博主前些天发现了一个巨牛的人工智能学习网站 通俗易懂 风趣幽默 忍不住也分享一下给大家 点击跳转到网站 效果图如下 代码实现如下 首先创建一个工具类InputMethodUtil public class InputMethodUtil 隐
  • 【ML】机器学习模型的 10 个评估指标

    大家好 我是Sonhhxg 柒 希望你看完之后 能对你有所帮助 不足请指正 共同学习交流 个人主页 Sonhhxg 柒的博客 CSDN博客 欢迎各位 点赞 收藏 留言 系列专栏 机器学习 ML 自然语言处理 NLP 深度学习 DL fore
  • Ant Design Pro学习记录—ModalForm的使用(二)

    目录 一 ModalForm高度设置 二 ModalForm点击阴影背景 不隐藏弹框 三 ProFormSelect联动 四 ProFormText关联赋值 一 ModalForm高度设置 在modalProps中设置bodyStyle h
  • 华为OD机试 Python 【平均值最大子数组】

    题目 任务 你需要从一个有N个正数的列表里面找一个子列表 这个子列表的长度应该至少为L 而且它里面的数字要使几何平均值尽量大 我们需要你告诉我们这个子列表是从哪个位置开始的 以及它的长度 怎么判断哪个子列表最好 首先看几何平均值谁大 谁就好
  • springboot war打包步骤

    packaging的设置
  • centos7-elk之安装kibana

    下载解压安装包 安装elasticsearch6 0 1之后 下载kibana6 0 1 tar包 存放地址 opt elk 解压tar包 tar zxvf kibana6 0 1 修改配置文件 vim opt elk kibana6 0
  • BDD、KITTI、Cityscapes和Foggy Cityscapes百度云链接

    BDD 链接 https pan baidu com s 1gtUZGV 8X4L3Fe3PtCAxjw 提取码 vfoj KITTI 链接 https pan baidu com s 1EPEV z185GV8t RE48lROA 提取码
  • 为老人和残障人士“铺路搭桥”,这家银行是认真的

    一场疫情改写了银行业的规则 街道被封闭 城市空无一人 那个肃杀的冬季已经离我们远去 但对刚成立不久的小型银行来说 这是一场近乎致命的打击 裕民银行正是其中一员 这是江西省第一家 全国第18家民营银行 根据监管要求 民营银行只能采取 一行一店
  • kd树

    参考 1 统计学习方法 李航 2 https baike baidu com item kd tree 2302515 fr aladdin 3 http www jianshu com p ffe52db3e12b 4 http blog
  • error: device unauthorized.This adb server's $ADB_VENDOR_KEYS is not set

    以为是个复杂问题 百度之后将自己的手机屏幕解锁打开之后就成功连接上了 同样出问题的小伙伴可以看看是不是接口的问题 或者开发者模式没有打开
  • python中global用法实例分析

    lobal语句是适用于当前整个代码块的声明 它是全局变量的标识符 如果某名字在局部名字空间中没有定义 就自动使用相应的全局名字 没有global是不可能手动指定一个名字是全局的 在 global 中出现的名字不能在global 之前的代码中
  • 包裹快递

    包裹快递 背景 小K成功地破解了密文 但是乘车到X国的时候 发现钱包被偷了 于是无奈之下只好作快递员来攒足路费去Orz教主 描述 一个快递公司要将n个包裹分别送到n个地方 并分配给邮递员小K一个事先设定好的路线 小K需要开车按照路线给的地点
  • 记录几款vue的Tree树形控件

    一 Vue Beauty url https fe driver github io vue beauty components tree 特色 找了很多个框架 只有Vue Beauty是带连接线的 刚好项目能用上 二 iView url
  • Redis分布式锁原理及go的实现

    业务背景 后台定时任务刷新Redis的数据到数据库中 有多台机器开启了此定时同步的任务 但是需要其中一台工作 其他的作为备用 提高可用性 使用Redis分布式锁进行限制 拿到锁的机器去执行具体业务 拿不到锁的继续轮询 分布式锁原理 分布式锁
  • MindSpore【课程作业经验】基于TextCNN文本情感分类

    基于TextCNN文本情感分类 在本次实验中我们用mindspore实现TextCNN的针对aclImdb情感分类任务 数据加载 在这里基于TextCNN的方法我们需要指定文本句子长度 并且对句子进行处理 留下字母和空格其余符号删去 标定标
  • 深度学习神经网络中隐藏层的作用

    在神经网络中 隐藏层是介于输入层和输出层之间的一层或多层神经元组成的层级结构 隐藏层的存在是为了增强神经网络的表达能力和学习能力 以下是为什么神经网络中需要隐藏层的几个原因 非线性建模 隐藏层通过引入非线性变换 可以帮助神经网络对非线性关系
  • 3.2 Qt的moc机制

    转自 http www hellotongtong com Qt5base1 qtmoc intro html 3 2 Qt的moc机制 免费下载源码和PPT课件 在线视频课程 csdn 在线视频课程 51cto 好文章 来自 福优学苑 音
  • linux下Oracle服务的启动和关闭

    1 前言 确保我们能够访问oracle数据库包含两部分 一个是oracle实例 一个是监听 两个同时开启 我们才能正常的使用数据库 因此我们在关闭和启动oracle服务时 也需要同时操作实例和监听 能够操作linux的工具有很多 如 xsh
  • (中文详解篇)smallpt: 99行代码完成全局光照Path Tracing

    目录 0 什么是SmallPT Features 1 光线追踪需要了解知识 1 1 什么是全局光照 1 2 渲染方程 2 SmallPT代码分析 2 1 代码块1 2 2 代码块2 2 2 1 主函数第1步 设置呈像平面 2 2 2 主函数
  • MySQL数据库之基础查询语句(DQL数据查询语句)

    目录 一 查询条件 1 where子句 2 like模糊查询 二 查询结果处理 1 设置查询列 2 列的计算 3 as字段取别名 4 distinct 消除重复 5 函数 6 分组查询group by 7 排序 order by 8 分 查