MySQL 检索数据【总结】

MySQL 检索数据【总结】

1. 基本查询

// 检索单个列select prod_name from products;// 检索所有列select * from products;// 检索不同的行select distinct vend_id from products;// 限制结果select prod_name from products limit 4,5;

1.limit :若有两个参数,则第一个参数为开始位置(从 0 行开始),第二个参数为返回结果的数量;若只有一个参数,则表示限制返回结果的数量。
2.除非确实需要表中的每个列,否则最好别使用 * 通配符,检索不需要的列会降低检索的性能。
2. 排序数据

// 对 `prod_name` 进行升序排序select prod_name from products order by prod_name;//  按多个列排序: 对 `prod_price` 降序排序,对 `prod_name` 升序排序 select prod_price, prod_name form products order by prod_price desc, prod_name;

如果没有明确规定排序顺序,MySQL 默认以数据添加到表中的顺序返回。
3.过滤数据
使用 WHERE 子句来指定搜索条件。

// 检查单个值,MySQL 在执行匹配时默认不区分大小写,因此 'jochen' 和 'Jochen' 都会匹配select prod_name, prod_price from products where prod_name = 'jochen';// 不匹配检查select vend_id, prod_name from products where vend_id != 1000;// 范围检查select prod_name, prod_price from products where prod_price between 5 and 10;// 空值检查select cust_id from customers where cust_email is null;// AND 操作符select prod_id, prod_price from products where vend_id = 1003 and prod_price <=10;// OR 操作符select prod_name, prod_price from products where vend_id = 1002 or vend_id = 1003;// IN 操作符select prod_name, prod_price from products where vend_id in (1002, 1003);// NOT 操作符select prod_name, prod_price from products where vend_id not in (1002, 1003);

1.在同时使用 ORDER BY 和 WHERE 语句时,应该让 ORDER BY 位于 WHERE 之后,否则会报错
2.在 MySQL 中,AND 操作符的计算次序优先级高于 OR;可以使用圆括号()提高操作符的优先级。
4. 通配符过滤
MySQL 中有两种通配符来实现匹配值的一部分的特殊字符:

// `%` 通配符select prod_id, prod_name from products where prod_name like 'jo%';// `_` 通配符select prod_id, prod_name from products where prod_name like '_ochen';

1.% 通配符表示任意字符出现任意次数;_ 通配符表示只匹配单个字符。
2.通配符搜索的处理一般要比普通搜索所花时间更长,因此不要过度使用通配符。
5. 正则表达式检索
正则表达式是用来匹配文本的特殊的串,通过使用 REGEXP 子句来实现。MySQL 中使用 POSIX 规范正则表达式。

select prod_name from products where prod_name regexp '1000|2000';select prod_name from products where prod_name regexp '[123] Ton';// 连续4位数字select prod_name from products where prod_name regexp '[[:digit:]]{4}';

6. 计算字段
应用程序所需要的数据往往并不存在于数据库表中,我们需要从数据库中检索并进行拼接、计算、转换或者格式化等处理而得到,这就是计算字段。计算字段并不实际存在于数据库表中,而是运行时由 SELECT 语句创建。

// 拼接select concat(vend_name, '(', vend_country, ')') as vend_title from vendors;// 算术计算select prod_id, quantity, item_price quantity*item_price as expanded_price from orderitems;

7. 分组数据
分组允许把数据分为多个逻辑组,以便对每个组进行聚集计算。

// 返回每个供应商提供的产品数目select vend_id, count(*) as num_prods from products group by vend_id; # 创建分组// 返回至少有两个订单的所有顾客select cust_id, count(*) as orders from orders group by cust_id having count(*) >= 2; # 过滤分组// 返回总计订单价格大于等于50的订单的订单号和总计订单价格,并按总计订单价格排序select order_num, sum(quantity*item_price) as ordertotal from orderitems group by order_num having sum(quantity*item_price) >= 50 order by ordertotal;

1.GROUP BY 子句指示 MySQL 分组数据,然后对每个组而不是整个结果集进行聚集。
2.GROUP BY 子句中列出的每个列必须是检索列或者有效的表达式(不能是聚集函数),同时不能使用别名。
3.HAVING 在数据分组之后进行过滤,WHERE 在数据分组之前进行过滤。
4.一般在使用 GROUP BY 子句时,应该也给好 ‘ORDER BY’ 子句,这是保证数据正确排序的唯一方法。
8. 子查询
MySQL 允许创建子查询,即嵌套在其他查询中的查询,例如把一条 SELECT 语句返回的结果用于另一条 SELECT 语句的 WHERE 子句。

