【MySQL】简单明了:单表查询

MySql基础三之【单表查询进阶操作】 本系列为MySql基础,本篇为第三篇MySQL的单表查询进阶操作了解为了更好的显示多数据操作,下面将使用导入的数据库SQL文件进行相应的查询操作。导入数据库文件1、右击数据库并点击运行脚本。 阅读详情

终于来到令人激动、也是数据库最重要的一个点了:查询操作。前文曾说过,操作关系型数据库就是在操作表,那么查询操作也就是在表格中查询指定数据的操作了。本文将教你在MySQL中基础的单表查询语法,十分清晰明了,一看一练包会!(注:推荐读物《MySQL必知必会 人民邮电出版社》)


Table of Contents

创建一个练习用的数据库和表

SELECT [选项]

聚合函数

字段连接

执行算术运算

文本处理函数

数值处理函数

WHERE 条件查询

正则表达式查询

GROUP BY 分组查询

ORDER BY 排序查询

LIMIT 分页操作


本文将围绕以下的查询语法展开,由浅入深,帮助你快速建立查询操作体系结构(奥利给):

SELECT [选项] 字段列表 FROM 数据源 WHERE条件 
	GROUP BY分组 HAVING条件
	ORDER BY排序 
	LIMIT限制;

PS:建议先看我的前两篇文章,教你如何创建MySQL数据库和表~~

【MySQL】如何管理数据库:https://blog.hackyle.net/index.php/database/mysql-manage-database/
【MySQL】如何管理表:https://blog.hackyle.net/index.php/database/mysql-manage-table/


创建一个练习用的数据库和表

 

打开SQLyog:

 

-- 1.创建一个名为kdb的数据库并设置编码
CREATE DATABASE kdb CHARACTER SET utf8;
-- 2.切换到kdb数据库
USE kdb;

-- 3.创建一个表格
CREATE TABLE person (
	pid INT PRIMARY KEY AUTO_INCREMENT COMMENT '人的编号,作为主键,编号自动增长',
	pname VARCHAR(20) NOT NULL COMMENT '人的姓名,不可以为空',
	page INT DEFAULT NULL COMMENT '年龄,默认为空',
	paddress VARCHAR(50) DEFAULT NULL COMMENT '住址,默认为空',
	ptel VARCHAR(15) DEFAULT NULL COMMENT '电话',
	pemail VARCHAR(50) DEFAULT NULL COMMENT '电邮'
);

执行完上述SQL语句后:


添加一些记录:

-- 4.添加几条记录
INSERT INTO person VALUES (1,'Jhon',20,'HongKong','16818181818','jhon@pronhub.com'),
	(2,'Project Alice',32,'raccoon city','15745452525','alice@umbrella.com'),
	(3,'Fukada Eimi',28,'Japanese','10100101010','fukada@javbus.com'),
	(4,'Yourer',25,'Japanese','19191918989','you@thepxxxtube.com'),
	(5,'anay',22,'Taiwan','11100101001','anay@darkwiki.oni*on')

现在可以愉快地玩耍了~~~


SELECT [选项]

 

查询指定字段信息:select 字段1,字段2,...from 表名;

 

查询表中所有字段:select * from 表名;

 

注意:使用"*"在练习、学习过程中可以使用,在实际开发中,不推荐使用。原因,要查询的字段信息不明确,若字段数量很多,会导致查询速度很慢。

 

distinct用于去除重复记录:select distinct 字段 from 表名;

 

表别名格式:

 

  • select * from 表名 as 别名;
  • select * from 表名 别名; --as关键词可以省略

 

列别名格式:

 

  • select 字段名 as 别名 from 表名;
  • select 字段名 别名 from 表名;

 

去重复的结果集:

 

SELECT DISTINCT * FROM 表名;

第一个SQL查询:

 

 

聚合函数

 

背景:

 

  • 之前我们所做的都是横向查询,它们都是根据条件一行一行地进行判断。
  • 如何实现纵向查询,即对一个列的所有数值进行某种运算。聚合函数。
  • 即,将一列数据作为一个整体,进行纵向计算。

 

