数据库的操作分开增删改查,其中查询操作基本占系统的90%,大家所说的优化SQL语句基本是优化查询语句。接下来将学习JOIN的用法,JOIN包括:INNER JOIN(内连接)、LEFT JOIN(左外连接)、RIGHT JOIN(右外连接)、FULL JOIN(全外连接)、CROSS JOIN(交叉连接)。在说明之前,先创建user、schoolMap、school三个表以便实验需要。

    

    

    

1、INNER JOIN

  1)、INNER JOIN返回两个表中联结字段相等的行,即两个表中联结字段都存在并且相等。

  2)、INNER 连接二个数据表的语法:

    SELECT * FROM 表A INNER JOIN 表B ON 表A.字段 = 表B.字段;

  3)、示例:

    

  4)、INNER JOIN 连接三个数据表的用法:

    SELECT * FROM (表1 INNER JOIN 表2 ON 表1.字段号=表2.字段号) INNER JOIN 表3 ON 表1.字段号=表3.字段号

    连接多个表以此类推

  5)、INNER JOIN使用的时候若不加ON条件等价于FULL JOIN不不加ON条件 、CROSS JOIN

    

    

    

    6、INNER INTO 后面的查询的条件加在ON后面和WHERE效果是一样的

    

2、LEFT JOIN(左外连接) 

  1)、LEFT JOIN返回包括左表中的所有记录和右表中联结字段相等的记录。

  2)、LEFT JOIN连接二个数据表的语法:

    SELECT * FROM 表A LEFT JOIN 表B ON 表A.字段 = 表B.字段;

  3)、LEFT JOIN示例:

    

  4)、LEFT JOIN 连接三个数据表的用法:

    SELECT * FROM (表1 LEFT JOIN 表2 ON 表1.字段号=表2.字段号) LEFT JOIN 表3 ON 表1.字段号=表3.字段号

    连接多个表以此类推

3、RIGHT JOIN(右外连接) 

  1)、RIGHT JOIN返回包括右表中的所有记录和左边表中联结字段相等的记录。

  2)、RIGHT JOIN连接二个数据表的语法:

    SELECT * FROM 表A RIGHT JOIN 表B ON 表A.字段 = 表B.字段;

  3)、RIGHT JOIN示例:

    

  4)、RIGHT JOIN 连接三个数据表的用法:

    SELECT * FROM (表1  RIGHT JOIN 表2 ON 表1.字段号=表2.字段号) RIGHT JOIN 表3 ON 表1.字段号=表3.字段号

    连接多个表以此类推

4、FULL JOIN

  MYSQL 不支持FULL JOIN 通过LEFT JOIN 与 RIGHT JOIN 来实现

  用法:

    select * from A left join B on A.id = B.id (where 条件)
    union
    select * from A right join B on A.id = B.id (where条件);

