当前位置: 首页 > news >正文

MySQL和HiveSQL在查询上的区别

查询示例

假设有一个名为sales的表,包含字段product_id(产品ID)、product_name(产品名称)、amount(销售额)、sale_date(销售日期)。

查询某产品类别下各产品的总销售额,并按销售额降序排列
  • MySQL
SELECT product_name, SUM(amount) AS total_sales
FROM sales
WHERE product_name LIKE '类别名称%'
GROUP BY product_name
ORDER BY total_sales DESC;
  • HiveSQL
SELECT product_name, SUM(amount) AS total_sales
FROM sales
WHERE product_name LIKE '类别名称%'
GROUP BY product_name
ORDER BY total_sales DESC;

从这个简单的查询示例来看,两者的语法在基本的SELECTFROMWHEREGROUP BYORDER BY子句的使用上较为相似,但在一些细节和特定功能上存在以下差异:

查询差异

  • 表连接方式

    • MySQL :支持使用逗号分隔表名结合WHERE子句进行等值连接,如SELECT * FROM dual a,dual b WHERE a.key = b.key
    • HiveSQL :不支持等值连接,只能使用JOIN关键字进行表连接,如SELECT * FROM dual a JOIN dual b ON a.key = b.key
  • 特殊字符处理

    • MySQL :在拼接特殊字符时,可直接使用分号等,如SELECT concat(key,concat(';',key)) FROM dual
    • HiveSQL :特殊字符如分号需先进行八进制的ASCII码转义,如SELECT concat(key,concat('\\073',key)) FROM dual
  • 更新操作支持

    • MySQL :支持数据的更新操作,如UPDATE table_name SET column1 = value1, column2 = value2,... WHERE condition
    • HiveSQL :不支持数据的更新操作,只能通过INSERTINSERT OVERWRITE等方式覆盖或追加数据。
  • 函数使用

    • 分隔字符串

      • MySQL :使用substring_index函数,如SELECT substring_index("1,2,3",",",1)返回结果为1
      • HiveSQL :使用split函数,如SELECT split("1,2,3", ',')[0]返回结果为1
    • 时间转换函数

      • MySQL :使用from_unixtime函数,格式为from_unixtime(unix_timestamp, format),如SELECT p_id, from_unixtime(p_create_time/1000,'%y-%m-%d') AS times FROM poi WHERE p_parent_id = 4782760
      • HiveSQL :同样使用from_unixtime函数,但日期格式化字符串的写法有所不同,如SELECT p_id, from_unixtime(p_create_time div 1000,'YYYY-MM-dd HH:mm:ss') AS times FROM poi WHERE p_parent_id = 4782760
  • 空值判断

    • MySQLNULL表示空值,对于IS NULL的判断符合常规的空值逻辑。
    • HiveSQL :对于String类型的字段,若为空字符串(长度为0),对其进行IS NULL判断时结果为False
  • 分桶查询支持

    • HiveSQL :支持分桶查询,如CLUSTER BY分桶排序字段,或使用DISTRIBUTE BY分桶字段结合SORT BY排序字段。
    • MySQL :不支持分桶查询。
  • CTE 表达式支持

    • HiveSQL :支持CTE表达式,可临时存储某些语句的执行结果,方便复杂查询的编写。
    • MySQL :部分旧版本的 MySQL 不支持 CTE 表达式,但从 MySQL 8.0 开始支持。
http://www.dtcms.com/a/338258.html

相关文章:

  • 上网行为管理
  • 用户认证与应用控制技术
  • 深入浅出 SQL:数据库操作的核心语言完全指南
  • 【c++】从灵活到规范:自定义消息机制的设计与实践
  • day10(练习题)
  • Three.js 动画循环学习记录
  • 6 webUI中图生图重绘方式--涂鸦、涂鸦重绘、局部重绘、上传蒙版重绘
  • 生成式引擎优化(GEO)AI搜索优化专家竞争力报告
  • 检测手绘图中不规则曲线交点的方法和一般规则线条交点的方法
  • rom定制系列------小米cc9机型 原生安卓15系统 双版线刷root 定制修改功能项
  • 力扣(分发糖果)
  • 【完整源码+数据集+部署教程】海洋垃圾与生物识别系统源码和数据集:改进yolo11-RVB
  • 深度优先遍历dfs(模板)
  • VS Code Copilot 完整使用教程(含图解)
  • 【笔记ing】考试脑科学 脑科学中的高效记忆法
  • 图论:Floyd算法
  • 从数学原理推导的角度介绍大语言MOE架构的本质
  • Linux系统WireShark抓取本地网卡报文
  • uv 现代化的虚拟环境管理工具
  • 量化线性层,将原始的fp16/bf16权重加载到Linear8bitLt模块中,调用int8_module.to(“cuda”)量化 (44)
  • 视频讲解:CatBoost、梯度提升 (XGBoost、LightGBM)对心理健康数据、交通流量及股票价格预测研究
  • Dubbo 的SPI
  • 深入解析RabbitMQ与AMQP-CPP:从原理到实战应用
  • IDEA 配置终端提示符样式,通过脚本方式
  • IntelliJ IDEA 开发配置教程
  • WPF---数据模版
  • 监督学习(Supervised Learning)和 无监督学习(Unsupervised Learning)详解
  • PCIe ASPM详解
  • 14.Linux线程(2)线程同步、线程安全、线程与fork
  • 【秋招笔试】2025.08.17大疆秋招机考第一套