聚合函数:使用方式是:作用在列名上。

 

count:统计指定列部位null的记录个数;

 

语法示例:SELECT COUNT(*) FROM 表名

 

注意:count聚合函数的计算,排除值为null的那一格;

 

  1. 即使是null,也加入计算:SELECT COUNT(*) FROM 表名; 或者 SELECT COUNT(主键) FROM 表名;
  2. 使用ifnull函数:SELECT COUNT(IFNULL(列名,0) FROM 表名;  (注释:把值为NULL的所在单元格看成是0)

 

 

  • 其他聚合函数:
  • sum:计算指定列的数值和,如果指定列的数据类型不是数值类型,那么计算结果为0;
  • 语法示例:SELECT SUM(列名) FROM 表名
  • max:计算指定列的最大值,如果该列是字符串类型,那么使用字符串排序运算;
  • min:计算指定列的最小值,如果该列是字符串类型,那么使用字符串排序运算;
  • avg:计算列的平均值,如果该列的数据类型不是数值类型,那么计算结果为0;SELECT AVG(DISTINCT p_price) AS avg_price from products;

获取某列的总和:SELECT sum(列名) FROM 表名;

获取某列的平均值:SELECT avg(列名) from 表名;

 

字段连接

 

有时,我们需要根据请求,对数据库中的不同列,进行数据计算字段(数据组合、格式控制),再返回。

 

理解计算字段中的拼接字符串concat()

 

SELECT CONCAT(pid,pname,page) AS 拼接:ID姓名年龄 FROM person;

执行结果:

 

CONCAT如何使用

语法:

  1. 要连接成一串的,全部在CONCAT()的括号内;
  2. 各个字段(列名)之间使用英文状态下的逗号分隔;
  3. 字符要用引号隔离,和使用英文逗号分隔;

示例:

SELECT CONCAT(pname,'(',page,psex,ptel,pemail,')') AS 个人信息 FROM person;

 

执行算术运算

 

SELECT pid,pname,page+5 AS new_age FROM person WHERE psex='woman';

 

文本处理函数

数值处理函数


WHERE 条件查询

格式:select 字段  from 表名  where 条件;

 

while条件的种类如下:

比较运算符

>  <  <=   >=   =  <>

大于、小于、大于(小于)等于、不等于(或者!=)

BETWEEN  ...AND...

显示在某一区间的值(含头含尾)

IN(参数为一个set集合)

显示在in列表中的值,例:in(100,200)

显示不在in列表中的值,例:not in(10,20)

LIKE 通配符

模糊查询,Like语句中有两个通配符:

  1. % 用来匹配多个字符;例first_name like ‘a%’;%不能用于匹配NULL值!
  2. _ 用来匹配一个字符。例first_name like ‘a_’;

IS NULL

判断是否为空

is null; 判断为空

is not null; 判断不为空

逻辑运算符

AND

多个条件同时成立

OR

多个条件任一成立

NOT

不成立,例:where not(salary>100);

由于本个表没有相关测试数据(懒得写),这里就直接脑补一波:

示例:
价格小于10:
	SELECT p_name,p_price FROM products WHERE p_price<10;
价格不等于10:
	SELECT p_name,p_price FROM products WHERE p_price!=10;等价于
	SELECT p_name,p_price FROM products WHERE p_price<>10;
价格在10到100之间:
	SELECT p_name,p_price FROM products WHERE p_price BETWEEN 10 AND 100;
检查有无空值:
	SELECT p_name FROM products WHERE p_price IS NULL;

OR操作符的使用:
SELECT p_name,p_price FROM products WHERE p_id=100 OR p_id=200;
OR、AND操作符的联合使用:
SELECT p_name,p_price FROM products WHERE p_id=100 OR p_id=200 AND p_price>=10;
上面语句执行后并未按照预期进行过滤。原因是,在处理OR之前,优先处理AND;由于AND在计算次序中优先级更高,操作符被错误地组合了。
SELECT p_name,p_price FROM products WHERE (p_id=100 OR p_id=200) AND p_price>=10;

正则表达式查询

LIKE 通配符:

  1. % 用来匹配多个字符;例first_name like ‘a%’;%不能用于匹配NULL值!
  2. _ 用来匹配一个字符。例first_name like ‘a_’;

 

REGEXP正则表达式:

检索pname中包含文本ject的所有行:SELECT pname FROM person WHERE pname REGEXP 'ject';

特性:

  1. 不区分大小写;
  2. “.”:匹配任意字符;
  3. “\\-”:匹配“-”,“\\.”:匹配“.”;

辨析LIKE和REGEXP:

SELECT pname FROM person WHERE pname LIKE 'ject';  -- 不会显示pname为ject的所在行;
SELECT pname FROM person WHERE pname REGEXP 'ject';  -- 会显示pname为ject的所在行;

  1. LIKE匹配的是整个列。如果被匹配的文本在列值中出现,LIKE将不会找到它,相应的行也不会被返回。
  2. REGEXP是在列中的值进行匹配。如果被匹配的文本在列值中出现,REGEXP将会找到它,并将它返回。

GROUP BY 分组查询

功能:把同一列中的重复内容项合并成一个项,并操作处理这些重复内容项的各个数值。

 

使用格式:GROUP BY 被分组的列名

  1. 可以跟着聚合函数
  2. 被分组的列,要出现在SELECT选择列的后面
  3. GROUP BY子句必须出现在where子句之后,ORDER BY 子句之前;
  4. 如果分组列中具有NULL值,则NULL将作为一个分组返回。如果列中有多个NULL值,则将它们作为一组。

 

核心特性:

  1. where是用来过滤记录的,HAVING是用来过滤分组的,HAVING具备where的所有语法。
  2. 过滤的时机不相同:先过滤Where后过滤Having
  3. WHERE是在查询表时逐行过滤以选取满足条件的记录,having是在数据查询后并且分完组后对分组进行过滤的
  4. HAVING必须跟在group BY之后
  5. 查询语句执行顺序:5select 1from 2where 3group by 4having 6order by

 

添加一个字段,方便分组查询:

ALTER TABLE person ADD psex VARCHAR(10) DEFAULT 'man' COMMENT '性别';

UPDATE person SET psex='woman' WHERE pid BETWEEN 2 AND 3;

先看看表中的数据是什么样的:

统计一下person表中的男人和女人各有多少人:

统计一下person表中的各地区人的数量:

 

以下是一些分组查询的示例(没有实际案例,如果看不懂,跳过即可):

理解分组查询:
1.	根据“列名1”字段分组,分组后统计商品的个数:
SELECT 列名1,count(*) from 表名 GROUP BY 列名1;
2.	根据“列名1”分组,分组统计“列名2”的平均价格,并且平均价格大于20000元:
SELECT 列名1,avg(列名2) FROM 表名 GROUP BY 列名1 having avg(“列名2”)>20000;


GROUP BY(分组查询)的示例:
1)	查询每个部门的平均工资:
SELECT deptno AS 部门,AVG(sal) AS 平均工资 FROM emp GROUP BY deptno;
2)	查询每个职位的最高、最低工资:
SELECT job AS 职位, MAX(sal) AS 最高工资, MIN(sal) AS 最低工资 FROM emp GROUP BY job;

