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

相关推荐
lcx_defender9 分钟前
【Docker】部署MySQL容器
mysql·docker·容器
m0_7482338812 分钟前
黑马程序员JavaWeb开发教程(前端部分) ---笔记分享
前端·笔记
1101 110131 分钟前
STM32-笔记10-手写延时函数(SysTick)
笔记·stm32·单片机
木易小熙38 分钟前
MySQL最左匹配原则是什么
数据库·mysql
2401_8582861140 分钟前
117.【C语言】数据结构之排序(选择排序)
c语言·开发语言·数据结构·笔记·算法·排序算法
Anna_Tong1 小时前
全局流量管理:提升用户体验与保障服务稳定性
运维·服务器·网络·数据库·安全·负载均衡
番茄电脑全能王1 小时前
《鸣潮》运行时提示找不到emp.dll是什么原因?缺失emp.dll文件要怎么解决?
网络·数据库·经验分享·游戏·电脑
1101 11011 小时前
STM32-笔记8-433M点灯
笔记
1101 11011 小时前
STM32-笔记14-排队控制系统
笔记·stm32·嵌入式硬件
苹果酱05672 小时前
Golang的文件解压技术研究与应用案例
java·vue.js·spring boot·mysql·课程设计