返回顶部
首页 > 资讯 > 数据库 >如何提升查询技能
  • 279
分享到

如何提升查询技能

2024-04-02 19:04:59 279人浏览 八月长安
摘要

这篇文章主要介绍“如何提升查询技能”,在日常操作中,相信很多人在如何提升查询技能问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何提升查询技能”的疑惑有所帮助!接下来,请跟着

这篇文章主要介绍“如何提升查询技能”,在日常操作中,相信很多人在如何提升查询技能问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何提升查询技能”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

让我们以一个虚构的业务为例。假设你是亚马逊电子商务分析团队的一员,需要运行几个简单的查询。你手头有两个表,分别为“product(产品)”和“discount (折扣)”。

如何提升查询技能

1.计算NULL字段的数目

为了计算null字段的数目,要掌握COUNT函数的工作原理。假设计算产品数量时,要求计入表格“product”的“product id”主键列中遗漏的字段。

SELECT COUNT(product_id) FROM product;Result: 3

由于要求计入“product id”列中的null值,查询结果应该为4,但COUNT()函数不会将null值计数。

解决方法:使用COUNT(*)函数。该函数可以将null值计数。

Select Count(*) From product;Result: 4

这个操作很简单,但是在编写复杂的查询时总会被忽略。

2.使用保留字作为列名

SELECT product_id, RANK() OVER (ORDER BY price desc) As Rank FROM product;

由于列名“Rank”是Rank函数的保留字,该查询结果出错。

解决方法:

SELECT product_id, RANK() OVER (ORDER BY price desc) As ‘Rank’ FROM product;

加上单引号,即可得到想要的结果。

3.NULL的比较运算

SELECT product_name FROM product WHERE product_id=NULL;

由于使用了比较运算符“=”,此处运算会出现异常,使用另一比较运算符“!=”运算也会出现异常。这里的逻辑问题在于,你编写的查询得出的是“product id”列的值是否未知,而无法得出这一列的值是否是未知的产品。

解决方法:

SELECT product_name FROM product WHERE product_id ISNULL;

4.ON子句过滤和WHERE子句过滤的区别

这是一个非常有趣的概念,会提高你对于ON子句过滤和WHERE子句过滤之间区别的基本理解。这并不完全是一个错误,只是演示了两者的用法,你可以根据业务需求选择最佳方案。

SELECT d.product_id, price, discount FROM product p RIGHT JOIN discount d ON p.product_id=d.product_id WHERE p.product_id>1;

结果:

如何提升查询技能

在这种情况下,过滤条件在两个表格连接之后生效。因此,所得结果不包含d.product_id≤1的行(同理,显然也不包含p.product≤1的行)。

解决方法:使用AND,注意结果上的不同。

SELECT d.product_id, price, discount FROM product p RIGHT JOIN discount d ON p.product_id=d.product_id AND p.product_id>1;

结果:

如何提升查询技能

在这里,条件语句AND在两个表格连接发生之前计算。可以把此查询看作只适用于一个表(“product”表)的WHERE子句。现在,由于右连接,结果中出现了d.product_id≤1的行(显然还有p.product_id>1的行)。

请注意,ON子句过滤和WHERE子句过滤只在左/右/外连接时不同,而在内连接时相同。

5.在同一查询的WHERE子句中使用Windows函数生成的列&使用CASE WHEN子句

注意,不要在同一查询的WHERE子句中使用通过windows函数生成的列名以及CASE WHEN子句。

SELECT product_id, RANK() OVER (ORDER BY price desc) AS rk FROM product WHERE rk=2;

因为列rk由Windows函数生成,并且在同一查询的WHERE子句中使用了该列,这个查询结果会出现异常。

解决方法:这一问题可以通过使用临时表或者子查询解决。

WITH CTE AS ( SELECT product_id,     RANK() OVER (ORDER BY price desc) AS rk FROM product ) SELECT product_id FROM CTE WHERE rk=2;

SELECT product_id FROM ( SELECT product_id, RANK() OVER (ORDER BY price desc) AS rk FROM product; ) WHERE rk=2;

同样的方法也适用于使用CASE WHEN子句创建的列。请记住,Windows函数只能出现在SELECT或ORDER BY子句中。