3)	查询每个部门的每个职位的最高工资:
SELECT DISTINCT deptno AS 部门, job AS 职位, MAX(sal) 最高工资 FROM emp GROUP BY job;
4)	查询每个部门的平均工资:
SELECT deptno AS 部门, AVG(sal) AS 平均工资 FROM emp GROUP BY deptno;

 

ORDER BY 排序查询

功能:选取某一行对数据进行排序。

语法格式:在普通查询语句后接“SELECT * FROM person ORDER BY 列名 [DESC|ASC]”

  • DESC:降序排列
  • ASC:升序,可以不写(默认)

如果列名1相同的情况下,按照列名2继续排序:

SELECT * FROM 表名 ORDER BY 列名1 [DESC|ASC], 列名2 [DESC|ASC];

 

按年龄进行排序:


LIMIT 分页操作

理解:对于一个查询,其结果有很多。一个页面可能太长了,显示不下,所以我们需要对其进行分页,分成不长的几页。

 

分页操作的语法:

SELECT * FROM 表名 LIMIT 开始索引,每页显示的条目数;

开始索引 = (当前的页码 - 1)x 每页显示的条数

 

每页显示3条记录:

SELECT * FROM 表名 LIMIT 0,3;(第一页:从0开始查,只显示前3条记录)