MYSQL学习笔记 (三)JOIN用法的更多相关文章

  1. MySql学习笔记三

    MySql学习笔记三 4.DML(数据操作语言) 插入:insert 修改:update 删除:delete 4.1.插入语句 语法: insert into 表名 (列名1,列名2,...) val ...

  2. MYSQL学习笔记三:日期和时间函数

    MYSQL学习笔记三:日期和时间函数 1. 获取当前日期的函数和获取当前时间的函数 /*获取当前日期的函数和获取当前时间的函数.将日期以'YYYY-MM-DD'或者'YYYYMMDD'格式返回 */ ...

  3. mysql学习笔记三 —— 数据恢复与备份

    要点: 1.存储引擎2.导入导出3.备份与恢复 查看当前数据库中的所有表use db1:show tables: 1.存储引擎 不同的发动机(引擎)适用的汽车类型不一样. 存储和处理的不同方式.不同的 ...

  4. MySQL学习笔记三:库和表的管理

    1.MySQL数据库服务配置好后,系统会有4个默认的数据库. information_schema:虚拟对象,其对象都保存在内存中 performance_schema:服务器性能指标库 mysql: ...

  5. mysql基本数据类型(mysql学习笔记三)

    Mysql数据类型 小数: 浮点:小数位可以变化 Float单精度默认精度6位左右 Double 双精度默认精度16位左右 支持,控制数值范围 Type(M,D) M表示所有数值位数(不包括小数点和符 ...

  6. MySQL学习笔记(三)—索引

    一.概述 1.基本概念       在大型数据库中,一张表中要容纳几万.几十万,甚至几百万的的数据,而当这些表与其他表连接后,所得到的新的数据数目更是要大大超出原来的表.当用户检索这么大量的数据时,经 ...

  7. MySQL学习笔记(三):常用函数

    一:字符串函数 需要注意的几个细节: 1.cancat中有一个字符串为null,则结果为null. 2.left(str,x) 和 right(str,x)中x为null,则不返回任何字符串,不是nu ...

  8. mysql学习笔记(三)

    -- 主键冲突(duplicate key) ,'xujian','anhui'); ,'xiewei','anhui'); ,'luyang','anhui');-- 主键冲突了 -- 可以选择性的 ...

  9. MySql学习笔记(三) —— 聚集函数的使用

    1.AVG() 求平均数 select avg(prod_price) as avg_price from products; --返回商品价格的平均值 ; --返回生产商id为1003的商品价格平均 ...

  10. Mysql学习笔记(三)对表数据的增删改查。

    正文内容. 这一部分是最简单的,也是最麻烦的.简单是因为其实只包括增删该插四个部分.大体上看,增加数据.删除数据.修改数据.查询数据都不麻烦啊,我们日常都是常用的.这个谁不会呢?以前在培训机构学mys ...

随机推荐

  1. APP版本号记录

    VoLTE版本: VT_BV0800V1.0.0B06 800M版本: NETARTIST_BV0800V1.0.0B01 看详细版本号:9831275#

  2. Linux内核中的Cache段

    Linux内核中的Cache段 原文地址:http://blogold.chinaunix.net/u2/85263/showart_1743693.html 最近移植LEON3的内核时,了解了一些简 ...

  3. BZOJ 3958 Mummy Madness

    Problem BZOJ Solution 算法:二分+扫描线 快要2019年了,就瞎写一篇博客来凑数,不然感觉太荒凉了-- 答案是可二分的,那么二分的依据是什么呢?不妨设当前二分的答案为\(mid\ ...

  4. 32.Longest Valid Parentheses---dp

    题目链接:https://leetcode.com/problems/longest-valid-parentheses/description/ 题目大意:找出最长的括号匹配的子串长度.例子:&qu ...

  5. 20行js代码制作网页刮刮乐

    分享一段用canvas和JS制作刮刮乐的代码,JS部分去掉注释不到20行代码效果如下 盖伦.jpg 刮刮乐.gif HTML部分 <body> ![](img/gailun.jpg) &l ...

  6. C语言实现int转换string

    #include <stdio.h> #include <stdlib.h> #include <string.h> int string2int(const ch ...

  7. PIL图片合成旋转缩放

    用PIL实现图片的旋转,缩放,合成 我们需要知道合成位置的中心点坐标,用中心点坐标,不使用左顶点的坐标是由于缩放过程容易计算. 假设A是局部透明的图片,我们希望把B放在A的底部,仅从A的透明部分显示B ...

  8. Git提交记住用户名和密码

    https://www.baidu.com/link?url=R14MHMloypfAfIeiQwCINfY1AZlcoSU7-tYdnqC1PxfmFKs4TWzLOPdtyJbWVfqMqOkRx ...

  9. SSD回归类物体检测

    本宝宝最近心情不会,反正这篇也是搬用别人博客的了:(SSD就是YOLO+anchor(不同feature map 作为input)) 引言 这篇文章是在YOLO[1]之后的一篇文章,这篇文章目前是一篇 ...

  10. Java显式锁学习总结之三:AbstractQueuedSynchronizer的实现原理

    概述 上一篇我们讲了AQS的使用,这一篇讲AQS的内部实现原理. 我们前面介绍了,AQS使用一个int变量state表示同步状态,使用一个隐式的FIFO同步队列(隐式队列就是并没有声明这样一个队列,只 ...