select cust_id from orders where order_num in (select order_num from ordreitems where prod_id = 'TNT2');// 作为计算字段使用子查询select cust_name, cust_state, (select count(*) from orders where orders.cust_id = customers.cust_id) as orders from customers order by cust_name;

保证子查询中的 SELECT 语句具有与父查询中的 WHERE 子句有相同数目的列。
9. 联接表
关系表的设计就是要保证把信息分解成多个表,一类数据一个表,各表通过某些常用的值(即关系设计中的关系)互相关联。分解数据为多个表能更有效地存储,更方便地处理,并且具有更大的可伸缩性。如果数据存储在多个表中,怎样用单条 SELECT 语句检索出数据?答案是使用联接。简单地说,联接是一种机制,用来在一条 SELECT 语句中关联表,使用特殊的语法,可以联接多个表返回一组数据。

BibiGPT-哔哔终结者 BibiGPT-哔哔终结者

B站视频总结器-一键总结 音视频内容

BibiGPT-哔哔终结者 28 查看详情 BibiGPT-哔哔终结者

联接不是物理实体,它在实际的数据库表中不存在。
常用的联接类型有:

内部联接(INNER JOIN):两表执行笛卡尔积后,取列值符合查询条件的数据。
左外部联接(LEFT OUTER JOIN):指将左表的所有记录与右表符合条件的记录,返回的结果除内连接的结果,还有左表不符合条件的记录,并在右表相应列中填NULL。
右外部联接(RIGHT OUTER JOIN):

// 等值联接1select vend_name, prod_name, prod_price from vendors, products where vendors.id = products.vend_id order by vend_name, prod_name;// 等值联接2select vend_name, prod_name, prod_price from vendors inner join products on vendors.id = products.vend_id order by vend_name, prod_name;

1.应该保证所有联接都 SELECT 子句,否则 MySQL 将返回比想要的数据多得多的数据(笛卡尔积)。
2.MySQL 在运行时关联指定的每个表以及处理联接,这种处理可能时非常耗费资源的。
10. 复合查询
MySQL 允许执行多个查询(多条 SELECT 语句),并将结果作为单个查询结果集返回,这些组合查询称为复合查询。有两种情况下,需要使用复合查询:

在单个查询中从不同的表返回类似结果的数据;
对单个表执行多个查询,按单个查询返回数据。

// 返回价格小于等于5的所有物品、并且包括供应商1001和1002生产的所有物品select vend_id, prod_id, prod_pricefrom productswhere prod_price <=5unionselect vend_id, prod_id, prod_pricefrom productswhere vend_id in (1001, 1002);

1.UNION 中的每个查询必须包含相同的列、表达式或聚集函数。
2.在使用 UNION 复合查询是,只能使用一条 ORDER BY 子句,且必须在最后一条 SELECT 语句之后。

更多编程相关内容,请关注创想鸟编程入门栏目!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/571711.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
Composer如何解决依赖冲突
上一篇 2025年11月10日 06:20:47
如何在Linux上配置远程登录(如SSH和Telnet)
下一篇 2025年11月10日 06:20:52