SELECT * FROM 表名 LIMIT 3,3;(第二页:从3开始查,只显示前3条记录)

 

从查询结果的第2项开始,输出两项:


 

MySQL数据库实验:任务三 数据库的单表查询设计 任务三 数据库的单表查询设计 文章目录任务三 数据库的单表查询设计【实训目的与要求】【实训原理】【实训步骤】一、简单查询二、按条件查询1.比较大小查询2.带in关键字的查询(确定集合)3.带BETWEEN AND关键字的查询(确定范围)4.空值查询5.带LIKE关键字的查询(字符匹配)6.带AND关键字的查询(多重条件查询)7.带OR关键字的查询(多重条件查询)三、高级查询1.聚集函数2.分... 阅读详情

相关推荐

OpenClaw:深度学习驱动的智能编程工具实战解析

智能编程工具通过深度学习技术革新传统开发流程,其核心在于代码语义理解与实时协作能力。这类工具采用AI代码补全、错误预测等技术,显著降低开发者认知负荷,尤其适用于复杂业务逻辑开发和遗留系统维护场景。以OpenClaw为例,其智能填充和上下文感知功能可提升40%编码效率,减少65%调试时间。关键技术实现包含自然语言处理、代码静态分析等,在金融科技、电商系统等领域具有广泛应用前景。热词提示:代码理解引擎、智能工作流整合展现了当前AI辅助开发的最新趋势。

chubaisheng8627的博客 320

MySQL学习之SQL单表查询(五)

一、简单查询 1、查询指定字段信息 格式:select 字段1,字段2,...from 表名; 2、查询表中所有字段 格式:select * from 表名; 3、distinct用于去除重复记录 格式:select distinct 字段 from 表名; 4、别名查询 别名可以给表中的字段,表设置别名。 当查询语句复杂时,使用别名可以极大的简便操作。表别名可以解决嵌套查询的问题。使用的as关键字,as可以省略的。 (1)表别名 格式一:select * from...

weixin_43076448的博客 1363

Jenkins+docker 微服务实现自动化部署安装和部署过程

本文详细介绍了如何使用Docker部署Jenkins自动化服务器。主要内容包括:1)拉取Jenkins官方或BlueOcean镜像;2)创建容器并配置端口映射、数据卷挂载;3)设置防火墙规则;4)配置清华大学镜像加速;5)安装必要插件;6)SSH密钥配置;7)构建触发器设置;8)编写自动化构建脚本。通过Docker部署Jenkins可以简化安装流程,确保环境一致性,并利用容器特性实现快速启动和管理。文章提供了完整的配置步骤和注意事项,帮助用户快速搭建CI/CD环境。

qq_33665793的博客 1687

统计查询实现代码

统计查询和多表连接查询

weixin_75253589的博客 939

Nvidia Jetson CH340 驱动安装

最近调一个USB设备,Windows系统上是可以安装CH340 驱动使用的,移到Jetson AGX Orin 上发现没有 /dev/ttyUSB* 设备显示。是一个为盲人和视力障碍者提供的终端设备驱动程序,它会在系统启动时自动加载并占用串口设备,导致我们无法正常使用部分串口设备。安装完后,内核中已经有。

Vulcan_S的博客 1638

sklearn2pmml xgboost缺失值(missing)处理的坑

sklearn2pmml xgboost缺失值(missing)如何处理 今天同事在部署xgboost pmml模型时遇到了大坑,线上spark预测和本地python预测结果怎么都不对应,记录一下处理过程。 看了下同事的代码,貌似也没有问题 from sklearn2pmml import PMMLPipeline from sklearn2pmml import sklearn2pmml fro...

