MySQL笔记-基础篇(一):查询

博客主页:     南来_北往

系列专栏:Spring Boot实战


MySQL是一种广泛使用的关系型数据库管理系统,它基于结构化查询语言(SQL)来管理和操作数据。下面将依次探讨MySQL查询的各个方面,确保理解扎实,能够在实际工作中运用。具体分析如下:

  1. 基础查询语句

    • 查询字段:在MySQL中,查询一个或多个字段是最基本的操作。可以通过SELECT语句实现这一点。例如,查询单个字段“last_name”可以使用“SELECT last_name FROM employees;”。若要查询多个字段,比如“last_name”和“first_name”,则可以使用“SELECT last_name, first_name FROM employees;”。
    • 查询所有字段:如果需要查询表中的所有字段,可以使用星号(*)通配符。例如,查询employees表的所有字段可以写作“SELECT * FROM employees;”。
    • 查询常量和表达式:除了查询字段外,还可以查询常量值和表达式的结果。比如,“SELECT 10 AS constant;”将返回一个名为constant的列,包含数值10。对于表达式,例如“SELECT 100 / 9 AS result;”将会计算该表达式并返回结果。
    • 查询函数:MySQL支持在查询中使用函数。如使用版本信息函数“SELECT VERSION();”将返回数据库的版本信息。
    • 起别名:在查询时可以为字段或表达式设置别名,以提高结果集的可读性。使用AS关键字为字段设置别名,如“SELECT last_name AS surname, first_name AS forename FROM employees;”。如果不使用AS,可以直接在字段名后跟上别名,例如“SELECT last_name surname, first_name forename FROM employees;”。
  2. 条件查询

    • 按条件表达式筛选:通过在WHERE子句中指定条件来筛选数据。例如,要找出salary大于12000的员工信息,可以使用“SELECT * FROM employees WHERE salary > 12000;”。
    • 按逻辑表达式筛选:可以使用逻辑运算符构建更复杂的筛选条件。比如,查询工资在10000到20000之间的员工信息,可以使用“SELECT last_name, salary, commission_pct FROM employees WHERE salary >= 10000 AND salary <= 20000;”。
    • 模糊查询:LIKE运算符允许进行模糊匹配,通常与通配符一起使用。例如,要查找last_name字段中包含字母"a"的所有员工信息,可以使用“SELECT * FROM employees WHERE last_name LIKE '%a%';”。
    • BETWEEN AND范围查询:BETWEEN AND用于查询在指定范围内的值。例如,要选择employee_id在100到120之间的员工信息,可以使用“SELECT * FROM employees WHERE employee_id BETWEEN 100 AND 120;”。
    • IN列表查询:IN操作符允许指定一个值列表,查询某个字段是否在这些值中的记录。比如,要找出job_id为'IT_PROG'或'AD_VP'的员工信息,可以写作“SELECT last_name, job_id FROM employees WHERE job_id IN ('IT_PROG', 'AD_VP');”。
    • NULL值处理:IS NULL和IS NOT NULL操作符可以用来判断字段值是否为NULL。例如,要找出没有奖金的员工信息,可以使用“SELECT last_name FROM employees WHERE commission_pct IS NULL;”。
  3. 排序和分页查询

    • 排序查询:使用ORDER BY子句可以根据一个或多个字段对结果集进行排序。例如,要按照salary降序排列员工信息,可以写为“SELECT * FROM employees ORDER BY salary DESC;”。
    • 分页查询:当结果集较大时,为了方便查看,可以使用LIMIT子句进行分页。假设每页显示10条记录,要查询第3页的内容,可以使用“SELECT * FROM employees ORDER BY salary DESC LIMIT 20, 10;”这样会跳过前20条记录,然后取得接下来的10条。
  4. 复杂查询

    • 聚合函数:聚合函数能够对一组值执行计算,返回单个值。常用的聚合函数包括COUNT、SUM、AVG、MAX和MIN。比如,要统计每个部门的员工数量,可以使用“SELECT department_id, COUNT(*) FROM employees GROUP BY department_id;”。
    • 分组查询:使用GROUP BY子句可以根据一个或多个列将结果集划分成组。在进行分组查询时,SELECT子句中的非聚合列通常是GROUP BY子句中的列。例如,查询每个部门平均工资可以使用“SELECT department_id, AVG(salary) AS average_salary FROM employees GROUP BY department_id;”。
    • HAVING子句筛选:HAVING子句用于在GROUP BY查询中添加筛选条件,类似于WHERE子句,但作用于组,而非个别记录。例如,要找出平均工资大于30000的部门,可以使用“SELECT department_id, AVG(salary) AS average_salary FROM employees GROUP BY department_id HAVING AVG(salary) > 30000;”。
  5. 联查查询

    • 内连接:内连接(INNER JOIN)只返回两个表中匹配条件的记录。例如,如果有两个表employees和departments,想查询所有员工及其对应的部门信息,可以使用“SELECT employees.last_name, employees.department_id, departments.department_name FROM employees INNER JOIN departments ON employees.department_id = departments.department_id;”。
    • 外连接:与内连接不同,外连接(OUTER JOIN)不仅返回匹配的记录,还返回其中一个表中不匹配的记录。例如,左外连接(LEFT OUTER JOIN)会返回左表(employees)的所有记录以及右表(departments)中匹配的记录。如果没有匹配,结果是NULL。其语法为“SELECT employees.last_name, employees.department_id, departments.department_name FROM employees LEFT OUTER JOIN departments ON employees.department_id = departments.department_id;”。
    • 自连接:自连接是同一个表内部的连接,通常用于比较表中的行或者找到满足特定关系的不同行。比如,要找出同一部门内员工薪水的差异,可以使用自连接。“SELECT e1.last_name AS employee1, e2.last_name AS employee2, ABS(e1.salary - e2.salary) AS salary_difference FROM employees e1 JOIN employees e2 ON e1.department_id = e2.department_id WHERE e1.employee_id != e2.employee_id;”。
  6. 子查询

    • 单行子查询:子查询是嵌套在另一个SQL查询中的查询,可以放在WHERE或HAVING子句中,也可以作为表达式的一部分。单行子查询是指只返回一个值的子查询。例如,要找出薪水最高的员工信息,主查询会使用子查询返回的最高薪水作为参照:“SELECT last_name, salary FROM employees WHERE salary = (SELECT MAX(salary) FROM employees);”。
    • 多行子查询:多行子查询返回一组值,可以使用IN操作符来检查主查询中的值是否在子查询返回的值列表中。例如,查找所有属于部门名称为"Sales"的员工的详细信息:“SELECT last_name, department_id FROM employees WHERE department_id IN (SELECT department_id FROM departments WHERE department_name = 'Sales');”。
    • 关联子查询:关联子查询是指子查询引用了外部查询中的表。这种类型的子查询可以根据外部查询的每一行动态地生成结果。例如,要找出每个员工的工资等级(即比该员工工资高的员工的数目),可以使用:“SELECT last_name, salary, (SELECT COUNT(*) FROM employees e2 WHERE e2.salary > e1.salary) AS salary_rank FROM employees e1;”。

