测试MYSQL表关于内外连接

表一:雇员表(雇员ID,雇员名称,雇员入职时间,薪水,部门号)

create table empo(

empoid int(6)  not null  primary key auto_increment,

empname varchar(32) not null,

empdate datetime not null,

salary int(6) not null ,

deptno int(6) not null

)engine=innodb  charset=utf8

insert into  empo  values(1,'zhangsan','2012-2-20 10:00:00',6000,1);

insert into  empo  values(2,'lisi','2013-2-20 10:00:00',6000,2);

insert into  empo  values(3,'王五','2014-2-20 10:00:00',6000,1);

insert into  empo  values(4,'zhaoliu','2015-2-20 10:00:00',6000,3);

insert into  empo  values(5,'zhaoliu','2015-2-20 10:00:00',6000,6);

insert into  empo  values(6,'zhaoliu','2015-2-20 10:00:00',6000,8);

表二(部门号,部门名称)

create table dept(

deptid int(6) primary key ,

deptname varchar(32) not null

)engine=innodb charset=utf8

insert into dept values(1,'xinzhengbu');

insert into dept values(2,'jixubu');

insert into dept values(3,'yunying');

insert into dept values(3,'shejibu');

题目:

例1:内连接(内连接实际上就是利用 where 子句对两张表形成的笛卡尔积进行筛选,)

mysql> select * from empo,dept;

+--------+----------+---------------------+--------+--------+--------+------------+

| empoid | empname  | empdate             | salary | deptno | deptid | deptname   |

+--------+----------+---------------------+--------+--------+--------+------------+

|      1 | zhangsan | 2012-02-20 10:00:00 |   6000 |      1 |      1 | xinzhengbu |

|      2 | lisi     | 2013-02-20 10:00:00 |   6000 |      2 |      1 | xinzhengbu |

|      3 | 王五     | 2014-02-20 10:00:00 |   6000 |      1 |      1 | xinzhengbu |

|      4 | zhaoliu  | 2015-02-20 10:00:00 |   6000 |      3 |      1 | xinzhengbu |

|      1 | zhangsan | 2012-02-20 10:00:00 |   6000 |      1 |      2 | jixubu     |

|      2 | lisi     | 2013-02-20 10:00:00 |   6000 |      2 |      2 | jixubu     |

|      3 | 王五     | 2014-02-20 10:00:00 |   6000 |      1 |      2 | jixubu     |

|      4 | zhaoliu  | 2015-02-20 10:00:00 |   6000 |      3 |      2 | jixubu     |

|      1 | zhangsan | 2012-02-20 10:00:00 |   6000 |      1 |      3 | yunying    |

|      2 | lisi     | 2013-02-20 10:00:00 |   6000 |      2 |      3 | yunying    |

|      3 | 王五     | 2014-02-20 10:00:00 |   6000 |      1 |      3 | yunying    |

|      4 | zhaoliu  | 2015-02-20 10:00:00 |   6000 |      3 |      3 | yunying    |

|      1 | zhangsan | 2012-02-20 10:00:00 |   6000 |      1 |      4 | shejibu    |

|      2 | lisi     | 2013-02-20 10:00:00 |   6000 |      2 |      4 | shejibu    |

|      3 | 王五     | 2014-02-20 10:00:00 |   6000 |      1 |      4 | shejibu    |

|      4 | zhaoliu  | 2015-02-20 10:00:00 |   6000 |      3 |      4 | shejibu    |

+--------+----------+---------------------+--------+--------+--------+------------+

16 rows in set (0.00 sec)

mysql> select * from empo inner join dept;

+--------+----------+---------------------+--------+--------+--------+------------+

| empoid | empname  | empdate             | salary | deptno | deptid | deptname   |

+--------+----------+---------------------+--------+--------+--------+------------+

|      1 | zhangsan | 2012-02-20 10:00:00 |   6000 |      1 |      1 | xinzhengbu |

