《MySQL——连接查询》

内连接:
inner join 或者 join
外连接
1、左连接 left join 或 left outer join
2、右连接 right join 或 right outer join
3、完全外连接 full join 或 full outer join

图示理解

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

全连接
在这里插入图片描述

创建person表和card表

CREATE DATABASE testJoin;CREATE TABLE person (id INT,name VARCHAR(20),cardId INT
);CREATE TABLE card (id INT,name VARCHAR(20)
);

插入数据

INSERT INTO card VALUES (1, '饭卡'), (2, '建行卡'), (3, '农行卡'), (4, '工商卡'), (5, '邮政卡');
SELECT * FROM card;
+------+-----------+
| id   | name      |
+------+-----------+
|    1 | 饭卡      |
|    2 | 建行卡    |
|    3 | 农行卡    |
|    4 | 工商卡    |
|    5 | 邮政卡    |
+------+-----------+INSERT INTO person VALUES (1, '张三', 1), (2, '李四', 3), (3, '王五', 6);
SELECT * FROM person;
+------+--------+--------+
| id   | name   | cardId |
+------+--------+--------+
|    1 | 张三   |      1 |
|    2 | 李四   |      3 |
|    3 | 王五   |      6 |
+------+--------+--------+

分析两张表,person 表并没有为 cardId 字段设置一个在 card 表中对应的 id 外键。如果设置了的话,personcardId 字段值为 6 的行就插不进去,因为该 cardId 值在 card 表中并没有。

inner join 查询

要查询这两张表中有关系的数据,可以使用 INNERJOIN ( 内连接 ) 将它们连接在一起。

-- INNER JOIN: 表示为内连接,将两张表拼接在一起。
-- on: 表示要执行某个条件(连接条件)。
SELECT * FROM person INNER JOIN card on person.cardId = card.id;
+------+--------+--------+------+-----------+
| id   | name   | cardId | id   | name      |
+------+--------+--------+------+-----------+
|    1 | 张三   |      1 |    1 | 饭卡      |
|    2 | 李四   |      3 |    3 | 农行卡    |
+------+--------+--------+------+-----------+
--card 的整张表被连接到了右边。

内连查询,其实就是两张表中的数据通过某个字段相对应,查询出相关记录数据。
inner去掉也是一样的。

left join 查询

完整显示左边的表 ( person ) ,右边的表如果符合条件就显示,不符合则补 NULL 。

SELECT * FROM person LEFT JOIN card on person.cardId = card.id;
+------+--------+--------+------+-----------+
| id   | name   | cardId | id   | name      |
+------+--------+--------+------+-----------+
|    1 | 张三   |      1 |    1 | 饭卡      |
|    2 | 李四   |      3 |    3 | 农行卡    |
|    3 | 王五   |      6 | NULL | NULL      |
+------+--------+--------+------+-----------+

right join 查询

完整显示右边的表 ( card ) ,左边的表如果符合条件就显示,不符合则补 NULL 。

SELECT * FROM person RIGHT JOIN card on person.cardId = card.id;
+------+--------+--------+------+-----------+
| id   | name   | cardId | id   | name      |
+------+--------+--------+------+-----------+
|    1 | 张三   |      1 |    1 | 饭卡      |
|    2 | 李四   |      3 |    3 | 农行卡    |
| NULL | NULL   |   NULL |    2 | 建行卡    |
| NULL | NULL   |   NULL |    4 | 工商卡    |
| NULL | NULL   |   NULL |    5 | 邮政卡    |
+------+--------+--------+------+-----------+

full join 查询

MySQL 不支持这种语法的全外连接:

SELECT * FROM person FULL JOIN card on person.cardId = card.id;

这样会报错:

ERROR 1054 (42S22): Unknown column 'person.cardId' in 'on clause'

MySQL的全连接是通过left join和right join合在一起。

SELECT * FROM person LEFT JOIN card on person.cardId = card.id
UNION
SELECT * FROM person RIGHT JOIN card on person.cardId = card.id;
+------+--------+--------+------+-----------+
| id   | name   | cardId | id   | name      |
+------+--------+--------+------+-----------+
|    1 | 张三   |      1 |    1 | 饭卡      |
|    2 | 李四   |      3 |    3 | 农行卡    |
|    3 | 王五   |      6 | NULL | NULL      |
| NULL | NULL   |   NULL |    2 | 建行卡    |
| NULL | NULL   |   NULL |    4 | 工商卡    |
| NULL | NULL   |   NULL |    5 | 邮政卡    |
+------+--------+--------+------+-----------+

参考

一天学会MySQL
某Github

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/377271.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

win7下 apache2.2 +php5.4 环境搭建

这篇文章很好 没法复制 把链接粘贴来http://www.360doc.com/content/13/0506/13/11495619_283349585.shtml# 现在能复制了: 把任何一篇你要复制、却不让复制的文章收藏入收藏夹(直接CtrlD,确定) 2在收藏夹中,右击刚才收藏的那个网址,点属性 3…

运行在TQ2440开发板上以及X86平台上的linux内核编译

一、运行在TQ2440开发板上的linux内核编译 1、获取源码并解压 直接使用天嵌移植好的“linux-2.6.30.4_20100531.tar.bz2”源码包。 解压(天嵌默认解压到/opt/EmbedSky/linux-2.6.30.4/中) tar xvjf linux-2.6.30.4_20100531.tar.bz2 -C / 2、获取默认配置…

Python熊猫– GroupBy

