连接
连接是在多个表之间通过一定的连接条件,使表之间发生关联,进而能从多个表之间获取数据。
在 WHERE子句中书写连接条件。
如果在多个表中出现相同的列名,则需要使用表名作为来自该表的列名的前缀。
N个表相连时,至少需要N-1个连接条件。

第七天(2018/8/1)

日期时间函数

  • CURDATE()和CURRENT_DATE() :获取当前日期函数;
  • NOW():返回服务器的当前日期和时间;
  • CURTIME():返回当前时间,只包含时分秒;
  • UTC_DATE():返回世界标准时间日期函数;
  • UTC_TIME():返回世界标准时间函数;
  • TIMEDIFF(expr1, expr2):返回两个日期相减相差的时间数;
  • DATEDIFF(expr1, expr2):返回两个日期相减相差的天数;
  • DATE_ADD(date,INTERVAL expr type):日期加上一个时间间隔值;
  • DATE_SUB(date,INTERVAL expr type):日期减去一个时间间隔值;
  • DATE(date)、TIME(date)、YEAR(date):选取日期时间的各个部分:
  • EXTRACT(unit  FROM  date):从日期中抽取出某个单独的部分或组合;
  • DAYOFWEEK(date) 、DAYOFMONTH(date) 、DAYOFYEAR(date):返回日期在一周、一月、一年中是第几天
  • DAYNAME、MONTHNAME:返回日期的星期和月份名称;
  • DATE_FORMAT(date,format):格式化日期;
  • TIME_FORMATE(time,formate):格式化时间;

流程控制函数

  • 常见的控制流程函数如下:

–  CASE

–  IF

–  IFNULL

–  NULLIF

  • CASE value WHEN [compare-value] THEN result [WHEN [compare-value] THEN result ...] [ELSE result] END
  • CASE WHEN [condition] THEN result [WHEN [condition] THEN result ...] [ELSE result] END
  • 在第一个方案的返回结果中, value=compare-value。
  • 而第二个方案的返回结果是第一种情况的真实结果。如果没有匹配的结果值,则返回结果为ELSE后的结果,如果没有ELSE 部分,则返回值为 NULL。
  • SELECT CASE 11 WHEN 1 THEN 'one'

WHEN 2 THEN 'two' ELSE 'more' END;

  • SELECT CASE WHEN 1>0 THEN 'true' ELSE 'false' END;
  • IF(expr1,expr2,expr3)

–  如果 expr1 是TRUE (expr1 <> 0 and expr1 <> NULL),则 IF()的返回值为expr2; 否则返回值则为 expr3。

–  IF() 的返回值为数字值或字符串值,具体情况视其所在语境而定。

–  SELECT IF(1>2,2,3);

  • SELECT IF(1<2,'yes ','no');
  • IFNULL(expr1,expr2)|NULLIF(expr1,expr2)

–  假如expr1 不为NULL ,则IFNULL() 的返回值为expr1 ; 否则其返回值为expr2 。

–  IFNULL() 的返回值是数字或是字符串,具体情况取决于其所使用的语境

  • Database():返回使用utf8 字符集的默认( 当前) 数据库名
  • Version():返回指示MySQL 服务器版本的字符串。
  • User():返回当前MySQL 用户名和机主名
  • Inet_aton():给出一个作为字符串的网络地址的点地址表示,返回一个代表该地址数值的整数。
  • Inet_ntoa():给定一个数字网络地址, 返回作为字符串的该地址的点地址表示。
  • Password(str):从原文密码str 计算并返回密码字符串,当参数为NULL 时返回NULL。
  • Md5(str):为字符串算出一个MD5 128 比特检查和。

多表查询

  • 笛卡尔积是:

–  第一个表中的所有行和第二个表中的所有行都发生连接。

  • 笛卡尔积在下列情况产生:

–  连接条件被省略

–  连接条件是无效的

  • 为了避免笛卡尔积的产生,通常需要在WHERE子句中包含一个有效的连接条件。

等值连接

用等于号的形式进行多表的连接

例:SELECT ENAME,DNAME,LOC

FROM EMP,DEPT