|      2 | lisi     | 2013-02-20 10:00:00 |   6000 |      2 |      1 | xinzhengbu |

|      3 | 王五     | 2014-02-20 10:00:00 |   6000 |      1 |      1 | xinzhengbu |

|      4 | zhaoliu  | 2015-02-20 10:00:00 |   6000 |      3 |      1 | xinzhengbu |

|      1 | zhangsan | 2012-02-20 10:00:00 |   6000 |      1 |      2 | jixubu     |

|      2 | lisi     | 2013-02-20 10:00:00 |   6000 |      2 |      2 | jixubu     |

|      3 | 王五     | 2014-02-20 10:00:00 |   6000 |      1 |      2 | jixubu     |

|      4 | zhaoliu  | 2015-02-20 10:00:00 |   6000 |      3 |      2 | jixubu     |

|      1 | zhangsan | 2012-02-20 10:00:00 |   6000 |      1 |      3 | yunying    |

|      2 | lisi     | 2013-02-20 10:00:00 |   6000 |      2 |      3 | yunying    |

|      3 | 王五     | 2014-02-20 10:00:00 |   6000 |      1 |      3 | yunying    |

|      4 | zhaoliu  | 2015-02-20 10:00:00 |   6000 |      3 |      3 | yunying    |

|      1 | zhangsan | 2012-02-20 10:00:00 |   6000 |      1 |      4 | shejibu    |

|      2 | lisi     | 2013-02-20 10:00:00 |   6000 |      2 |      4 | shejibu    |

|      3 | 王五     | 2014-02-20 10:00:00 |   6000 |      1 |      4 | shejibu    |

|      4 | zhaoliu  | 2015-02-20 10:00:00 |   6000 |      3 |      4 | shejibu    |

+--------+----------+---------------------+--------+--------+--------+------------+

16 rows in set (0.00 sec)

上面两个SQL等价的。

下面是加where条件的等价SQL(select * from empo,dept where deptno=deptid;)

mysql> select * from empo inner join dept on  deptno=deptid;

+--------+----------+---------------------+--------+--------+--------+------------+

| empoid | empname  | empdate             | salary | deptno | deptid | deptname   |

+--------+----------+---------------------+--------+--------+--------+------------+

|      1 | zhangsan | 2012-02-20 10:00:00 |   6000 |      1 |      1 | xinzhengbu |

|      3 | 王五     | 2014-02-20 10:00:00 |   6000 |      1 |      1 | xinzhengbu |

|      2 | lisi     | 2013-02-20 10:00:00 |   6000 |      2 |      2 | jixubu     |

|      4 | zhaoliu  | 2015-02-20 10:00:00 |   6000 |      3 |      3 | yunying    |

+--------+----------+---------------------+--------+--------+--------+------------+

4 rows in set (0.00 sec)

例2:左连接

mysql> select * from empo left join dept on  deptno=deptid;

+--------+----------+---------------------+--------+--------+--------+------------+

| empoid | empname  | empdate             | salary | deptno | deptid | deptname   |

+--------+----------+---------------------+--------+--------+--------+------------+

|      1 | zhangsan | 2012-02-20 10:00:00 |   6000 |      1 |      1 | xinzhengbu |

|      2 | lisi     | 2013-02-20 10:00:00 |   6000 |      2 |      2 | jixubu     |

|      3 | 王五     | 2014-02-20 10:00:00 |   6000 |      1 |      1 | xinzhengbu |

|      4 | zhaoliu  | 2015-02-20 10:00:00 |   6000 |      3 |      3 | yunying    |

+--------+----------+---------------------+--------+--------+--------+------------+

4 rows in set (0.00 sec)

例3:右连接

mysql> select * from empo right join dept on  deptno=deptid;

+--------+----------+---------------------+--------+--------+--------+------------+

| empoid | empname  | empdate             | salary | deptno | deptid | deptname   |

+--------+----------+---------------------+--------+--------+--------+------------+

