数据库的完整查询语法

  在平常的工作中经常需要与数据库打交道 , 虽然大多时间都是简单的查询抑或使用框架封装好的ORM的查询方法 , 但是还是要对数据库的完整查询语法做一个加深理解

数据库完整查询语法框架

select [distinct] 字段1 [as 别名], ..., 字段n [as 别名] from [库名.]表名[where 约束条件group by 分组依据having 过滤条件order by 排序的字段limit 限制显示的条数];
注:
1.查表中所有字段用*表示(select * from ...)
2.条件的书写规则严格按照语法顺序书写,可以缺省,但不可以错序
3.约束条件的流程:from -> where -> group by -> having -> distinct -> order by -> limit
4.字段可以起别名
5.字段可以直接做运算 select age + 1 'new_age' from emp;
6.分组后的条件均可以使用聚合函数
''''''
3. 伪代码解析流程
def from():return "查询的文件"
def where(file):return "条件筛选后的结果"
def group_by(res):return "分组后的结果"
def having(res):return "再次过滤后的结果"
def distinct(res):return "去重后的结果"
def order_by(res):return "排序后的结果"
def limit(res):return "限制条数后的结果"def select(from=from, where=null, ..., limit=null):file = from()res = where(file) if where else fileres = group_by(res) if group_by else res...res = limit(res) if limit else resreturn res
select(where=where, group_by=group_by)

  • 基础语法

    •   select field_name from Table_name  >>>      表中单个字段查询
    •   select * from Table_name  >>>  表中所有字段查询
  • where  条件

    •   条件可以是各种运算及正则匹配
1. 比较运算符```=    <    >    <=        >=        !=``````select * from emp where area!="上海";```2. 区间运算符between 10 and 20    # 表示10-20 之间in (10,20,30)            # 表示10,20或者30```select * from emp where id between 3 and 5; # [3, 5], 闭合区间,包含3和5
```3. 逻辑运算符and        or        not```select * from emp where area='山东' and port='济南';mysql> select * from emp where area='山东' and port='济南';+----+-------+--------+------+--------+--------+--------+-----------+| id | name  | gender | age  | salary | area   | port   | dep       |+----+-------+--------+------+--------+--------+--------+-----------+|  2 | owen  | 男     |   38 |    9.4 | 山东    | 济南   | 技术部     || 10 | kevin | 男     |   36 |    5.8 | 山东    | 济南   | 人资部     |+----+-------+--------+------+--------+--------+--------+-----------+2 rows in set (0.00 sec)
```4. 相似运算符(like)下划线或者%可以进行模糊匹配```select * from emp where name like '__en%'; # 匹配出Owenmysql> select * from emp where name like '__en%';+----+------+--------+------+--------+--------+--------+-----------+| id | name | gender | age  | salary | area   | port   | dep       |+----+------+--------+------+--------+--------+--------+-----------+|  7 | owen | 男     |   28 |    8.8 | 安徽    | 宣城    | 技术部    |+----+------+--------+------+--------+--------+--------+-----------+1 row in set (0.00 sec)
```5. 正则匹配(regexp)- 由于like完成模糊匹配的范围有限 , 可以模糊个数 , 但不能模糊类型- ------正则可以完成类型和个数的模糊匹配(只支持部分语法)
```pythonselect * from emp where name regexp '.*[0-9]+.*';  # 匹配出名字中带数字的记录mysql> select * from emp where name regexp '.*[0-9]+.*';+----+------+--------+------+--------+--------+--------+-----------+| id | name | gender | age  | salary | area   | port   | dep       |+----+------+--------+------+--------+--------+--------+-----------+| 13 | san1 | 男     |   30 |      6 | 上海    | 浦东   | 咨询部    || 14 | san2 | 男     |   30 |      6 | 上海    | 浦西   | 研发部    |+----+------+--------+------+--------+--------+--------+-----------+2 rows in set (0.00 sec)```

  • group by  分组依据

    •   以记录的字段共性对记录进行分组
    •   分组后字段可进行聚合函数处理