WHERE EMP.DEPTNO = DEPT.DEPTNO

限制歧义列名

  • 在用到多个表时可以使用表名作前缀来限定列;
  • 通过使用表前缀可以提高性能;
  • 通过使用列的别名可以区分来自不同表但是名字相同的列;

非等值连接

用不等号的形式进行多表连接

例:SELECT ENAME,SAL,GRADE

FROM EMP,SALGRADE

WHERE SAL >= LOSAL

AND SAL <= HISAL

自连接

自身连接,也叫自连接,是一个表通过某种条件和本身进行连接的一种方式,就如同多个表连接一样

SELECT T1.ENAME 员工姓名,T2.ENAME 上级姓名

FROM EMP T1,EMP T2

WHERE T1.MGR = T2.EMPNO

ANSI SQL:1999标准的连接语法

交叉连接

交叉连接会产生连个表的交叉乘积,和两个表之间的笛卡尔积是一样的;

使用CROSS JOIN 子句完成

例:

SELECT *

FROM EMP

CROSS JOIN DEPT

自然连接

自然连接是对两个表之间相同名字和数据类型的列进行的等值连接;

如果两个表之间相同名称的列的数据类型不同,则会产生错误;

使用NATURAL JOIN子句来完成

例:

SELECT *

FROM EMP

NATURAL JOIN DEPT

USING子句

自然连接是使用所有名称和数据类型相匹配的列作为连接条件,而USING子句可以指定用某个或某几个相同名字和数据类型的列作为连接条件。

例:

SELECT ENAME,DNAME,LOC

FROM EMP

JOIN DEPT

USING (DEPTNO)

注:

如果有若干个列名称相同但数据类型不同,自然连接子句可以用USING子句来替换,以指定产生等值连接的列。

如果有多于一个列都匹配的情况,使用USING子句只能指定其中的一列。

USING子句中的用到的列不能使用表名和别名作为前缀。

NATURAL JOIN子句和USING子句是相互排斥的,不能同时使用

ON子句

自然连接条件基本上是具有相同列名的表之间的等值连接;

如果要指定任意连接条件,或指定要连接的列,则可以使用ON子句;

用ON将连接条件和其它检索条件分隔开,其它检索条件写在WHERE子句;

ON子句可以提高代码的可读性。

例:

SELECT *

FROM EMP

JOIN DEPT

ON EMP.DEPTNO = DEPT.DEPTNO

JOIN SALGRADE

ON SAL BETWEEN LOSAL AND HISAL

左外连接

左外连接以FROM子句中的左边表为基表,该表所有行数据按照连接条件无论是否与右边表能匹配上,都会被显示出来。

SELECT *

FROM DEPT -- 哪张表需要全部显示哪张表就是主表,写在前面

LEFT JOIN EMP

ON DEPT.DEPTNO = EMP.DEPTNO