Skycrab 8969

sql学习记录3--单表查询SELECT FROM、别名设置AS、增加常数列、四则运算

单表查询 1.1单表查询 指查询的是一张表,查询出一列或多列数据。 SELECT 必需子句1(查询列)FROM 必需子句2(数据表); 查询select的结果是数据表,是二维表结构,结果的顺序与原表相同。 1.2navicat实操 (1)打开表所在的数据库,比如之前新建了sqlearning数据库,并导入了excel的五张数据表,如图 (2)要想写sql语句,点击工具栏“查询”–> 点击下面“新建查询” (3) 此时出现界面为 一定要选择对哪个连接的那个数据库进行操作,比如上图,”运行“左边的两个框

qq_41551159的博客 3219

新手避坑指南:用Silvaco Atlas搞定GaN HEMT电热仿真的完整流程(附代码解读)

本文详细介绍了使用Silvaco Atlas进行GaN HEMT电热特性仿真的完整流程,特别针对新手常见问题提供避坑指南。从软件环境配置、结构定义、网格划分到物理模型设置,逐步解析关键步骤,并附有代码解读和调试技巧,帮助读者快速掌握GaN器件仿真的核心技术。

weixin_29215815的博客 597

数据库单表查询

1.查询一个表内的所有数据 select * from gays; 查询gays这张表的所有字段的所有内容。 2.查询某张表的某个字段 select name from gays; 查询gays这张表的name字段的所有内容。 3.带条件查询 select * from gays where id = 3; 查询gays这张表的id等于3的所有字段的信息。 返回的是一条数据。 select * from gays where id in(1,2); select * fr

qq_49392169的博客 4729

HRNet 【demo 复现过程】

Deep High-Resolution Representation Learning for Human Pose Estimation

qq_45257495的博客 5556

Ansys Zemax实战:5步搞定多模光纤耦合效率优化(附IMAE操作数详解)

本文详细介绍了使用Ansys Zemax优化多模光纤耦合效率的5个关键步骤,包括几何图像分析设置、IMAE操作数应用及偏振效应处理。通过实战案例解析,帮助工程师快速掌握光纤耦合效率提升技巧,特别针对IMAE操作数的配置保存机制和菲涅尔损耗控制进行深度讲解。

potato的博客 690

数据库的简单查询——单表查询

本篇文章主要是数据库的一些简单查询,包括条件查询,模糊查询,分组查询等准备工作:三张数据表 学生表(student): 课程表(course): 学生选课表(sc): SQL语句:select * from student;SQL语句:SELECT sname,sno FROM student;检索全体学生的学号、姓名、性别信息,并分别加上“学号”、“姓名”、“性别”的别名信息。

yue月的博客 8983

从零开始学 AUTOSAR:深入浅出 SAE J1939 诊断通信管理器(J1939Dcm)深度完整版

SAE J1939 是美国汽车工程师学会制定的重型车辆 CAN 总线通信标准,覆盖卡车、客车、工程机械、农机、船舶等,是商用车领域的 “通用语言”。基于CAN 2.0B 扩展帧(29 位 ID)(车规主流)PGN(参数组号)+ SPN(可疑参数号)核心标准:J1939-21:数据链路层(CAN 帧格式、地址声明)J1939-71:应用层(普通信号、报文)诊断层(核心!J1939Dcm 依据)J1939-81:网络管理(地址管理、节点检测)

getusushu的博客 114

mysql单表查询实例,【MySQL】简单明了:单表查询

终于来到令人激动、也是数据库最重要的一个点了:查询操作。前文曾说过,操作关系型数据库就是在操作表,那么查询操作也就是在表格中查询指定数据的操作了。本文将教你在MySQL中基础的单表查询语法,十分清晰明了,一看一练包会!(注:推荐读物《MySQL必知必会 人民邮电出版社》)Table of Contents创建一个练习用的数据库和表SELECT [选项]聚合函数字段连接执行算术运算文本处理函数数值处...