___聚合函数___max():最大值
min():最小值
avg():平均值
sum():和
count():记数
group_concat():组内字段拼接,用来查看组内其他字段

___example___

# eg1
# 每个部门的平均薪资
select dep, avg(salary) '平均薪资' from emp group by dep;

mysql> select dep, avg(salary) '平均薪资' from emp group by dep;
+-----------+-------------------+
|    dep    |    平均薪资        |
+-----------+-------------------+
|   咨询部   | 6.250000059604645 |
|   人资部   | 5.400000027247837 |
|   技术部   | 5.850000023841858 |
+-----------+-------------------+
3 rows in set (0.00 sec)

# eg:2
# 每个部门都有哪些人
select dep, group_concat(name) 'name' from emp group by dep;

mysql> select dep,group_concat(name) 'name' from emp group by dep;
+-----------+---------------------------------------+
|    dep    | name                                  |
+-----------+---------------------------------------+
|   咨询部   | san1,san,ying,zero                    |
|   技术部   | san2,kevin,owen,jiboy,tank,jerry,engo |
|   人资部   | monkey,yangsir                        |
+-----------+---------------------------------------+
3 rows in set (0.04 sec)

# eg3
# 各性别中附属于教学部的最高薪资
select max(salary) '最高薪资', gender from emp where dep='教学部' group by gender;

  • having  筛选

    •   对where和group by处理的结果进一步筛选 , 得到我们想要的数据
1.各部门的平均薪资
select dep, avg(salary) '平均薪资' from emp group by dep;2.平均薪资大于6w的部门(部门与部门的平均薪资)
解决: 以dep进行分组, 以avg(salary)作为判断条件(筛选)
select dep, avg(salary) '平均薪资' from emp group by dep having avg(salary) > 6;# 总结: having通过聚合函数结果完成筛选
select max(salary) from emp having max(salary) > 9.4;
# 虽然没有明确书写group by, 但在having中使用了聚合函数,所以该查询就将整个表当做一个默认大表来考虑,所以查询的字段只能为聚合函数的结果

  • order by  排序

    •   对筛选结果进行升序或者降序排列(默认是升序)
    •   升序:  asc ;         降序:  desc
# eg:order by age desc => 按照年龄降序
select * from emp order by age desc;# 需求:
# 将部门按照部门平均工资降序方式排序
select dep, avg(salary) from emp group by dep order by avg(salary) desc;

  • limit  限制

    •   显示最终数据结果的行数  ,  只能与数字配合使用
# limit 1:只能显示一行数据
# limit 6,5:从第6+1行开始显示5条数据(索引从0开始)select * from emp limit 1;
select * from emp limit 6,5;# 需求:
# 获得薪资最高的人的一条信息
select * from emp order by salary desc limit 1;

总结下来 , 对旧的知识又有了新的认识.....想起这并不是最完整的查询语法 , 更加完整的查询语法应该还要算上子查询与父查询, 时间太晚,未完待续......

转载于:https://www.cnblogs.com/liusijun113/p/10474293.html