|      1 | zhangsan | 2012-02-20 10:00:00 |   6000 |      1 |      1 | xinzhengbu |

|      3 | 王五     | 2014-02-20 10:00:00 |   6000 |      1 |      1 | xinzhengbu |

|      2 | lisi     | 2013-02-20 10:00:00 |   6000 |      2 |      2 | jixubu     |

|      4 | zhaoliu  | 2015-02-20 10:00:00 |   6000 |      3 |      3 | yunying    |

|   NULL | NULL     | NULL                |   NULL |   NULL |      4 | shejibu    |

+--------+----------+---------------------+--------+--------+--------+------------+

5 rows in set (0.00 sec)

例4:将子查询替换成连接

表1

mysql> select * from empo;

+--------+----------+---------------------+--------+--------+

| empoid | empname  | empdate             | salary | deptno |

+--------+----------+---------------------+--------+--------+

|      1 | zhangsan | 2012-02-20 10:00:00 |   6000 |      1 |

|      2 | lisi     | 2013-02-20 10:00:00 |   6000 |      2 |

|      3 | 王五     | 2014-02-20 10:00:00 |   6000 |      1 |

|      4 | zhaoliu  | 2015-02-20 10:00:00 |   6000 |      3 |

|      5 | zhaoliu  | 2015-02-20 10:00:00 |   6000 |      6 |

|      6 | zhaoliu  | 2015-02-20 10:00:00 |   6000 |      8 |

+--------+----------+---------------------+--------+--------+

6 rows in set (0.00 sec)

表2

mysql> select * from dept;

+--------+------------+

| deptid | deptname   |

+--------+------------+

|      1 | xinzhengbu |

|      2 | jixubu     |

|      3 | yunying    |

|      4 | shejibu    |

+--------+------------+

4 rows in set (0.00 sec)

题目1、找出雇员不在部门表中的用户(雇员ID号为5,6的不在部门列表中)

select * from empo where deptno not in (select deptid from dept)

子查询写法

mysql> select * from empo where deptno  not in (select deptid from dept);

+--------+---------+---------------------+--------+--------+

| empoid | empname | empdate             | salary | deptno |

+--------+---------+---------------------+--------+--------+

|      5 | zhaoliu | 2015-02-20 10:00:00 |   6000 |      6 |

|      6 | zhaoliu | 2015-02-20 10:00:00 |   6000 |      8 |

+--------+---------+---------------------+--------+--------+

内连接写法(和上面写法同等)

mysql> select * from empo left join dept on empo.deptno=dept.deptid  where deptid is NULL;

+--------+---------+---------------------+--------+--------+--------+----------+

| empoid | empname | empdate             | salary | deptno | deptid | deptname |

+--------+---------+---------------------+--------+--------+--------+----------+

|      5 | zhaoliu | 2015-02-20 10:00:00 |   6000 |      6 |   NULL | NULL     |

|      6 | zhaoliu | 2015-02-20 10:00:00 |   6000 |      8 |   NULL | NULL     |

+--------+---------+---------------------+--------+--------+--------+----------+

说明:mysql中join中使用where和on的区别

1.(left|right)join... on.. and 的写法:是先处理on后面的条件,在处理表之间的连接

2.(left|rgint)join... on.. where的写法: 是先表left连接,在处理where条件

