mysql

函数

  1. 单行函数

    exists 是否存在

  • 字符函数

    • ​ concat(a,b)拼接两个字符串

    • ​ ifnull(a+b,0) 如果a+b等于null,则返回0

    • upper,lower 大小写转换

      select upper(‘abc’);

    • substr/substring

    • instr 返回子串第一次出现的索引,如果找不到就返回0

    • trim 去除字符串前后的空格

    • replace(str,from_str,to_str)将第一个参数中的字符与第二个相等的字符替换成第三个参数

  • 数学函数

    • round 四舍五入
    • ceil 向上取整 返回>=该参数的最小整数
    • floor 向下取整 返回<=该参数的最大整数
    • truncate 截断
    • mod取余
  • 日期函数

    • now 返回当前系统日期+时间

    • curdate 返回当前系统日期,不i包含日期

    • curtime 返回当前时间,不包含日期

    • str_to_date 将日期格式的字符串转换为指定格式的日期

    • date_formate 将日期转换成字符

      DATE_FORMAT('2018/6/6','%年%月%日')

    • str_todate 将字符转换成日期

      STR_TO_DATE(’9-13-1999‘,‘%m-%d-%Y’)

  • 其他函数

  • 流程控制函数

  1. 分组函数(统计函数,聚合函数)

    sum 求和

    avg 平均值

    max 最大

    min 最小

    count 计算个数

    ​ count(1)、count(*)查询表中总条数

  2. group by

    select 分组函数 列(要求出现在group by 的后边)

    from 表 【where 筛选条件】

    group by 分组的列表

    【order by 子句】

where和having都是用来进行条件筛选的,where 是在分组前进行的,having是在分组后进行筛选的

连接查询

笛卡尔乘积现象:表1 有m行,表2:有n行,结果=m*n行

发生原因:没有有效的连接条件

如何避免:添加有效的连接条件

  • 内连接

    • 等值连接
    • 非等值连接
    • 自连接(同一张表,需要B字段作为A字段的查询条件。所以将同一张表看作两张表进行连接查询)
  • 外连接

    应用场景:用于查询一个表中有,另一个表中没有的纪录

    特点:1、外连接的查询结果为主表中的所有记录

    ​ 如果从表中有和他匹配的,则显示匹配的值

    ​ 如果从表中没有和他匹配,则显示为空

    ​ 外连接查询结果=内连接查询结果+主表中有而从表中没 有的记录

    ​ 2、左外连接,left join 左边是主表

    ​ 右外连接,right join 又表示主表

    ​ 3、左外和右外交换两个表的顺序,可以实现同样的效果

    • 左外连接

      left join

    • 右外连接

      right join

    • 全外连接

      full join(mysql不支持,大坑)

      查两个表的并集

    • 交叉连接

      cross join(实现笛卡尔乘积,目前感觉没啥用)

子查询

出现在其他语句中的select语句,成为子查询或内查询

外部的查询语句,称为主查询或外查询

分类:

按子查询出现的位置

select 后面

​ 仅仅支持标量子查询

from 后面

​ 支持表子查询

wherehaving后面

​ 标量子查询

​ 列子查询

​ 行子查询

exists后面(相关子查询)

​ 表子查询

按结果集的行列数不同:

标量子查询(结果集只有一行一列)

列子查询(结果集只有一列多行)

行子查询(结果集有一行多列)

表子查询(结果集一般为多行多列)

where或having后面

  1. 标量子查询(结果集只有一行一列)
  2. 列子查询(结果集只有一列多行)
  3. 行子查询(结果集有一行多列)

特点:

  1. 子查询一般放在小括号内
  2. 子查询一般放在条件右侧
  3. 标量子查询,一般搭配着单行操作符使用 > < >= <= = <>

列子查询,一般搭配这多行操作符使用

in、any/some、all

in/not in(等于列表中的任意一个)

any|some (和子查询返回的某一个值比较):可以被其他方式替代

all(和子查询返回的所有值比较):可以被其他方式替代

