【MySQL通关之旅】从山脚到山顶(傲视群雄版)

2023-11-09 17:50

本文主要是介绍【MySQL通关之旅】从山脚到山顶(傲视群雄版),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

基本查询 select

查询指定 name,age 字段并返回

select name,age from 表名

查询所有字段并返回

select * from 表名

查询指定 name,age 字段并起别名(姓名,性别) 返回

select name as ‘姓名’,age as ‘性别’ from 表名

去除某字段重复记录

select distinct 字段名 from 表名

基本查询 where

语法 select 字段名 from 表名 where 筛选条件
在这里插入图片描述

查询在某个范围之间的(包含最小和最大)

select * from 表名 where 字段名 between 23 and 35

查询年龄是23,24,25的数据

select * from 表名 where age = 23 or age = 24 or age = 25
select * from 表名 where age in(23,24,25)

在这里插入图片描述

查询姓名是两个字

select * from 表名 where name like ‘__’

查询姓名第一个字是张

select * from 表名 where name like ‘张%’

查询姓名最后一个字是张

select * from 表名 where name like ‘%张’

查询姓名中包含建

select * from 表名 where name like ‘%建%’

聚合函数

在这里插入图片描述
在这里插入图片描述

分组查询 group by

在这里插入图片描述

语法
  • 在查询字段中只能使用分组字段和聚合函数
  • 在分组后还要价筛选条件不能使用where,得使用having

查询入职时间在 ‘2023-05-20’ 之前的员工,并对职位分组,获取员工数量>=2的职位
select 职位字段,count(*) from 表名 where create_time <= ‘2023-05-20’ group by 职位字段 having count(*) >=2

where与having区别
  • 执行时机不同:where是分组之前进行过滤,不满足where条件,不参与分组,而having是分组之后对结果进行过滤
  • 判断条件不同: where不能对聚合函数进行判断,而having可以。
  • 执行顺序: where > 聚合函数 > having
扩展 if(条件表达式,true取值,false取值)

select if(性别字段 == 0,‘女’,‘男’) as ‘age’,count(*) as ‘count’ from 表名 where create_time <= ‘2023-05-20’ group by 性别字段 having count >=2

扩展 (case 字段名 when 1 then '一' when 2 then '二' else '三' end)

select (case 分组字段 when 1 then 班主任’ when 2 then ‘讲师’ when 3 then '学工主管 when 4 then ‘教研主管’ else ‘未分配职位’ end) as ‘职位’,count(*) from 表名 group by 分组字段;

排序查询 order by

在这里插入图片描述

排序方式 order by 后面只能跟 asc(升序) 或者desc(降序)

根据入职时间进行降序排序,如果入职时间相等就对更新时间进行降序排序
select * from 表名 order by create_time desc,update_time desc

注意
  • 如果是多字段排序,当第一个字段值相同时,才会根据第二个字段进行排序

分页查询

在这里插入图片描述

  • 起始索引计算公式: (页码 - 1) * 查询记录数
注意
  • limit 起始索引从0开始

多表查询

多表具有三种关系
  • 一对一
    • 在任意一方中添加外键,关联另一方的主键
  • 一对多
    • 在多一方中添加外键,关联另一方的主键
  • 多对多
    • 添加中间表来关联,中间表中应至少有两个外键,来关联两张表的主键
内连接

根据入职时间进行降序排序,如果入职时间相等就对更新时间进行降序排序
select * from 表名 order by create_time desc,update_time desc在这里插入图片描述

  • 隐式内连接 查询员工姓名以及所属的部门 -> 消除笛卡尔积
    • select 员工表.name,部门表.name from 员工表,部门表 where 员工表.部门表id = 部门表.id
    • 起别名 select a.name,b.name from 员工表 a,部门表 b where a.部门表id = b.id
  • 显式内连接 查询员工姓名以及所属的部门 -> 消除笛卡尔积
    • select 员工表.name,部门表.name from 员工表 [inner] join 部门表 on 员工表.部门表id = 部门表.id
    • 起别名 select a.name,b.name from 员工表 a [inner] join 部门表 b on a.部门表id = b.id
外连接

在这里插入图片描述

左连接(以左边为准) 右连接(以右边为准)

  • 左外连接 查询员工表 员工姓名以及所属的部门 (此时已左边员工表为准)
    • 起别名 select a.name,b.name from 员工表 as a left [outer] join 部门表 as b on where a.部门表id = b.id
  • 右外连接 查询部门表 员工姓名以及所属的部门 (此时已右边部门表为准)
    • 起别名 select a.name,b.name from 员工表 as a right [outer] join 部门表 as b on where a.部门表id = b.id

案例

在这里插入图片描述

  • 查询价格低于10元的菜品的名称 、价格及其菜品的所属分类
    select d.name,d.price,c.name from dish as d left join category as c on where d.category_id = c.id and d.price < 10;
  • 查询所有价格在10元(含)到50元(含)之同 且 状态为”起售”的菜品,展示出菜品的名称、价格 及其菜品的分类名称即使求品没有分类 ,也需要将菜品查询出来)
    select d.name,d.price,c.name from dish as d left join category as c on where d.category_id = c.id and d.price between 10 and 50 and d.status = 1;
  • 查询每个分类下最贵的菜品,展示出分类的名称、最贵的菜品的价格
    select c.name,max(d.price) from category as c left join dish as d on where d.category_id = c.id group by c.name;
  • 查询各个分类下菜品状态为’起售’, 并且该分类下菜品总数大于等于3的分类名称
    select c.name,count(*) as ct from dish as d left join category as c on where d.category_id = c.id and d.status = 1 group by c.name having ct >= 3;
  • 查询出"商务套餐A" 中包含哪些菜品(菜品名称、价格、份数)
    select s.name,s.price,d.name,d.price,sd.copies from setmeal as s ,setmeal_dish as sd, dish as d where s.id = sd.setmeal_id and sd.dish_id = d.id and s.name = ‘商务套餐A’;
  • 查询出低于菜品平均价格的菜品信息
    select * from dish shere price < (select avg(price) from dish);