6.BETWEEN的使用不正确

如果不清楚BETWEEN的有效范围,也许会得不到想要的查询结果。BETWEEN x AND y语句的有效范围包含x和y。

SELECT * FROM discount WHERE offer_valid_till BETWEEN ‘2019/01/01’ AND ‘2020/01/01’ ORDER BY offer_valid_till;

结果:

如何提升查询技能

在查询中,也许我们只想得到2019年的所有日期,但是结果中还包含了2020年1月1日。这是因为BETWEEN语句的有效范围包含2019/01/01和2020/01/01。

解决方法:相应地调整范围可以解决这个问题。

SELECT * FROM discount WHERE offer_valid_till BETWEEN ‘2019/01/01’ AND ‘2019/12/31’ ORDER BY offer_valid_till;

结果:

如何提升查询技能

现在,所有查询结果均为2019年的日期。

7.在GROUP BY语句后使用WHERE子句

在编写GROUP BY语句时,请注意WHERE子句的位置。

SELECT cateGory, AVG (price) FROM product p INNER JOIN discount d ON p.product_id=d.product_id GROUP BY category WHERE discount_amount>10;

由于将WHERE子句放在GROUP BY语句后,此查询是错误的。这是为什么呢?

WHERE子句用于过滤查询结果,这一步要在将查询结果分组之前实现,而不是先分组再过滤。正确的做法是先应用WHERE条件过滤减少数据,再使用GROUP BY子句通过聚合函数将数据分组(此处使用聚合函数AVG)。

解决方法:

SELECT category, AVG (price) FROM product p INNER JOIN discount d ON p.product_id=d.product_id WHERE discount_amount>10 GROUP BY category;

请注意主要sql语句的执行顺序:

  • FROM 子句

  • WHERE 子句

  • GROUP BY 子句

  • HAVING 子句

  • SELECT 子句

  • ORDER BY 子句

到此,关于“如何提升查询技能”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

您可能感兴趣的文档:

--结束END--

本文标题: 如何提升查询技能