相关推荐

  • mysql数据库的查询语句是什么

    mysql数据库的查询语句是什么mysql数据库的查询语句是什么mysql数据库的查询语句是什么mysql数据库的查询语句是什么

    查询语句:1、“select * from 表名;”,可查询表中全部数据;2、“select 字段名 from 表名;”,可查询表中指定字段的数据;3、“select distinct 字段名 from 表名”,可对表中数据进行去重查询。 本教程操作环境:windows7系统、mysql8版本、De…

    2026年9月2日 用户投稿
    100
  • mysql怎么去掉重复的数据

    在mysql中,可以利用“SELECT”语句和“DISTINCT”关键字来进行去重查询,过滤掉重复的数据,语法“SELECT DISTINCT 字段名 FROM 数据表名;”。 本教程操作环境:windows7系统、mysql8版本、Dell G3电脑。 在 MySQL 中使用 SELECT 语句执…

    2026年9月2日
    000
  • mysql怎么设置字段注释

    设置方法:1、使用“create table 表名 (字段名 字段类型 comment ‘字段的注释’);”语句;2、使用“alter table 表名 modify column 字段名 字段类型 comment ‘字段的注释’;”语句。 本教程操作…

    2026年9月2日
    000
  • mysql怎么进行类型转换

    mysql怎么进行类型转换mysql怎么进行类型转换mysql怎么进行类型转换mysql怎么进行类型转换

    转换方法:1、用“+”运算符,语法“SELECT 1+’字符串’;”;2、用CAST()函数,可将任意类型转为指定类型,语法“CAST(expr AS type)”;3、用DATE_FORMAT()函数,可将日期按照给定的模式转换成字符串。 本教程操作环境:windows7系…

    2026年9月2日 用户投稿
    000
  • 如何利用 Composer 解决 PHP 项目中的旧版库依赖问题

    在我的项目中,karelwintersky/steamboatengine 最后一次使用是在 doctorpiter 项目中,版本为 1.3.6。虽然这个库已经不再维护,但我仍然需要它来保持项目的正常运行。然而,继续使用一个已废弃的库显然不是长久之计。 首先,我决定通过 Composer 来管理这个…

    用户投稿 2026年9月2日
    100
  • 掌握HTML、CSS、JS、PHP、MySQL等技能,毕业生前端开发就业前景如何?

    掌握HTML、CSS、JavaScript、XAMPP、PHP和MySQL技能的毕业生,在前端开发领域的前景如何? 临近毕业,许多学生都面临着就业压力,技术水平直接影响着求职成功率。这位同学具备HTML、CSS、JavaScript、XAMPP、PHP和MySQL技能,能够独立完成前后端网站开发,但…

    2026年9月2日
    000
  • mysql建表怎么添加注释

    在mysql中,可以使用“create table”语句和comment关键字来在建表时添加注释,语法“create table 表名 (字段名 字段类型 comment ‘字段的注释’)comment=’表注释’;”。 本教程操作环境:windows…

    2026年9月2日
    000
  • mysql中是什么意思

    在mysql中,“”的意思为“安全等于”,是一个比较运算符,和“=”等于运算符类似,不过“”可以用来判断NULL值:当两个操作数均为NULL时,其返回值为1而不为NULL;而当一个操作数为NULL时,其返回值为0而不为NULL。 本教程操作环境:windows7系统、mysql8版本、Dell G3…

    2026年9月2日
    200
  • mysql条件查询语句是什么

    在mysql中,可以使用SELECT语句和WHERE关键字来实现条件查询,实现语句为“SELECT 字段名 FROM 数据表 WHERE 查询条件;”;SELECT语句用于查询数据,而WHERE关键字用于指定查询条件。 本教程操作环境:windows7系统、mysql8版本、Dell G3电脑。 在…

    2026年9月2日
    100
  • MySQL如何实现权限管理_怎么设置最安全的权限?

    MySQL如何实现权限管理_怎么设置最安全的权限?MySQL如何实现权限管理_怎么设置最安全的权限?MySQL如何实现权限管理_怎么设置最安全的权限?MySQL如何实现权限管理_怎么设置最安全的权限?

    mysql权限管理的核心在于遵循最小权限原则、精细化控制权限范围并定期审查清理权限。1. 设置最安全权限需遵循最小化原则,仅授予用户必要权限,如为web应用创建专用账户并限制其操作范围;2. 利用mysql的细粒度权限控制功能,可按数据库、表、列甚至主机进行限制,例如限制用户只能查询特定字段或从内网…

    2026年9月2日 用户投稿
    000
  • 让人心动的mysql体系结构和InnoDB存储引擎知识详解

    让人心动的mysql体系结构和InnoDB存储引擎知识详解让人心动的mysql体系结构和InnoDB存储引擎知识详解让人心动的mysql体系结构和InnoDB存储引擎知识详解让人心动的mysql体系结构和InnoDB存储引擎知识详解

    本篇文章给大家带来了mysql进阶之体系结构和innodb存储引擎的相关知识,希望对大家有帮助。 MySQL基本架构图 大体来说,MySQL 可以分为 Server 层和存储引擎层两部分。 Server 层包括连接器、查询缓存、分析器、优化器、执行器等,涵盖 MySQL 的大多数核心服务功能,以及所…

    2026年9月2日 用户投稿
    100
  • mysql怎么将数据转为16进制

    mysql转16进制的方法:1、使用hex()函数,语法“select hex(十进制值);”,可将十进制转为十六进制;2、使用conv()函数,语法“select conv(‘数据值’,原进制,16);”,可将任意进制转为16进制。 本教程操作环境:windows7系统、m…

    2026年9月2日
    100
  • mysql中as的用法是什么

    在mysql中,“as”关键字用于为数据表和字段指定别名,语法:1、“SELECT 字段名 AS 别名 FROM 数据表;”,可为字段指定别名;2、“SELECT 字段名 FROM 数据表 AS 别名;”,可为表指定别名。 本教程操作环境:windows7系统、mysql8版本、Dell G3电脑。…

    2026年9月2日
    000
  • mysql要如何删数据库

    在mysql中,可以利用“DROP DATABASE”语句来删除数据库,具体语法格式为“DROP DATABASE [IF EXISTS] 数据库名;”;可选子句“IF EXISTS”,用于防止当数据库不存在时发生错误。 本教程操作环境:windows10系统、mysql8版本、Dell G3电脑。…

    2026年9月2日
    000
  • mysql学习之select查询语句到底是怎么执行的?

    mysql学习之select查询语句到底是怎么执行的?mysql学习之select查询语句到底是怎么执行的?mysql学习之select查询语句到底是怎么执行的?mysql学习之select查询语句到底是怎么执行的?

    本篇文章给大家带来了关于mysql中select语句执行的相关知识,其中包括了连接器、分析器、优化器和执行器,希望对大家有帮助。 mysql 作为一个关系型数据库,在国内使用应该是最广泛的。也许你司使用 Oracle、Pg 等等,但是大多数互联网公司,比如我司使用得最多的还是 Mysql,重要性不言…

    2026年9月2日 用户投稿
    200
  • 一文总结Mysql数据库应用及常见问题

    Mysql数据库应用与常见问题 一、安装mysql 1、CentOS系统 1.)安装mysql 下载并安装mysql的repo源 $ wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm$ sudo rpm -ivh …

    用户投稿 2026年9月2日
    200
  • MySQL如何实现数据水平拆分_有哪些设计模式可参考?

    MySQL如何实现数据水平拆分_有哪些设计模式可参考?MySQL如何实现数据水平拆分_有哪些设计模式可参考?MySQL如何实现数据水平拆分_有哪些设计模式可参考?MySQL如何实现数据水平拆分_有哪些设计模式可参考?

    分片键的选择直接影响数据分布均匀性、查询效率及扩容便利性。1. 分片键需保证数据均匀分布,避免热点问题,例如用户id若存在访问倾斜则不适宜作为分片键;2. 应与业务查询模式匹配,如“查询用户订单”适合以用户id为分片键,避免跨库查询;3. 需考虑未来扩容和迁移成本,哈希分片分布均匀但扩容时迁移量大,…

    2026年9月2日 用户投稿
    100
  • mysql怎样使用in查询

    在mysql中,in常用于where表达式中,用于查询某个范围内的数据,语法为“select*from where field in(value1,value2,..)”,当in前面加not运算符时,表示与in相反不在这些列表项内选择。 本教程操作环境:windows10系统、mysql8.0.22…

    2026年9月2日
    100
  • @Transactional注解下查询操作会加锁吗?

    @Transactional 注解下的数据库查询是否加锁? 使用 @Transactional 注解时,如果仅执行数据库查询操作(无插入、更新或删除),是否会对数据库表加锁?这取决于数据库的隔离级别设置。 以 MySQL 为例: 串行化 (SERIALIZABLE) 隔离级别: 会加锁。该级别确保所…

    2026年9月2日
    100
  • mysql怎样查询重复字段

    mysql怎样查询重复字段mysql怎样查询重复字段mysql怎样查询重复字段mysql怎样查询重复字段

    在mysql中,可以利用count()函数来查询重复字段,该函数能够返回指定条件的结果,语法为“ SELECT 字段值 COUNT(*) as count FROM 表名 GROUP BY 字段值 having count>1;”。 本教程操作环境:windows10系统、mysql8.0.2…

    2026年9月2日 用户投稿
    200

发表回复

登录后才能评论
关注微信