mysql的连接leftjion,mysql的表连接(left|right)join相关推荐

  1. 面试之前,MySQL表连接必须过关!——表连接的原理

    文章目录 一.表连接的简介 二.表连接的过程 三.内连接和外连接 1.内连接 2.外连接 四.表连接的原理 1.简单的嵌套循环连接(Simple Nested-Loop Join) 2.基于索引的嵌套 ...

  2. MySQL笔记(四)多表连接查询

    这是我在学习Mysql之路上做的笔记,今天将它粘出来.这一篇主要是Mysql多表连接查询.有错误的欢迎大家指出... 数据库的创建参考我的另一篇博客 https://blog.csdn.net/csd ...

  3. MySQL学习(8)︱DISTINCT去重与表连接

    DISTINCT去重 distinct用于在查询中返回列的唯一不同值(去重复),支持单列或多列.在实际的应用中,表中的某一列含有重复值是常见的,如employee表的dept列.如果在查询数据时,希望 ...

  4. python怎样实现多表连接_Python Day45多表连接查询

    一.多表连接查询 1 交叉连接:不适用任何匹配条件.生成笛卡尔积 mysql> select * fromemployee,department;+----+------------+----- ...

  5. oracle的表几种连接比较,几种表连接方式的使用场景

    1)nested loop nested loop,指的是两个表连接时, 通过两层嵌套循环来进行依次的匹配, 最后得到返回结果集的表连接方法.select t1.owner,t1.object_nam ...

  6. SQL Server 连接查询(多表连接查询)

    多表连接查询 1.查询的信息来源于多张表,则可以通过两两相连的方式建立多表连接查询 以下是正常多表查询语法,查询三张表的所有数据信息 2.简单多表查询要比多表查询写法更简单,效果是一样的, 简单多表查 ...

  7. 二、MySQL连接查询学习笔记(多表连接查询:内连接,外连接,交叉连接详解)

    MySQL连接查询(多表连接查询:内连接,外连接,交叉连接详解) 6:多表连接查询 笛卡尔乘积:如果连接条件省略或无效则会出现 解决办法:添加上连接条件 连接查询的分类: 1.按年代分类:1)sql ...

  8. [Mysql] 多表连接查询

    在之前的学习当中,我们查询使用的都是一张表,而在实际的数据分析业务中,经常会使用多张表.将多张表连接起来就是多表连接(从一个表扩展为两个表,也可以更多个表) 多表连接查询 当查询结果的列来源于多张表时 ...

  9. mysql多表查询连接的种类_MySQL中基本的多表连接查询教程

    一.多表连接类型1. 笛卡尔积(交叉连接) 在MySQL中可以为CROSS JOIN或者省略CROSS即JOIN,或者使用','  如: 由于其返回的结果为被连接的两个数据表的乘积,因此当有WHERE ...

最新文章

  1. 独家 | 2021年打破了零日黑客攻击的记录
  2. 计算机二级试题库office选择题,全国计算机二级MSoffice选择题题库2017
  3. java key值_java-必须为此操作提供PartitionKey值
  4. 关于intent-filter的误区
  5. php七天登录,十天学会php之第七天
  6. 20个科学小知识,带你走进科学世界
  7. PHP+MySQL 注射资料
  8. Netty 基本介绍与核心组件(EventLoop、ChannelPipeline、ChannelHandler)
  9. 理解 OpenStack Swift (3):监控和一些影响性能的因素 [Monitoring and Performance]
  10. 【oneday_onepage】—— 日常用语
  11. 华为交换机S5700系列配置通过STelnet登录设备示例
  12. win7共享xp打印机_别麻烦了!局域网一键共享工具
  13. Serdes 原理及调试学习
  14. 【EDA】Mutisim基于Multisim的带通滤波器仿真设计实验
  15. iOS打包Framework
  16. 每日工作记录——W5500网口ping中出现的问题
  17. Mac 激活win10-报错:所请求的操作需要提升特权
  18. python numpy 矩阵乘法以及列向量与行向量乘法
  19. hud 6078 Wavel Sequence
  20. 3dmax全套黄金自学教程

热门文章

  1. jquery mobile的a标签点击无法跳转的问题
  2. 如何在windows下的Python开发工具IDLE里安装其他模块
  3. Aix6.1安装openssh
  4. 古怪的ConfigurationManager
  5. Windows 7新睹为快!!
  6. 洛谷 P1865 A % B Problem[筛素数/前缀和思想/区间质数个数]
  7. C#程序实现动态调用DLL的研究(转)
  8. Modernizr:HTML5和CSS3的开发利器
  9. 自动输入runas密码的方法
  10. java中static作用详解