掌握MySQL的基础查询是理解和使用数据库的重要步骤。从简单的字段查询到复杂的子查询和连接查询,每种查询都有其特定的应用场景和功能。此外,各种查询相关的注意事项也需要特别留心:

  • 注释的重要性:在编写复杂的SQL查询时,不要忘记利用注释来提高代码的可读性和维护性。MySQL中可以使用“--”为单行注释,“/* */”为多行注释。
  • 字符集和校对:在设计数据库和写入查询时应注意字符集和校对规则的选择,以确保正确处理不同语言和编码的文本数据。
  • 索引的使用:了解何时使用索引能大幅提高查询性能,特别是在处理大量数据时。创建合适的索引可以加快检索速度,但同时也会影响数据的更新操作和占用额外的存储空间。
  • 安全性考虑:在公开的查询中避免直接暴露敏感信息,同时合理配置用户权限,防止未授权的数据访问或改动。

综上所述,MySQL查询是数据库操作的核心内容之一,它不仅涉及基本的SELECT语句,还包括复杂的连接、聚合和子查询等高级用法。要想熟练掌握这些技能,除了理论学习之外,实践操作同样重要。建议定期进行练习,并通过案例分析来深化理解。随着经验的积累,你将能够更加高效地利用MySQL进行数据管理和信息提取。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/395633.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机视觉——凸包计算

