Mysql 的七种 join sql 编写

首先创建两张表

CREATE TABLE `t_user` (
  `id` bigint(16) NOT NULL AUTO_INCREMENT,
  `name` varchar(64) NOT NULL,
  `age` int(4) NOT NULL,
  `gender` tinyint(2) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8
CREATE TABLE `customer` (
  `id` bigint(16) NOT NULL AUTO_INCREMENT,
  `name` varchar(64) NOT NULL,
  `age` int(4) NOT NULL,
  `mobile` char(11) NOT NULL,
  `t_id` bigint(16) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8

LEFT JOIN 查询 A(包含AB的交集)

SELECT * FROM customer c LEFT JOIN t_user u ON c.`t_id` = u.id

查询结果为:

A为主表,B没有数据会自动补为 NULL

RIGHT JOIN 查询 B (包含AB的交集)

SELECT * FROM customer c RIGHT JOIN t_user u ON c.`t_id` = u.id

查询结果为:

B为主表,A查询不到数据会自动补为NULL

INNER JOIN 查询 AB的交集

SELECT * FROM customer c INNER JOIN t_user u ON c.`t_id` = u.id

查询结果为:

查询A和B的交集

LEFT JOIN 查询 A (不包含AB的交集)

SELECT * FROM customer c LEFT JOIN t_user u ON c.`t_id` = u.id WHERE u.id IS NULL

查询结果为:

查询出不包含AB交集的A的部分,使用 u.id IS NULL 找到B为NULL的部分,也就是不含交集的部分,从而查询出不含AB交集的A的部分

RIGHT JOIN 查询B (不包含AB的交集)

SELECT * FROM customer c RIGHT JOIN t_user u ON c.`t_id` = u.id WHERE c.id IS NULL

查询结果为:

原理与上面一样,通过c.id IS NULL 查询出不包含AB交集的B的部分

查询A和B的全部

SELECT * FROM customer c LEFT JOIN t_user u ON c.`t_id` = u.id
UNION
SELECT * FROM customer c RIGHT JOIN t_user u ON c.`t_id` = u.id

查询结果为:

查询A B的独有

SELECT * FROM customer c LEFT JOIN t_user u ON c.`t_id` = u.id WHERE u.id IS NULL
UNION
SELECT * FROM customer c RIGHT JOIN t_user u ON c.`t_id` = u.id WHERE c.id IS NULL

查询结果为:

原文地址:https://www.cnblogs.com/Godfunc/p/9693884.html

时间: 2024-10-15 21:21:08

Mysql 的七种 join sql 编写的相关文章

MYSQL 的七种join

建表 在这里呢我们先来建立两张有外键关联的张表. CREATE DATABASE db0206; USE db0206; CREATE TABLE `db0206`.`tbl_dept`( `id` INT(11) NOT NULL AUTO_INCREMENT, `deptName` VARCHAR(30), `locAdd` VARCHAR(40), PRIMARY KEY (`id`) ) ENGINE=INNODB CHARSET=utf8; CREATE TABLE `db0206`.

MySQL 的七种 Join

创建表 快速到底 学生表 create table student( id int(11) not null AUTO_INCREMENT, name varchar(30), address varchar(40), primary key (id) ) engine=innodb charset=utf8; INSERT INTO student(name,address) VALUES('田开智','安徽省天长市'); INSERT INTO student(name,address) V

【知识库】-数据库_MySQL 的七种 join

作者:haifeisi 文章出处: MySQL 的七种 join 创建数据库表'tbl_dept'和'tbl_emp' CREATE DATABASE db0206; USE db0206; CREATE TABLE `db0206`.`tbl_dept`( `id` INT(11) NOT NULL AUTO_INCREMENT, `deptName` VARCHAR(30), `locAdd` VARCHAR(40), PRIMARY KEY (`id`) ) ENGINE=INNODB C

七种join的sql编写

一.join图 二.sql演示 a.创建演示表及数据 SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS = 0; -- ---------------------------- -- Table structure for `tbl_dept` -- ---------------------------- DROP TABLE IF EXISTS `tbl_dept`; CREATE TABLE `tbl_dept` ( `id` int(11) NOT NU

Mysql七种 JOIN 连接

内连接 SELECT <select_list> FROM TableA A INNER JOIN TableB B ON A.Key = B.Key 左外连接 SELECT <select_list> FROM TableA A LEFT JOIN TableB B ON A.Key = B.Key SELECT <select_list> FROM TableA A LEFT JOIN TableB B ON A.Key = B.Key WHERE B.Key IS

MySql中三种Join以及Where条件的疑惑

MySQL JOIN时条件放在Where之后和On之后结果是迥然不同的 在Left Join的时候on后的左表条件不生效 Right Join的时候on后的右表条件不生效 即左或右连接的时候on后的主表条件不生效 select * from a left join b on a.id=b.id and a.name=1 and b.age=2; 这里只有b.age=2能生效a.name=1不生效 在Inner Join的时候on后的条件不论主表从表都能生效. 在left或者right join的

只显示前几条数据的sql语句写法 七种数据库中Select Top的使用方法

七种数据库中Select Top的使用方法 1. Oracle数据库 SELECT * FROM TABLENAME WHERE ROWNUM <= N 2. Infomix数据库 SELECT FIRST N * FROM TABLENAME 3. DB2数据库 SELECT * FROM (SELECT * ROW_NUMBER() OVER({ORDER BY COL1 DESC}) AS ROWNUM FROM TABLENAME) WHERE ROWNUM <= N 或者 SELEC

SQL中大概有这么几种JOIN

SQL中大概有这么几种JOIN: cross join inner join left outer join right outer join full outer join 首先都是基于cross join(笛卡尔乘积),然后是inner join,在笛卡尔乘积的结果集中去掉不符合连接条件的行. left outer join 是在inner join的结果集上加上左表中没被选上的行,行的右表部分每个字段都用NUll填充. right outer join 是在inner join的结果集上加

探讨SQL Server并发处理存在就更新七种解决方案

前言 本节我们来讲讲并发中最常见的情况存在即更新,在并发中若未存在行记录则插入,此时未处理好极容易出现插入重复键情况,本文我们来介绍对并发中存在就更新行记录的七种方案并且我们来综合分析最合适的解决方案. 探讨存在就更新七种方案 首先我们来创建测试表 IF OBJECT_ID('Test') IS NOT NULL DROP TABLE Test CREATE TABLE Test ( Id int, Name nchar(100), [Counter] int,primary key (Id),