weixin_28752415的博客 521

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

MySQL:基本表查询操作汇总(单表查询+多表操作)

本文详细介绍了MySQL单表查询和多表操作的基础知识和实践方法。单表查询部分涵盖了简单查询、条件查询、高级查询以及表和字段取别名等内容,通过具体示例展示了各类查询的基本用法。多表操作部分则探讨了外键约束、关联表操作、连接查询和子查询等技术,并结合实际案例演示了多表查询的应用场景。文章最后总结了提高查询效率和保证数据质量的注意事项,旨在帮助读者更好地理解和应用MySQL的查询技术,以提升数据库管理和数据处理的能力。

曾经“等你生日那天”都遥远得像未来,如今却可欢愉的挥手说“下个十年见” 87万+

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

【MySQL】如何实现单表查询?

在我们对数据进行操作时,查询无疑是至关重要的,查询操作灵活多变,我们可以根据开发的需求,设计高效的查询操作,把数据库中存储的数据展示给用户。

zhangxia_的博客 9362

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

MySQL的单表查询

查询语句是MySQL中比较常用的也是最复杂最难的部分,在查询过程的时候有时候要涉及到多张表,但是单表查询是基础,学好里面的知识才能学好MySQL。

m0_74096456的博客 619

mysql原理--单表查询成本

基于成本的优化

x13262608581的博客 1264

MySQL-单表、多表查询

【代码】MySQL-

wzpny的博客 1423

mysql查询单表的销售额_MYSQL select语句的单表查询

MYSQL select语句的单表查询发布时间:2020-05-29 13:19:48来源:亿速云阅读:131作者:Leah这篇文章运用了实例代码展示select语句的单表查询的用法,代码非常详细,可供感兴趣的小伙伴们参考借鉴,希望对大家有所帮助。SELECT语句的基本语法如下:select selection_list //要查询的内容,选择哪些列from 数据...

weixin_27033895的博客 1476

MYSQL之练习单表查询和多表查询

素材: 表名:worker-- 表中字段均为中文,比如 部门号 工资 职工号 参加工作 等`部门号` int(11) NOT NULL,`职工号` int(11) NOT NULL,`工作时间` date NOT NULL,`工资` float(8,2) NOT NULL,`政治面貌` varchar(10) NOT NULL DEFAULT '群众',`姓名` varchar(20) NOT NULL,`出生日期` date NOT NULL,

qq_75040884的博客 863

MySQL基础DQL(单表查询、多表查询)

本文详细介绍了数据查询语言(DQL)的基本语法和进阶技巧。主要内容包括:单表查询(简单查询、条件查询、排序、聚合函数、分组、分页);多表查询(交叉连接、内连接、外连接);自关联查询;子查询(作为条件、数据源、查询字段)。文章通过商品和分类数据库的示例演示了各种查询方式,特别强调了SQL语句的书写和执行顺序差异。同时还简要说明了外键约束的作用和使用方法,为数据库查询操作提供了全面的技术指导。

weixin_52613525的博客 942

【MySQL】复合查询——基本单表查询、多表查询、自连接、子查询、使用from进行子查询、合并查询

MySQL、复合查询、基本单表查询、多表查询、自连接、子查询、单行子查询、多行子查询、多列子查询、使用from进行子查询、合并查询、union、union all

Crocodile1006的博客 1819

mysql中单表查询范例

【代码】mysql中单表查询范例。

m0_73815850的博客 1126

MySql-单表以及多表查询详解

约束详解单表约束多表约束DQL语句详解简单查询条件查询聚合查询分组查询排序查询模糊查询分页查询多表查询交叉连接连接查询子查询自关联(自连接)查询扩展: 多表建表一对多多对多一对一-- ------------------------------- 案例2: 单表约束之 其它约束 -------------------------------# 演示: 非空约束, 唯一约束, 默认约束.

2201_75415080的博客 1897
上一篇: 【MySQL】如何管理表
下一篇: 【Java网络】快速入门网络编程
ALGO阿狗
博客等级 码龄9年 64粉丝 149原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值