Python熊猫– GroupBy (Python Pandas – GroupBy) GroupBy method can be used to work on group rows of data together and call aggregate functions. It allows to group together rows based off of a column and perform an aggregate function on them. GroupBy方法可用…

MySQL索引底层原理理解以及常见问题总结

目录二叉查找树为索引红黑树为索引B树作为索引B树作为索引MyISAM存储引擎索引实现InnoDB存储引擎索引实现常见问题聚集索引与非聚集索引InnoDB基于主键索引和普通索引的查询有什么区别?InnoDB主键索引为何是整型的自增主键何时使用业务字段作为主键呢?哈…

des算法密码多长_密码学中的多个DES

des算法密码多长This is a DES that was susceptible to attacks due to tremendous advances in computer hardware in cryptography. Hence, it was a very complex or competent algorithm it would be feasible to reuse DES rather than writing an of cryptography. 由于…

《MySQL——索引笔记》

目录回表覆盖索引最左前缀原则联合索引的时候,如何安排索引内的字段顺序?索引下推重建索引问题联合主键索引和 InnoDB 索引组织表问题in与between的区别回表 回到主键索引树搜索的过程,我们称为回表。 覆盖索引 覆盖索引就是在这次的查询中…

《操作系统知识点整理》

目录进程与线程比较多线程同步与互斥生产者与消费者哲学家就餐问题读者写者问题进程间通信管道消息队列共享内存信号量信号Socket锁互斥锁与自旋锁读写锁乐观锁与悲观锁死锁进程与线程比较 进程是资源(包括内存、打开的文件等)分配的单位,线…

操作系统大内核和微内核_操作系统中的内核

操作系统大内核和微内核A Kernel is the central component of an Operating System. The Kernel is also said to be the heart of the Operating System. It is responsible for managing all the processes, memory, files, etc. The Kernel functions at the lowest level …

《MySQL——锁》

全局锁是什么?全局锁有什么用?全局锁怎么用? 全局锁主要用在逻辑备份过程中,对于InnoDB 引擎的库,使用–single-transaction; MySQL 提供了一个加全局读锁的方法,命令是 Flush tables with read lock (FTW…

搜索引擎Constellio及Google Search Appliances connectors

做搜索产品的时候发现国外一个同类型的产品contellio,发现功能比较强大,先记录下来 貌似可以添加文档 网站 以及数据库等不同类型的数据源 http://wiki.constellio.com/index.php/Main_Page http://www.constellio.com/ http://www.constellio.com htt…

分类器是如何做检测的?——CascadeClassifier中的detectMultiScale函数解读

原地址:http://blog.csdn.net/delltdk/article/details/9186875 在进入detectMultiScal函数之前,首先需要对CascadeClassifier做初始化。 1. 初始化——read函数 CascadeClassifier的初始化很简单: cv::CascadeClassifier classifier; cl…

abs std::abs_ABS的完整形式是什么?

abs std::absABS:防抱死制动系统 (ABS: Anti-lock Braking System) ABS is an abbreviation of the Anti-lock Braking System. It is a safety anti-skid braking system that is used on a variety of aircraft, automobiles and other land vehicles, such as mo…

汉字速查使用方法简介

《汉字速查》(HanziSearcher)是一个支持全汉字字典和词典的检索工具。其界面如下所示。 界面上方为工具栏。 左方为字典和词典检索栏。 右方在启动时显示版权信息和作者的联系方式,在执行检索时,显示检索结果。 检索方法 汉字速查…

android jni示例_Android服务示例

android jni示例A service is a component that runs in the background for supporting different types of operations that are long running. The user is not interacted with these. These perform task even if application is destroyed. Examples include handling of…

空间换时间,把递归的时间复杂度降低到O(2n)

递归算法的时间复杂度除非只有前两项,否则都不是线性的,并且相当耗费内存。我们用最常见的的fibonacci数列来说明: function fibonacci(n){if( n 0 || n 1){return n;} else {return fibonacci(n - 1) fibonacci(n - 2);} } 这是一种最常见…

《MySQL——给长字符串加索引》

对于长字符串,可用如下方式建立索引: (1)前缀索引 (2)字符串倒叙前缀索引 (3)添加hash字段并在hash字段上加索引 (4)字段拆分(一个字段可拆分为两…

傻瓜教你看清MVC内部执行流程之ViewData数据传输,轻松学MVC--①目了然篇(待续)

1.首先在执行到Controller里面的action(方法)时,执行到最后会调用一个View()-->此方法是Controller的一个方法 源代码: View Code protected internal ViewResult View(){return View(null /* viewName */, null /* masterName */, null /* model */);} 2.然后继续调用自己…

poj 1088

题目:http://poj.org/problem?id1088 记忆化搜索,dp[r][c] max(dp[r - 1][c] , dp[r 1][c] , dp[r][c - 1] , dp[r][c 1]) 1 ( if (题目给的条件满足)) View Code 1 using namespace std;2 typedef long long ll;3 const in…

《MySQL——order by逻辑(全字段排序与rowid排序)》

创建一个表,然后使用查询语句: 查询城市是“杭州”的所有人名字,并且按照姓名排序返回前 1000 个人的姓名、年龄 create table t (id int(11) not null,city vachar(16) not null,name vachar(16) not null,age vachar(16) not null,addr va…

HTML5 video

摘要:本文主要介绍HTML5 video在android2.2中实现的主要架构和程序流程。 一、实现HTML5 video主要的类 1. 主要类结构及介绍 图1中绿色类为java类,其余为c类,下面是各个类的具体介绍: (1) HTMLElement类不是最上层类&#xff0c…