现在有一大堆点&#xff0c;然后你要找出一个可以围住这些点且面积最小的凸多边形&#xff0c;这个凸多边形称为凸包。 显而易见&#xff0c;如果要面积最小&#xff0c;那凸包的顶点势必得是这一大堆点的几个点&#xff0c;你也可以想成是用一条橡皮筋把这些点圈起来。 先把各…

Python中的 `break` 语句:掌握循环控制的艺术

Python中的 break 语句&#xff1a;掌握循环控制的艺术 下滑即可查看博客内容 &#x1f308; 欢迎莅临我的个人主页 &#x1f448;这里是我静心耕耘深度学习领域、真诚分享知识与智慧的小天地&#xff01;&#x1f387; &#x1f393; 博主简介&#xff1a;985高校的普通本硕…

【大模型系列篇】论文解读:Transformer - Attention Is All You Need (2017)

Attention Is All You Need (Transformer) 是当今大模型初学者必读的一篇论文&#xff0c;已经有不少业内大佬都翻译解读过这篇论文&#xff0c;此处仅作为自己学习的记录。该论文是由谷歌机器翻译团队于2017年发表在NIPS &#xff0c;提出了一个只基于attention的结构来处理序…

【iOS】OC关键字总结及底层原理(上)

目录 线程安全相关的关键字atomic&nonatomic 作用域相关的关键字static、extern、const&auto 读写权限相关和指定方法名的关键字内存管理相关的关键字&#xff08;或方法&#xff09;1. 引用计数的存储SideTableretain方法源码分析release方法源码分析dealloc方法源码分…

嵌入式初学-C语言-十九

指针的引入 为函数修改实参提供支持为动态内存管理提供支持为动态数据及结构提供支持为内存访问提供另一种途径 指针的概述 内存地址&#xff1a; 系统为了内存管理的方便将内存划分为一个个内存单元&#xff08;一个内存单元占一个字节&#xff09;&#xff0c;并为每一个…

用Vue和Axios将数据库数据显示在前端页面

在本次实例中Vue只用在了前端部分&#xff0c;Axios用于向后端请求数据&#xff0c;我们这里要用到Ajax技术来访问后端数据。 HTML&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name&quo…

全新博客X主题/简约WordPress主题模板/主题巴巴/免授权版源码+自适应设计

源码简介&#xff1a; 博客X这款超酷的Wordpress主题&#xff0c;是主题巴巴团队打造的设计杰作。想象一下&#xff0c;你的博客首页能展示那些炫酷的幻灯片置顶文章、还有各种精心策划的专题列表&#xff0c;这些内容模块的设计简直吸睛了&#xff0c;能让来访的用户眼前一亮…

数据结构和算法|递归算法那些事(递归算法的时间复杂度、尾递归优化、斐波那契数列)

对于文章的第一部分&#xff0c;递归算法的时间复杂度&#xff0c;来自于代码随想录文章:通过一道面试题目&#xff0c;讲一讲递归算法的时间复杂度&#xff01; 对于第二节尾递归优化来自于B站&#xff1a;尾递归优化&#xff1a;你的递归调用是如何被优化的&#xff1f; 文章…

XML(可扩展标记语言)

QDomDocument doc;QDomElement ss doc.createElement("root");//创建标签 //ss标签添加到文档对象doc.appendChild(ss);//doc.save()auto hero doc.createElement("hero");ss.appendChild(hero);hero.setAttribute("id",10086);//为hero添加属…

MySQL——数据表的基本操作(一)创建数据表

数据库创建成功后,就需要创建数据表。所谓创建数据表指的是在已存在的数据库中建立新表。需要注意的是&#xff0c;在操作数据表之前&#xff0c;应该使用 “ USE 数据库名 ” 指定操作是在哪个数据库中进行&#xff0c;否则会抛出 “ No database selected ” 错误。创建数据表…

