基本查询 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通关之旅】从山脚到山顶(傲视群雄版)相关推荐

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

    Git分布式版本控制工具 版本控制器的方式 集中式版本控制工具 集中式版本控制工具,版本库是集中存放在中央服务器的,team里每个人work时从中央服务器下载代 码,是必须联网才能工作,局域网或互联网 ...

  2. MySQL:讨人喜欢的 MySQL replace into 用法(insert into 的增强版)

    讨人喜欢的 MySQL replace into 用法(insert into 的增强版) 在向表中插入数据的时候,经常遇到这样的情况:1. 首先判断数据是否存在: 2. 如果不存在,则插入:3.如果 ...

  3. 《MySQL 8从入门到精通(视频教学版)》免费送教学视频

    <MySQL 8从入门到精通(视频教学版)>京东当当天猫都有发售. 本书配套资源(源码课件教学视频)获得作者和出版社授权,文后提供清华社网盘(速度很快)的下载二维码,可用微信扫描,免费下载 ...

  4. mysql学习之旅-数据库自动备份-测试环境搭建

    #终于知道什么叫不会走先会跑了,刚开始接触第一个case就是数据库自动备份,我可是都没安装过啊?!   发完牢骚开始干活 首先,因为业务已经上线,不能随便动,先搭建测试环境吧 规划一下 版本:mysq ...

  5. 菜鸟的MySQL学习之旅(二)—查询语句

    MySQL 基础 (一)- 查询语句 1. SQL是什么?MySQL是什么? 2. 导入示例数据库 3. 查询语句 3.1. SELECT语句简介 3.2. SELECT语句的语法 3.3. 实例 4 ...

  6. Linux与MySql学习之旅(一): 离线安装MySQL和问题解决

    目录 应该是离线安装,这里在线下载了一个安装包: 应该是离线安装,这里在线下载了一个安装包: https://cdn.mysql.com/archives/mysql-5.7/mysql-5.7.28 ...

  7. 【Mysql学习之旅-2】经典sql面试题及答案分析

    前言 在学习了Mysql的基础知识后,我们用一套sql练习题来实战一下. 关于练习所需要的数据,让我们继续玩坏倚天屠龙的江湖. 1.学生表 student(s_id:学生id,s_name:学生姓名, ...

  8. golang mysql 诊断之旅(2000万开房数据被曝光引发的血案)

    最近由于某某漏洞原因,2000万开房数据被曝光,数据是csv格式,打开慢的要死,于是想把这2000w的开房数据导入mysql,然后用go写个简单的查询工具. 悲剧开始了: 第一步,下载 mysql模块 ...

  9. mysql通关面试宝典

    文章目录 1.mysql事务的常见异常和隔离级别 2.mysql的B树索引,B+树索引,哈希索引原理. 2.mysql的引擎 3.mysql中为什么用B+树 4.讲一讲索引,最左匹配原则(最佳左前缀) ...

  10. 【面试招聘】 美团提前批通关之旅

    这里是归辰的面经杂货铺,你想要的都有- 写在前面 作者是一名计算机科班的应届学弟,本文写在校招刚拿到offer后. 背景为计算机科班,从目前发表了一篇CCF C,本科主要是做语音合成方面的工作,研究生 ...

最新文章

  1. 2022-2028年中国轻型客车行业投资分析及前景预测报告
  2. el-table中每列设置同样的宽度导致表格宽度没法实现100%布局
  3. 工作分配问题pascal程序
  4. sqlmap 进行sql漏洞注入
  5. Symfony2模版引擎使用说明手册
  6. jquery全局变量_jQuery源码一个小细节,却很好地体现了性能优化的思想,很优秀...
  7. python学习笔记(python介绍)
  8. 电脑访问不了虚拟机ftp服务器,解决win环境下访问本机虚拟机中centos7 ftp服务器的问题...
  9. 【题解】SDOI2018战略游戏
  10. CSS盒子模型、浮动+例子分析
  11. 机柜风扇 的组成及如何正确安装 机柜散热风扇
  12. Unity3D游戏作品大盘点
  13. 全屏、退出全屏---兼容各浏览器 IE Chrom 火狐 360极速模式/兼容模式
  14. 基于51单片机的数字电压表c语言程序,基于51单片机的数字电压表的设计..doc
  15. SQL语句汇总(终篇)—— 表联接与联接查询
  16. COCOS+FGUI使用Airtest
  17. 使用RC522、mysql、树莓派构成的图书馆管理系统
  18. 阿诺德给物体加描边_Arnold(C4DToA)阿诺德渲染教程(116):Arnold 如何抠透明通道?透明物体后期合成方案!...
  19. 使用R并行方式对数值型数据离散化
  20. 根据两点经纬度计算两点距离...工具类

热门文章

  1. 10个堪称经典的电脑小技巧,让你办公事半功倍!
  2. dayjs 用法快速上手
  3. preferring built-in module ‘buffer‘ over local alternative at ‘buffer‘
  4. 【2.5w字吐血总结 | 新手必看】全网最详细MySQL笔记
  5. fastcgi协议管窥
  6. Axure使用心得体会
  7. 华为od 机试真题 C++ 实现【正方形数量 】
  8. Flutter的Don‘t use ‘BuildContext‘s across async gaps警告解决方法
  9. MTK 安卓核心板 WiFi 模块选型参考
  10. python高手养成百家号_离骚是词吗 使用Python分析屈原《离骚》中高频词并生成词...,电影,船舶买卖,中国船舶交易网,搜船论坛...