Mysql数据库查询语法详解相关推荐

  1. Mysql查询汉字语法_Mysql数据库查询语法详解

    ___聚合函数___max():最大值min():最小值avg():平均值sum():和count():记数 group_concat():组内字段拼接,用来查看组内其他字段 ___example__ ...

  2. laravel 调试mysql_Laravel - MySQL数据库的使用详解3(Query Builder用法2:新增、修改、删除)...

    五.新增.修改.删除操作 在前文中我介绍了如何使用Query Builder(查询构造器)进行数据查询,下面接着介绍如何使用它进行数据的增.删.改操作.同样假设我们有如下用户表(user): 1,新增 ...

  3. MySQL 数据库 source 命令详解及实例

    MySQL 数据库 source 命令详解及实例 MySQL 数据库 source 命令,该命令是数据库导入命令.source 命令的用法非常简单,首先你需要进入 MySQL 数据库的命令行管理界面, ...

  4. linux系统——mysql数据库默认字符集详解

    linux系统--mysql数据库默认字符集详解 - mysql的字符集配置细化到四种 对数据库server配置 对库设置 对表设置 对列设置 - 对mysql-server设置 对server设置是 ...

  5. mysql数据库安装最详解

    数据库的基本概念 当今主流的数据库 SQL Server (微软公司产品) Oracle (甲骨文公司产品) DB2 (IBM公司产品) MySQL (甲骨文公司收购) 什么是mysql数据库 MyS ...

  6. 17@MySQL数据库读现象详解(脏读、幻读、不可重复读)

    文章目录 MySQL数据库读现象 一.数据库的读现象 1.脏读(dirty read):读取未提交数据 [案列详解] 2.不可重复读取 (nonrepeatable read):前后多次读取,数据内容 ...

  7. dbeaver连接mysql 驱动jar_Jmeter(七) 从入门到精通 建立数据库测试计划实战lt;MySQL数据库gt;(详解教程)...

    1.简介 在实际工作中,我们经常会听到数据库的性能和稳定性等等,这些有时候也需要测试工程师去评估和测试,上一篇文章宏哥主要介绍了jmeter连接和创建数据库测试计划的过程,宏哥在文中通过示例和代码非常 ...

  8. mysql数据库BKA算法详解

    BKA算法详解 Batched Key Access理解了 MRR 性能提升的原理,我们就能理解 MySQL 在 5.6 版本后开始引入的 BatchedKey Access(BKA) 算法了.这个 ...

  9. mysql from 嵌套查询,MySQL嵌套查询实例详解

    本文实例分析了MySQL嵌套查询.分享给大家供大家参考,具体如下: MySQl从4.11版后已经完全支持嵌套查询了,那么下面举些简单的嵌套查询的例子吧(源程序来自MySQL User Manual): ...

最新文章

  1. 增加了一行代码,让我们提高了3000%的性能
  2. java comparable接口_Java面试题之Java集合篇三
  3. java awt 初始化_Java awt项目开发
  4. spring-data-jpa原理探秘(2)-RepositoryQuery的用途和分类
  5. yarn依赖管理工具,和fis3构建工具 gulp详细用法
  6. 计算机内码汉字,gbk内码(汉字机内码在线查询)
  7. Redis key-value乱码问题
  8. 机顶盒系统升级服务器地址,tvbox
  9. 中国熊果苷市场运营效益及投资盈利预测报告(新版)2022-2027年
  10. windows用c++获取cpu温度
  11. [UER#6 C]逃跑
  12. 求三个数的最小公倍数的解法之美
  13. 电子面单打印机设置 天元打印机 佳博1324D错位校准自检
  14. SQL语句增删改查公司-员工3表典型案例
  15. c语言收银系统程序编码,C语言 超市收银系统.doc
  16. 物流围城 让今年双11商家拿什么发货?
  17. 数据中心硬件架构拆解分析
  18. 10.WebRTC实现网页录音功能
  19. (2021,StyleGAN3)无失真(Alias-Free)生成对抗网络
  20. xwiki 知识管理系统

热门文章

  1. Android OkHttp框架解析
  2. js 判断是否为null
  3. 使用Android Studio新建Project并建立多个module
  4. php 将内容中的图片的域名,php给编辑器中的图片地址添加域名
  5. Flutter开发使用PlatformView显示iOS原生View(50)
  6. Flutter开发之官网的第一个例子实现(46)
  7. 字符串与base64相互转换
  8. python中封装、继承、多态
  9. 类 Class 对象、定义、方法
  10. P2955 [USACO09OCT]奇数偶数Even? Odd?