mysql学习第三天笔记的更多相关文章

  1. Elasticsearch7.X 入门学习第三课笔记----search api学习(URI Search)

    原文:Elasticsearch7.X 入门学习第三课笔记----search api学习(URI Search) 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出 ...

  2. 基于CentOS的MySQL学习补充三--使用Shell批量创建数据库表

    本文出处:http://blog.csdn.net/u012377333/article/details/47006087 接上篇介绍<基于CentOS的Mysql学习补充二--使用Shell创 ...

  3. iOS阶段学习第三天笔记(运算符)

    iOS学习(C语言)知识点整理笔记 1.运算符 一.算术运算符 1)表达式由变量.常量.运算符构成,有确定的类型和值 2)算术运算符包括: +(加),-(减),*(乘),/(除),%(模) 3)算术运 ...

  4. MySQL学习(三)主备分库分表和恢复数据 --- 2019年2月

    1.MySQL主备切换 readonly 设置对超级(super)权限是无效的,而用于同步更新的线程,就拥有超级权限. 建议在做主备数据库的时候,将备用数据库设置为只读.(反向用readonly来判断 ...

  5. iOS 阶段学习第三天笔记(运算符)

    iOS学习(C语言)知识点整理笔记 1.运算符 一.算术运算符 1)表达式由变量.常量.运算符构成,有确定的类型和值 2)算术运算符包括: +(加),-(减),*(乘),/(除),%(模) 3)算术运 ...

  6. 转MYSQL学习(三) 函数

    这一节主要介绍MYSQL里的函数,MYSQL里的函数很多,我这里主要介绍MYSQL里有而SQLSERVER没有的函数 数学函数 1.求余函数MOD(X,Y) MOD(X,Y)返回x被y除后的余数,MO ...

  7. MySQL学习(三) SQL基础查询

    其实在数据库最经常用的当属查询操作 基本语法 SELECT [ALL | DISTINCT | DISTINCTROW ] 字段列表 AS 字段别名 [FROM 表名 WHERE 条件表示式 GROU ...

  8. angularjs学习第三天笔记(过滤器第二篇---filter过滤器及其自定义过滤器)

    您好,我是一名后端开发工程师,由于工作需要,现在系统的从0开始学习前端js框架之angular,每天把学习的一些心得分享出来,如果有什么说的不对的地方,请多多指正,多多包涵我这个前端菜鸟,欢迎大家的点 ...

  9. MySQL学习(三)MySQL锁与事务

    本章我们着重讨论MySQL锁机制的特点,常见的锁问题,以及解决MySQL锁问题的一些方法或建议. 一.MySQL锁概述 相对其他数据库而言,MySQL的锁机制比较简单,其最显著的特点是不同的存储引擎支 ...

随机推荐

  1. Android 应用监听自身卸载,弹出用户反馈调查

    监听卸载情景和原理分析 1,情景分析 在上上篇博客中我写了一下NDK开发实践项目,使用开源的LAME库转码MP3,作为前面几篇基础博客的加深理解使用的,但是这样的项目用处不大,除了练练NDK功底.这篇 ...

  2. Java 开发23种设计模式

    设计模式(Design Patterns) ——可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了 ...

  3. php的yii框架开发总结10

    1.CActiveForm是Chtml类的封装,但是它有数据验证的功能,有三种方式:服务器端.客户端.Ajax数据验证. 服务器端验证:当整个表单页面被提交后,在服务器端 进行验证.如果存在任何验证错 ...

  4. 使用SSH密钥方式登录ubuntu Linux,指令(ssh-keygen 和 ssh-copy-id)

    实验目的 从myVM1(本地主机)上登录myVM2(远程主机).采用密钥方式,不输入密码. 测试环境 主机:window7 sp1 64位 专业版 虚拟机:VMware workstation 12 ...

  5. 同步软件UltraCompare 64位 软件及注册机

    软件及注册机下载: https://share.weiyun.com/f09e6243887e374ead1b3a3ab8f611a9 软件官方下载地址:  https://www.ultraedit ...

  6. 安卓手机下载YouTube视频的3种方法

    作为全球最大的在线视频网站,YouTube上面的内容可真是应有尽有啊,从教学视频到个人手工艺品制作流程,从各种搞笑视频到电视连续集等等,包罗万象.如果你想下载YouTube视频到电脑上面的话,网上有很 ...

  7. 金庸的武侠世界和SAP的江湖

    2018年10月30日晚,成都地铁一号线,Jerry手机app上突然弹出来一条金庸去世的新闻. Jerry识字很早,小学一年级就开始蹭我父亲的<射雕英雄传>看了.小时候,我爸工作的车间里有 ...

  8. win8下使用IIS服务器及自定义服务器端包含模块(SSI)步骤

    配置完过段时间就容易忘记,特此记录. 1.开启IIS服务器. 默认没有安装,需要先安装. 打开控制面板--> 打开“程序和功能”--> 左侧选择“启用或关闭windows功能”--> ...

  9. EF分组后把查询的字段具体映射到指定类里面的写法

    //先做基本查询 var querySql = from l in _logClinicDataOperationRepository.Table select new LogClinicDataOp ...

  10. 解方程求PH值,POJ(2006)

    题目链接:http://poj.org/problem?id=2006 解题报告: 题意看了半天,没看懂,再加上化学没学好,更加让我头痛. 假设1L溶解了x摩尔的酸:ka=m*x*nx/ori-x; ...