mysql学习+再复习的更多相关文章

  1. MySQL学习基础

    MySQL是被Sun公司收购了,所以也有热咖啡图标,不过MySQL的作者后来又做了一个MariaDB,小海豚图标,也很好用. MySQL学习: <MySQL网络数据库设计与开发>(电子工业 ...

  2. 数据库MySQL学习笔记高级篇

    数据库MySQL学习笔记高级篇 写在前面 学习链接:数据库 MySQL 视频教程全集 1. mysql的架构介绍 mysql简介 概述 高级Mysql 完整的mysql优化需要很深的功底,大公司甚至有 ...

  3. 我的MYSQL学习心得(一) 简单语法

    我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(五) 运 ...

  4. 我的MYSQL学习心得(四) 数据类型

    我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(五) 运 ...

  5. 我的MYSQL学习心得(五) 运算符

    我的MYSQL学习心得(五) 运算符 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据 ...

  6. 我的MYSQL学习心得(六) 函数

    我的MYSQL学习心得(六) 函数 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类 ...

  7. 我的MYSQL学习心得(七) 查询

    我的MYSQL学习心得(七) 查询 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类 ...

  8. 我的MYSQL学习心得(八) 插入 更新 删除

    我的MYSQL学习心得(八) 插入 更新 删除 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得( ...

  9. 我的MYSQL学习心得(十) 自定义存储过程和函数

    我的MYSQL学习心得(十) 自定义存储过程和函数 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心 ...

随机推荐

  1. 原生twig模板引擎详解(安装使用)

    最近在学习SSTI(服务器模板注入),所以在此总结一下 0x00 Twig的介绍 什么是Twig? Twig是一款灵活.快速.安全的PHP模板引擎. Twig的特点? 快速:Twig将模板编译为纯粹的 ...

  2. 带你自定义实现Spring事件驱动模型

    Spring 事件驱动模型概念 Spring 事件驱动模型就是观察者模式很经典的一个应用,我们可以通过Spring 事件驱动模型来完成代码的解耦. 三角色 Spring 事件驱动模型或者说观察者模式需 ...

  3. tmux安装配置与使用

    tmux安装 sudo apt-get install tmux tmux配置 在家目录下操作 cd git clone https://github.com/gpakosz/.tmux.git ln ...

  4. 【解决了一个小问题】gin框架中出现如下错误:"[GIN-debug] [WARNING] Headers were already written. Wanted to override status code 400 with 500"

    POST到数据到一条gin框架的接口后,客户端收到400错误,并且返回了业务中返回的"decode json fail". 关键代码是: func report(c *gin.Co ...

  5. 【简记】SpringBoot禁用Swagger

    楔子 Swagger 是 Java Web 开发中常用的接口文档生成类库,在开发和前后端联调时使用它来模拟接口调用能提高开发效率.但是,在生产环境可能并不需要它,一个原因是启用它会延长程序启动时间(动 ...

  6. SourceGenerator的应用: .Net多进程开发库 - Juxtapose

    背景 进程间通讯属于老生常谈的话题,可能已经有很多的通信示例代码,但在实际使用中需要做的东西还比较多.例如协议定制.消息收发.进程管理等都需要实现,进阶需求可能还需要实现回调函数.取消等. 个人在工作 ...

  7. 如何快速写出高质量的 Go 代码?

    前言 团队协作开发中,必然存在着不同的代码风格,并且诸如 http body close,unhandled error 等低级错误不能完全避免.通过使用 ci lint 能够及早的发现并修复问题,提 ...

  8. mongodb在插入数据环节避免数据重复的方法(爬虫中的使用update)

    mongo 去重 import pymongo client = pymongo.MongoClient() collection=client.t.test # collection.insert( ...

  9. el表达式中的${param}用法

    el表达式中的${param}? 1. 2. ${param.name} 等价于 request.getParamter("name"),这两种方法一般用于服务器从页面或者客户端获 ...

  10. Redis哨兵模式高可用解决方案

    一.序言 Redis高可用有两种模式:哨兵模式和集群模式,本文基于哨兵模式搭建一主两从三哨兵Redis高可用服务. 1.目标与收获 一主两从三哨兵Redis服务,基本能够满足中小型项目的高可用要求,使 ...