mysql/mariadb学习记录——连接查询(JOIN)
//本文使用的数据表格
//persons表中id_p为主键
//orders表中id_o为主键,id_p为外键参考persons表中的id_p
mysql> select * from persons;select * from orders;
+------+----------+-----------+----------------+----------+
| id_p | lastname | firstname | address | city |
+------+----------+-----------+----------------+----------+
| | Adams | John | Oxford Street | London |
| | Bush | George | Fifth Avenue | New York |
| | Carter | Thomas | Changan Street | Beijing |
+------+----------+-----------+----------------+----------+
rows in set (0.05 sec) +------+---------+------+
| id_o | orderNo | id_p |
+------+---------+------+
| | | |
| | | |
| | | |
| | | |
| | | |
+------+---------+------+
rows in set (0.05 sec)
1.内连接 [inner] join:
内连接也叫连接,或者自然连接:
//inner可删
mysql> select lastname,firstname,orderNo from persons inner join orders on persons.id_p=orders.id_p order by lastname;
+----------+-----------+---------+
| lastname | firstname | orderNo |
+----------+-----------+---------+
| Adams | John | |
| Adams | John | |
| Carter | Thomas | |
| Carter | Thomas | |
+----------+-----------+---------+ //使用where达到同样的效果
mysql> select lastname,firstname,orderNo from persons,orders where persons.id_p=orders.id_p;
+----------+-----------+---------+
| lastname | firstname | orderNo |
+----------+-----------+---------+
| Carter | Thomas | |
| Carter | Thomas | |
| Adams | John | |
| Adams | John | |
+----------+-----------+---------+
2.左连接 left [outer] join:
先看左连接的语句与查询结果
//outer可删去
mysql> select lastname,firstname,orderNo from persons left join orders on persons.id_p=orders.id_p order by lastname;
+----------+-----------+---------+
| lastname | firstname | orderNo |
+----------+-----------+---------+
| Adams | John | |
| Adams | John | |
| Bush | George | NULL |
| Carter | Thomas | |
| Carter | Thomas | |
+----------+-----------+---------+
通过这个结果我们可以发现lastname为Bush没有orderNo,而lastname,firstname属性是来自persons表,orderNo属性是来自orders表可见左连接的作用时把在left join 左边persons表格的所有信息都显示出来,即使是没有和left join右边的表 orders中字段相匹配的信息也显示出来,并且给orderNo的值填为NULL。
如果把left join两侧的 persons和 orders位置互换那么结果显示的就是left join 左边表orders表的所有信息,同时把未匹配到的left join右边表persons中的lastname与firstname值置为NULL,这个结果与未交换join两个表名位置的右连接的结果一致。
//将left join两侧的 persons和 orders位置互换
mysql> select lastname,firstname,orderNo from orders left join persons on persons.id_p=orders.id_p order by lastname;
+----------+-----------+---------+
| lastname | firstname | orderNo |
+----------+-----------+---------+
| NULL | NULL | |
| Adams | John | |
| Adams | John | |
| Carter | Thomas | |
| Carter | Thomas | |
+----------+-----------+---------+
3.右连接 right [outer] join:
//outer可删去
mysql> select lastname,firstname,orderNo from persons right outer join orders on persons.id_p=orders.id_p order by lastname;
+----------+-----------+---------+
| lastname | firstname | orderNo |
+----------+-----------+---------+
| NULL | NULL | |
| Adams | John | |
| Adams | John | |
| Carter | Thomas | |
| Carter | Thomas | |
+----------+-----------+---------+
同理与左连接,结果显示的就是right join 左边表persons表的所有信息,同时把未匹配到的right join右边表orders中的orderNo值置为NULL。
4.全连接full join(不过mysql/mariadb不支持)
全连接则是把两个表的信息全部显示出来,无论两个表的信息匹配与否,未匹配上的信息都置为NULL。
mysql/mariadb学习记录——连接查询(JOIN)的更多相关文章
- mysql/mariadb学习记录——查询
连接查询:同时设计两个及以上的表的查询 连接条件或连接谓词:用来连接两个表的条件一般格式: [<表名1>]<列名1> <比较运算符> [<表名2>]&l ...
- mysql/mariadb学习记录——查询2
Alias——使用一个列名别名AS 关键字: mysql> select sno as studentId,sname as studentName from student; +------- ...
- mysql/mariadb学习记录——limit
在mysql/mariadb 中可以用limit来限制查询的条数.例子如下: 1.limit后加一个参数 limit n: //选中查询所有结果中的前两条记录并返回 mysql> ; +---- ...
- mysql/mariadb学习记录——创建删除数据库、表的基本命令
查看已有的数据库: mysql> show databases; +--------------------+ | Database | +--------------------+ | inf ...
- mysql/mariadb学习记录——查询3(AVG、SUM、COUNT)函数
AVG() 求平均数函数: //求emp表中的sal属性的平均值 mysql> select avg(sal) as salAverage from emp; +-------------+ | ...
- 深入学习之mysql(五)连接查询
深入学习Mysql(五)连接查询 1.准备数据库: CREATE DATABASE IF NOT EXISTS `db_book2` DEFAULT CHARACTER SET UTF8; USE ` ...
- MySQL (五)--连接查询简介、 交叉连接、 内连接、外连接、自然连接、温馨小提示
1 连接查询简介 将多张表(可以大于2)进行记录的连接(按照某个指定的条件进行数据拼接). 最终结果:记录数可能会有变化,字段书一定会增加(至少两张表的合并). 连接查询:join,使用方式:左表 j ...
- mysql 连接查询 join
本文用到的表 CREATE TABLE `cls` ( `cls_id` ) NOT NULL AUTO_INCREMENT, `name` ) NOT NULL, PRIMARY KEY (`cls ...
- MariaDB学习记录
MariaDB的学习 MariaDB的学习 关于MariaDB的历史,不再概述 下面是mariadb的官网:https://mariadb.com/ 同样的,MariaDB一样有连接java的jar包 ...
随机推荐
- MySQL查询高速缓冲
对mysql的优化不在行,搞过几次优化,但是都不是很理想,还是浪费资源太多.一直发现我的mysql的缓存命中率极差,情况良好的时候到达过60-70%,但是运行时间一长,只有10-20%.查了一些资料, ...
- VS2008和VC6.0下使用pthread.h头文件
原文:http://www.cppblog.com/liquidx/archive/2009/06/16/87811.html 要在windows环境下使用 #include <pthread. ...
- 【转】OmniGraffle (一)从工具栏开始
原文链接:http://www.jianshu.com/p/52f3ecbe8f2d OmniGraffle的软件布局和大多数图形类软件类似,中间是编辑区,左边是页面和对象组织的管理,右边是参数设置和 ...
- Software Testing Techniques Homework 1
I have met some errors in recent years, one of them which impress me most. It happend when I try to ...
- awk 正则表达式、正则运算符详细介绍
前言:使用awk作为文本处理工具,正则表达式是少不了的. 要掌握这个工具的正则表达式使用.其实,我们不必单独去学习它的正则表达式.正则表达式就像一门程序语言,有自己语法规则已经表示意思. 对于不同工具 ...
- Excel录入中实现单元格多选项自动下拉
当我们在Excel表格中需要输入大量的重复数据时,往往利用数据的有效性来制作一个下拉菜单以提高重复数据的输入速度.但在实际的操作过程中,必须选中需要输入重复数据的单元格并单击该单元格右边的下拉箭头,才 ...
- TCP/IP 协议图--TCP/IP 基础
1. TCP/IP 的具体含义 从字面意义上讲,有人可能会认为 TCP/IP 是指 TCP 和 IP 两种协议.实际生活当中有时也确实就是指这两种协议.然而在很多情况下,它只是利用 IP 进行通信时所 ...
- [T-ARA][Sugar Free]
歌词来源:http://music.163.com/#/song?id=29343991 作曲 : 新沙洞老虎/범이낭이 [作曲 : 新沙洞老虎/버미낭이] [作曲 : 新沙洞老虎/p/beo-mi- ...
- 当有多个相同的DIV时,我怎么判断我点击的是哪个嘞
链接:https://segmentfault.com/a/1190000003480973?utm_source=tuicool&utm_medium=referral 序言 这是我曾经面试 ...
- scala简介
1.什么是Scala scala官方网址: http://www.scala-lang.org Scala是一种多范式的编程语言,其设计的初衷是要集成面向对象编程和函数式编程的各种特性.Scala运行 ...