Tomcat 使用和配置文件(详解)

一.tomcat 介绍 1. tomcat 概述 自从JSP发布之后&#xff0c;推出了各式各样的JSP引擎。Apache Group在完成GNUJSP1.0的开发以后&#xff0c;开始考虑在SUN的JSWDK基础上开发一个可以直接提供Web服务的JSP服务器&#xff0c;当然同时也支持 Servlet&#xff0c;这样Tomcat就诞…

[自学记录09*]关于模糊效果降采样优化性能的小实验

一、降采样在模糊中的优化 这两天接手了几个高度定制化的模糊&#xff0c;包括不限于放射和旋转状的径向模糊&#xff0c;移轴模糊&#xff0c;景深的散景模糊等等&#xff0c;这些效果在游戏中非常常见。 其实模糊的原理都差不多&#xff0c;无非就是对UV偏移后重新采样再求…

《Python爬虫逆向实战》绕过debugger的方法汇总

禁用断点 打开控制台&#xff0c;点击右边的禁用断点按钮。 点击之后再刷新下&#xff0c;就会发现debugger失效了。 注&#xff1a;这种方法有个 弊端&#xff0c;就是我们在代码中下的断点也都将失效。 Add script to ignore list 在代码文件中任意位置右键&#xff0c;然…

51单片机—串口

一、 串口基本认知 串行接口简称串口&#xff0c;也称串行通信接口或串行通讯接口&#xff08;通常指COM接口&#xff09;&#xff0c;是采用串行通信方 式的扩展接口。串行接口&#xff08;Serial Interface&#xff09;是指数据一位一位地顺序传送。其特点是通信线路简 单&a…

【C++ 面试 - 基础题】每日 3 题(七)

✍个人博客&#xff1a;Pandaconda-CSDN博客 &#x1f4e3;专栏地址&#xff1a;http://t.csdnimg.cn/fYaBd &#x1f4da;专栏简介&#xff1a;在这个专栏中&#xff0c;我将会分享 C 面试中常见的面试题给大家~ ❤️如果有收获的话&#xff0c;欢迎点赞&#x1f44d;收藏&…

【网络安全】玲珑安全第四期

鉴于玲珑安全漏洞挖掘前三期课程取得的优异成绩和获得的强烈反响,我们决定启动玲珑安全第四期漏洞挖掘培训计划。 文章目录 往期学员收获基础学员报喜(部分)课程反馈第四期课程课程内容免费课程往期学员收获 第一期课程总结及学员收获:->点我查看第一期学员收获<- …

性能测试工具LoadRunner

前言&#x1f440;~ 上一章我们介绍了性能测试的一些基本概念&#xff0c;重要的是性能测试的各项指标&#xff0c;今天我们使用性能测试工具LoadRunner简单的完成一次性能测试 性能测试Load Runner LoadRunner是什么&#xff1f; LoadRunner安装 LoadRunner脚本录制 1.录…

算法板子:质数——判定质数、分解质因数、筛质数

目录 一、判定质数 1. 代码 二、分解质因数 1. 质因数的概念 2. 代码 三、筛质数——获取1~n中所有质数的个数 1. 合数的概念 2. 代码 一、判定质数 1. 代码 #include <iostream> using namespace std;bool is_prime(int x) {// 1不是质数, 需要特判if (x 1) …

QT键盘和鼠标事件

这些事件都在QWidget 中的保护成员方法中 都是虚函数在头文件中声明了 需要类外重现实现 如果头文件中声明 类外无实现就会报错 void Widget::keyPressEvent(QKeyEvent *event) {switch (event->key()) {//获取按键case Qt::Key_W://按键wqDebug()<<"按下w"…

开源免费前端地图开发组件xdh-map

xdh-map是一个基于Openlayers的地图应用Vue组件&#xff0c;具有多方面的功能和特点。以下是对xdh-map的详细介绍&#xff1a; 一、功能与特性 内置多种地图瓦片&#xff1a;xdh-map内置了百度、高德、天地图等地图瓦片&#xff0c;使得开发者可以方便地在应用中集成多种地图…