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

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进行数据管理和信息提取。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • EdgeWorkers 最佳实践丨助力流媒体创新
  • 深入理解 Java SPI - 概念、原理、应用
  • JavaScript基础(30)_事件的冒泡、事件的委派
  • 出行365:依托分布式数据库,让出行无忧 | OceanBase案例
  • ios语言基础
  • Android 通知栏推送功能
  • 学习笔记第二十二天
  • QT键盘和鼠标事件
  • 画菱形(曼哈顿距离)
  • 【深度学习】DeepSpeed,ZeRO 数据并行的三个阶段是什么?
  • mysql中B+树的数据存储
  • 【MySQL】最左前缀匹配原则
  • zdppy+vue3+onllyoffice开发文档管理系统项目实战 20240808 上课笔记
  • Java中的分布式日志与追踪
  • Postman Pre-request Script
  • 2017年终总结、随想
  • Android路由框架AnnoRouter:使用Java接口来定义路由跳转
  • CEF与代理
  • egg(89)--egg之redis的发布和订阅
  • FastReport在线报表设计器工作原理
  • react 代码优化(一) ——事件处理
  • vue2.0项目引入element-ui
  • windows下如何用phpstorm同步测试服务器
  • 编写符合Python风格的对象
  • 不上全站https的网站你们就等着被恶心死吧
  • 大主子表关联的性能优化方法
  • 力扣(LeetCode)357
  • 模型微调
  • 配置 PM2 实现代码自动发布
  • 七牛云 DV OV EV SSL 证书上线,限时折扣低至 6.75 折!
  • 让你成为前端,后端或全栈开发程序员的进阶指南,一门学到老的技术
  • 使用权重正则化较少模型过拟合
  • 体验javascript之美-第五课 匿名函数自执行和闭包是一回事儿吗?
  • 宾利慕尚创始人典藏版国内首秀,2025年前实现全系车型电动化 | 2019上海车展 ...
  • ​软考-高级-系统架构设计师教程(清华第2版)【第12章 信息系统架构设计理论与实践(P420~465)-思维导图】​
  • #我与Java虚拟机的故事#连载06:收获颇多的经典之作
  • (Oracle)SQL优化技巧(一):分页查询
  • (windows2012共享文件夹和防火墙设置
  • (二十九)STL map容器(映射)与STL pair容器(值对)
  • (附源码)ssm高校升本考试管理系统 毕业设计 201631
  • (十七)devops持续集成开发——使用jenkins流水线pipeline方式发布一个微服务项目
  • (一) 初入MySQL 【认识和部署】
  • (原創) 如何讓IE7按第二次Ctrl + Tab時,回到原來的索引標籤? (Web) (IE) (OS) (Windows)...
  • (转)Oracle 9i 数据库设计指引全集(1)
  • ***微信公众号支付+微信H5支付+微信扫码支付+小程序支付+APP微信支付解决方案总结...
  • .DFS.
  • .NET 8.0 发布到 IIS
  • .net Stream篇(六)
  • .net 程序发生了一个不可捕获的异常
  • .net 反编译_.net反编译的相关问题
  • .NET/C# 使用反射注册事件
  • .NET精简框架的“无法找到资源程序集”异常释疑
  • .vimrc 配置项
  • @ConfigurationProperties注解对数据的自动封装
  • [ vulhub漏洞复现篇 ] JBOSS AS 4.x以下反序列化远程代码执行漏洞CVE-2017-7504