SQL语言相信学过数据库的人都会使用,但是能正确使用SQL的人却相对不多。正确使用SQL很重要吗?当然,下面我就列出了正确使用SQL语句的几个好处:

增加数据库的处理效率,减少相应的响应时间。

减少数据库的服务器负载,增加服务器稳定性。

减少服务器间通讯的网络流量。

这篇文章,我将先介绍如何正确的使用Join从句

举例中使用的表如下:西天取经四人组 VS 悟空的朋友们

首先,我们来看看SQL标准中Join的类型

内连接(INNER)

全外连接(FULL OUTER)

左外连接(LEFT OUTER)

右外连接(RIGHT OUTER)

交叉连接(CROSS)

我们首先根据上面的两张表,来介绍这五种Join类型的使用场景

Join操作的类型——Inner Join

内连接Inner join基于连接谓词将两张表(如A和B)的列组合在一起,产生新的结果表。

我们写出查询语句如下:SELECT a.user_name,a.id.b.id FROM t1 a INNER JOIN t2 b ON a.user_name=b.username;连接谓词是 user_name。

由查询结果可以看出:我们得到的是两张表的公共部分。

Join操作的类型——Left Outer Join

举个例子:我们要查询取经四人组中哪些人不是悟空的结拜兄弟?

查询语句:SELECT a.user_name,a.id,b.id FROM t1 a LEFT JOIN t2 b ON a.user_name=b.user_name WHERE b.username IS NULL;

Join操作的类型——Right Outer Join

举个例子:我们要查询悟空的结拜兄弟中哪些人没有去取经?

查询语句:SELECT b.user_name,b.id,a.id FROM t1 a RIGHT JOIN t2 b ON a.user_name=b.user_name WHERE a.user_name IS NULL;

Join操作的类型——Full Join

MySQL中默认是不能使用全连接类型的,如果使用,则会报错。

那么问题就来了:Full Join的问题该如何解决呢?我们可以用UNION ALL操作来间接使用Full Join。

查询语句:SELECT a.user_name,a.id,b.id FROM t1 a LEFT JOIN t2 b ON a.user_name=b.user_name UNION ALL SELECT b.user_name,b.id,a.id FROM t1 a RIGHT JOIN t2 b ON a.user_name=b.user_name;

Join操作的类型——Cross Join

交叉连接,又称笛卡尔连接(cartesian join)或叉乘(Product),如果A和B是两个集合,它们的交叉连接就记为:A x B。

注意:笛卡尔连接里面没有连接关键词 ON 。

查询语句:SELECT a.user_name,a.id,b.user_name,b.id FROM t1 a CROSS JOIN t2 b;

mysql的join语句使用_MySQL开发技巧——如何正确使用Join语句相关推荐

  1. 关于python语言、下列说法不正确的是-下列语句中,___________是不正确的Python语句...

    问题:下列语句中,___________是不正确的Python语句 更多相关问题 2,11,14,27,()A.34B.32C.30D.28 二氧化硫是造成酸雨的重要原因.某地区饱受酸雨困扰,为改善这 ...

  2. mysql两表左关联_mysql中一张表LEFT JOIN 左关联两张表语句

    先看实例 代码如下 复制代码 SELECT p.price, pd.name, m.manufacturers_name FROM (products p LEFT JOIN products_des ...

  3. mysql 运维 最佳实践_Mysql 开发最佳实践

    1. Optimize Your Queries For the Query Cache 使用query cache来优化查询 Most MySQL servers have query cachin ...

  4. mysql outer join的用法_MySQL 8 中的连接语法JOIN、OUTER JOIN的相关用法

    JOIN连接为内连接(INNER JOIN),如果A表与B表进行JOIN连接,都是查询这两个表的交集,所谓交集就是这条记录既在A表中存在也在B表中存在:mysql> SELECT a.id, a ...

  5. mysql 批量添加字段前缀_MySQL中批量前缀表的sql语句

    1.批量删除前缀表sql语句 先查询生成需要操作的表 Select CONCAT( 'drop table ', table_name, ';' ) FROM information_schema.t ...

  6. python搞笑语句_云计算开发学习笔记:Python3 import语句

    原标题:云计算开发学习笔记:Python3 import语句 想使用 Python 源文件,只需在另一个源文件里执行 import 语句,语法如下: 当解释器遇到 import 语句,如果模块在当前的 ...

  7. mysql添加用户查重的方法_mysql 开发技巧之JOIN 更新和数据查重/去重

    主要涉及:JOIN .JOIN 更新.GROUP BY HAVING 数据查重/去重 1 INNER JOIN.LEFT JOIN.RIGHT JOIN.FULL JOIN(MySQL 不支持).CR ...

  8. mysql数据库select语句用法_mysql学习笔记之完整的select语句用法实例详解

    本文实例讲述了mysql学习笔记之完整的select语句用法.分享给大家供大家参考,具体如下: 本文内容: 完整语法 去重选项 字段别名 数据源 where group by having order ...

  9. mysql生产环境加索引_MySQl开发和生产环境索引对比

    --1.创建索引信息表 create table `t_index_update` ( `table_name` varchar(20) COLLATE gbk_bin DEFAULT NULL, ` ...

最新文章

  1. node python复用代码_python-代码复用(函数、lambda、递归、PyInstaller库)
  2. 案例:用一条 SQL 语句查询出每门课都大于 80 分的学生姓名
  3. 个人企业作品网站导航页源码
  4. 因为此网站使用了 hsts_长春定制小程序服务,网站设计市场价格
  5. 关于vh和 calc
  6. 银行科技管理工作优化提升之我见
  7. python3--匿名函数
  8. 093-PHP数组比较
  9. Java零拷贝四步曲——HeapByteBuffer与DirectByteBuffer
  10. 12306能删候补订单记录_2019最新火车候补购票十大问题
  11. wrapper x64 版本发布到centos
  12. 【线段树求逆序数】【HDU1394】Minimum Inversion Number
  13. idea使用mvn命令打包报错 不可用
  14. 阿里云企业上云最佳实践方案
  15. ES6class与ES3构造函数区别
  16. 注册gmail账号,手机无法接受验证码的问题
  17. 117道有关大数据面试题解析,希望对你有所帮助
  18. 信仰是如何毁掉程序员的
  19. 如果图G=V,E是哈密尔顿图,则它必然具备下述性质
  20. 我眼中的机器学习(二) 解方程 为什么需要用到机器学习算法

热门文章

  1. 4.8 迁移数据,添加根路径
  2. 写给开发者——从比特币脚本引擎到以太坊虚拟机
  3. 一个技术开发者经常访问的网站
  4. 牛客网Java刷题知识点之构造函数可以调用一般函数,但是一般函数不可以直接调用构造函数...
  5. MySql-流程函数
  6. 黑客演化史:从20世纪60年代至今
  7. Android 4 开发环境配置中的诸多陷阱
  8. 基于PHPUnit编写第一个测试用例
  9. Java盲点:双重检查锁定及单例模式
  10. 计算机科学与技术文科可以学么,文科生成绩一般,大学可以选择计算机吗?