SQL 的 7 种 JOIN

理论图谱:

MySQL数据库实例:

1.创建数据库:

mysql> create database db_test;
Query OK, 1 row affected (0.01 sec)

 2.使用数据库:

mysql> use db_test;
Database changed

3.创建表、添加数据:

CREATE TABLE `tb_dept` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT ‘部门主键‘,
  `deptName` varchar(30) DEFAULT NULL COMMENT ‘部门名称‘,
  `locAdd` varchar(40) DEFAULT NULL COMMENT ‘楼层‘,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

CREATE TABLE `tb_emp` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT ‘员工主键‘,
  `name` varchar(20) DEFAULT NULL COMMENT ‘员工姓名‘,
  `deptId` int(11) DEFAULT NULL COMMENT ‘部门外键‘,
  PRIMARY KEY (`id`),
  KEY `fk_dept_id` (`deptId`)
  #CONSTRAINT `fk_dept_id` FOREIGN KEY (`deptId`) REFERENCES `tb_dept` (`id`) COMMENT ‘部门外键设置, 已经注释掉。‘
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

INSERT INTO `tb_dept` VALUES (‘1‘, ‘RD‘, ‘11‘);
INSERT INTO `tb_dept` VALUES (‘2‘, ‘HR‘, ‘12‘);
INSERT INTO `tb_dept` VALUES (‘3‘, ‘MK‘, ‘13‘);
INSERT INTO `tb_dept` VALUES (‘4‘, ‘MIS‘, ‘14‘);
INSERT INTO `tb_dept` VALUES (‘5‘, ‘FD‘, ‘15‘);

INSERT INTO `tb_emp` VALUES (‘1‘, ‘张三‘, ‘1‘);
INSERT INTO `tb_emp` VALUES (‘2‘, ‘李四‘, ‘1‘);
INSERT INTO `tb_emp` VALUES (‘3‘, ‘王二‘, ‘1‘);
INSERT INTO `tb_emp` VALUES (‘4‘, ‘麻子‘, ‘2‘);
INSERT INTO `tb_emp` VALUES (‘5‘, ‘小马‘, ‘2‘);
INSERT INTO `tb_emp` VALUES (‘6‘, ‘马旭‘, ‘3‘);
INSERT INTO `tb_emp` VALUES (‘7‘, ‘小丁‘, ‘4‘);
INSERT INTO `tb_emp` VALUES (‘8‘, ‘小西‘, ‘51‘);
时间: 2024-08-01 12:38:32

SQL 的 7 种 JOIN的相关文章

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的结果集上加

Oracle中的三种Join 方式

基本概念 Nested loop join: Outer table中的每一行与inner table中的相应记录join,类似一个嵌套的循环. Sort merge join: 将两个表排序,然后再进行join. Hash join: 将两个表中较小的一个在内存中构造一个Hash 表(对Join Key),扫描另一个表,同样对Join Key进行Hash后探测是否可以join,找出与之匹配的行. 一张小表被hash在内存中.因为数据量小,所以这张小表的大多数数据已经驻入在内存中,剩下的少量数据

LINQ to SQL语句(4)之Join

1.一对多关系(1 to Many): var q = from c in db.Customers from o in c.Orders where c.City == "London" select o; 语句描述:Customers与Orders是一对多关系.即Orders在Customers类中以 EntitySet形式出现.所以第二个from是从c.Orders而不是db.Orders里进行筛选 .这个例子在From子句中使用外键导航选择伦敦客户的所有订单. var q =

SparkSQL的3种Join实现

引言 Join是SQL语句中的常用操作,良好的表结构能够将数据分散在不同的表中,使其符合某种范式,减少表冗余.更新容错等.而建立表和表之间关系的最佳方式就是Join操作. SparkSQL作为大数据领域的SQL实现,自然也对Join操作做了不少优化,今天主要看一下在SparkSQL中对于Join,常见的3种实现. SparkSQL的3种Join实现 Broadcast Join 大家知道,在数据库的常见模型中(比如星型模型或者雪花模型),表一般分为两种:事实表和维度表.维度表一般指固定的.变动较

[转]深入理解SQL的四种连接-左外连接、右外连接、内连接、全连接

深入理解SQL的四种连接-左外连接.右外连接.内连接.全连接 1.内连接(典型的连接运算,使用像 =  或 <> 之类的比较运算符).包括相等连接和自然连接.     内连接使用比较运算符根据每个表共有的列的值匹配两个表中的行.例如,检索 students和courses表中学生标识号相同的所有行.       2.外连接.外连接可以是左向外连接.右向外连接或完整外部连接.     在 FROM子句中指定外连接时,可以由下列几组关键字中的一组指定:     1)LEFT  JOIN或LEFT

SQL中的Filter, join, semi-join等概念的释义

经常在工作中用到,虽然当年在数据库原理课程中学习过,不过基本已经还给老师了.工作这么多年,感觉自己在学习上倒退了很多,惭愧.这篇帖子,作为SQL相关知识的整理贴. 1.semi-join(半连接)(来自:http://wiki.answers.com/Q/What_is_semi_join_in_SQL) 半连接返回表中能够与另一表中连接的记录(并不执行一次全连接),它并没有一个明确的语法格式. A semi-join returns rows from one table that would

SQL的四种连接

SQL的四种连接-内连接.左外连接.右外连接.全连接   今天在看一个遗留系统的数据表的时候发现平时查找的视图是FULL OUT JOIN的,导致平时的数据记录要进行一些限制性处理,其实也可以设置视图各表为右外连接并在视图上设置各列的排序和筛选条件就可以达到效果. 联接条件可在FROM或WHERE子句中指定,建议在FROM子句中指定联接条件.WHERE和HAVING子句也可以包含搜索条件,以进一步筛选联接条件所选的行.     联接可分为以下几类: 1.内联接(典型的联接运算,使用像 =  或

【知识库】-数据库_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

2014-08-13 SQL语句之Left Join

今天是在吾索实习的第26天.这天在处理数据库数据的时候发现了一个不错的语句就是Left Join,即左连接.  其功能是:即使右表中没有匹配,也从左表返回所有的行.也就是说,显示的行数与左表一致,且当右表没有相应数据时,会用NULL或0补上.如下: 如此类推,右连接Right Join亦然. 2014-08-13 SQL语句之Left Join,布布扣,bubuko.com