这篇关于【MySQL通关之旅】从山脚到山顶(傲视群雄版)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/377658

相关文章

SQL BETWEEN 语句的基本用法详解

《SQLBETWEEN语句的基本用法详解》SQLBETWEEN语句是一个用于在SQL查询中指定查询条件的重要工具,它允许用户指定一个范围,用于筛选符合特定条件的记录,本文将详细介绍BETWEEN语... 目录概述BETWEEN 语句的基本用法BETWEEN 语句的示例示例 1:查询年龄在 20 到 30 岁

MySQL DQL从入门到精通

《MySQLDQL从入门到精通》通过DQL,我们可以从数据库中检索出所需的数据,进行各种复杂的数据分析和处理,本文将深入探讨MySQLDQL的各个方面,帮助你全面掌握这一重要技能,感兴趣的朋友跟随小... 目录一、DQL 基础:SELECT 语句入门二、数据过滤:WHERE 子句的使用三、结果排序:ORDE

MySQL MCP 服务器安装配置最佳实践

《MySQLMCP服务器安装配置最佳实践》本文介绍MySQLMCP服务器的安装配置方法,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下... 目录mysql MCP 服务器安装配置指南简介功能特点安装方法数据库配置使用MCP Inspector进行调试开发指

mysql中insert into的基本用法和一些示例

《mysql中insertinto的基本用法和一些示例》INSERTINTO用于向MySQL表插入新行,支持单行/多行及部分列插入,下面给大家介绍mysql中insertinto的基本用法和一些示例... 目录基本语法插入单行数据插入多行数据插入部分列的数据插入默认值注意事项在mysql中,INSERT I

一文详解MySQL如何设置自动备份任务

《一文详解MySQL如何设置自动备份任务》设置自动备份任务可以确保你的数据库定期备份,防止数据丢失,下面我们就来详细介绍一下如何使用Bash脚本和Cron任务在Linux系统上设置MySQL数据库的自... 目录1. 编写备份脚本1.1 创建并编辑备份脚本1.2 给予脚本执行权限2. 设置 Cron 任务2

SQL Server修改数据库名及物理数据文件名操作步骤

《SQLServer修改数据库名及物理数据文件名操作步骤》在SQLServer中重命名数据库是一个常见的操作,但需要确保用户具有足够的权限来执行此操作,:本文主要介绍SQLServer修改数据... 目录一、背景介绍二、操作步骤2.1 设置为单用户模式(断开连接)2.2 修改数据库名称2.3 查找逻辑文件名

SQL Server数据库死锁处理超详细攻略

《SQLServer数据库死锁处理超详细攻略》SQLServer作为主流数据库管理系统,在高并发场景下可能面临死锁问题,影响系统性能和稳定性,这篇文章主要给大家介绍了关于SQLServer数据库死... 目录一、引言二、查询 Sqlserver 中造成死锁的 SPID三、用内置函数查询执行信息1. sp_w

canal实现mysql数据同步的详细过程

《canal实现mysql数据同步的详细过程》:本文主要介绍canal实现mysql数据同步的详细过程,本文通过实例图文相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的... 目录1、canal下载2、mysql同步用户创建和授权3、canal admin安装和启动4、canal

SQL中JOIN操作的条件使用总结与实践

《SQL中JOIN操作的条件使用总结与实践》在SQL查询中,JOIN操作是多表关联的核心工具,本文将从原理,场景和最佳实践三个方面总结JOIN条件的使用规则,希望可以帮助开发者精准控制查询逻辑... 目录一、ON与WHERE的本质区别二、场景化条件使用规则三、最佳实践建议1.优先使用ON条件2.WHERE用

MySQL存储过程之循环遍历查询的结果集详解

《MySQL存储过程之循环遍历查询的结果集详解》:本文主要介绍MySQL存储过程之循环遍历查询的结果集,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言1. 表结构2. 存储过程3. 关于存储过程的SQL补充总结前言近来碰到这样一个问题:在生产上导入的数据发现