本文链接: https://lsjlt.com/news/61884.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 如何提升查询技能
    这篇文章主要介绍“如何提升查询技能”,在日常操作中,相信很多人在如何提升查询技能问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何提升查询技能”的疑惑有所帮助!接下来,请跟着...
    99+
    2024-04-02
  • 如何提升MYSQL查询效率
    这篇文章主要介绍了如何提升MYSQL查询效率,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。MySQL数据库执行效率对程序的执行速度有很大的影...
    99+
    2024-04-02
  • 如何提升MySQL的查询速度
    这篇文章主要介绍“如何提升MySQL的查询速度”,在日常操作中,相信很多人在如何提升MySQL的查询速度问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何提升MySQL的查询...
    99+
    2024-04-02
  • mysql如何提升跨表查询效率
    mysql使用索引提升跨表的查询效率索引是帮助mysql高效获取数据的数据结构。其原理是通过不断的缩小想要获得数据的范围来筛选出最终想要的结果,同时把随机的事件变成顺序的事件,也就是我们总是通过同一种查找方式来锁定数据。mysql中如果没有...
    99+
    2024-04-02
  • MySQL 查询 - 排除某些字段的SQL查询,提升查询性能
    序言 某些时候,需要查询拥有很多很多字段的表,但是查询表时,其中有一些不需要查询的字段,会增加查询的负担,所以这时候,就需要排除这些冗余的字段,指定需要的字段查询,提升查询性能。 笔者尝试过使用 - ...
    99+
    2023-10-20
    mysql 数据库
  • SQLServer如何使用UNION代替OR提升查询性能
    这篇文章主要介绍SQLServer如何使用UNION代替OR提升查询性能,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!  SQLServer数据库查询的过程中,通过对SQL语...
    99+
    2024-04-02
  • Teradata的查询优化器和执行引擎是如何提升查询性能的
    Teradata的查询优化器和执行引擎通过以下方式提升查询性能: 查询优化器会根据查询语句的特性和表结构等信息,生成最优的查询计...
    99+
    2024-04-09
    Teradata
  • ApacheHudi性能提升三倍的查询优化
    目录1. 背景2. 设置3. 测试4. 结果5. 总结从 Hudi 0.10.0版本开始,我们很高兴推出在数据库领域中称为 Z-Order 和 Hilbert 空间填充曲线的高级数据...
    99+
    2024-04-02
  • 基金业绩查询系统如何利用科技提升投资效率
    在日益激烈的金融市场中,投资者如何在众多的基金产品中选择合适的投资标的,已成为困扰他们的一个大问题。为了解决这一问题,越来越多的金融机构开始使用基金业绩查询系统,帮助投资者在众多基金中筛选出业绩表现优秀的基金。本文将详细介绍基金业绩查询系统...
    99+
    2023-11-17
    查询系统 业绩 效率
  • 数据库查询优化黑客:利用意外的技巧提升性能
    创建覆盖索引,将常用查询列添加到索引中,避免表扫描。 创建复合索引,将多个经常一起使用的列添加到索引中,提升多字段查询性能。 使用部分索引,只对表的一部分数据创建索引,减少索引大小和查询时间。 查询重写 使用 JOIN 优化器,让数...
    99+
    2024-04-02
  • Python 缓存技术如何提升 Django 的性能?
    Django 是一个广受欢迎的 Python Web 框架,它提供了许多强大的功能,如 ORM、模板引擎、自动化管理等,但在处理大量请求时,性能可能成为一个问题。在这种情况下,缓存技术是一个非常有用的工具,可以显著提高 Django 应用...
    99+
    2023-10-23
    缓存 django windows
  • 如何提高MySQL循环查询的性能
    可以通过以下方式提高MySQL循环查询的性能: 使用索引:确保循环查询的字段都有适当的索引,这样可以加快查询速度。可以通过使用EX...
    99+
    2024-04-30
    MySQL
  • Golang 技术性能优化中如何提升并发性能?
    如何提升 go 应用程序的并发性能?使用 goroutine 池:减少 goroutine 创建和销毁开销。利用 channel 进行通信:高效共享数据,减少锁竞争。同步访问共享数据:使...
    99+
    2024-05-12
    golang 并发性能
  • 学习Go语言如何提升Hugo开发技能?
    大家好,今天本人给大家带来文章《学习Go语言如何提升Hugo开发技能?》,文中内容主要涉及到,如果你对Golang方面的知识点感兴趣,那就请各位朋友继续看下去吧~希望能真正帮到你们,谢谢!Hugo开...
    99+
    2024-04-04
  • DB2性能优化 – 如何通过db2优化工具提升SQL查询效率
           我们都知道,应用系统在运行一段时间后,用户报告系统运行会变慢,使他们不能完成所有的工作,完成事务和处理查询花费过长时间,或者应用程序...
    99+
    2024-04-02
  • 在SQL Server中什么是参数化查询它如何帮助提升性能
    参数化查询是指在执行SQL查询时使用参数来代替具体的数值或字符串,这样可以减少SQL语句的文本长度并且可以防止SQL注入攻击。参数化查询可以通过将查询的参数与查询语句分开来执行,从而提高查询的性能。 参数化查询可以帮助提升性能的原因包括: ...
    99+
    2024-06-04
    sql server
  • 必备 SQL 查询优化技巧提升网站访问速度
    在这篇文章中,我将介绍如何识别导致性能出现问题的查询,如何找出它们的问题所在,以及快速修复这些问题和其他加快查询速度的方法。 你一定知道,一个快速访问的网站能让用户喜欢,可以帮助网站从Google 上提高...
    99+
    2024-04-02
  • mysql如何实现升序查询
    小编给大家分享一下mysql如何实现升序查询,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧! 在mys...
    99+
    2024-04-02
  • win10系统如何盘查错提升系统性能
    这篇文章给大家分享的是有关win10系统如何盘查错提升系统性能的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。打开本地磁盘右键菜单,点击“属性”。在属性窗口中切换到“工具”标签,点击查错里的“检查”按钮。接着在错误...
    99+
    2023-06-28
  • 怎么优化提升seo技能
    这篇文章主要为大家展示了“怎么优化提升seo技能”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“怎么优化提升seo技能”这篇文章吧。  第一,不能很好的把握优化之间度的问题。尤其是在进行内容和外链...
    99+
    2023-06-10
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作