一. 准备表

#部门表
create table dep(
id int,
name varchar(20)
);
#员工表
create table emp(
id int primary key auto_increment,
name varchar(20),
sex enum('male','female') not null default 'male',
age int,
dep_id int
); #插入数据
insert into department values
(200,'技术'),
(201,'人力资源'),
(202,'销售'),
(203,'运营'); insert into employee(name,sex,age,dep_id) values
('egon','male',18,200),
('alex','female',48,201),
('wupeiqi','male',38,201),
('yuanhao','female',28,202),
('liwenzhou','male',18,200),
('jingliyang','female',18,204)
;

准备表

查看表结构

二. 多表连接查询

#语法:
select * from 表1 <inner,left,right> join 表2 on 表1.字段=表2.字段;

  1.交叉连接:没有任何查询条件,直接生成笛卡尔积.(笛卡尔积:https://baike.baidu.com/item/%E7%AC%9B%E5%8D%A1%E5%B0%94%E4%B9%98%E7%A7%AF)

  select * from employee,department;

  

  2.内连接:找出两张表共有的部分,相当于利用条件在笛卡尔积的基础上进行筛选正确的结果.(只连接匹配的行)

#找两张表共有的部分,相当于利用条件从笛卡尔积结果中筛选出了正确的结果
#department没有204这个部门,因而employee表中关于204这条员工信息没有匹配出来
select * from employee inner join department on employee.dep_id = department.id; #还可以使用where条件来查询,建议使用上面的语句
select * from employee,department where employee.dep_id = department.id;

  3.左连接:优先显示坐标表的全部记录  

select * from employee left join department on employee.dep_id = department.id;

select * from department left join employee on employee.dep_id = department.id;

  4. 右连接:优先显示右边的全部记录.  

#优先显示员工表(employee)的信息
select * from department right join employee on employee.dep_id = department.id;  
#优先显示部门表(department)的信息
select * from employee right join department on employee.dep_id = department.id;

  5.全外连接:显示2张表中的所有记录

注意:mysql不支持全外连接 full join
强调:mysql可以使用union间接实现全外连接 
select * from employee left join department on employee.dep_id =department.id
union
select * from employee right join department on employee.dep_id = department.id;

三. 符合条件连接查询

  1.需求,查询所有年龄大于25岁的员工姓名,年龄和部门名称.  

select employee.name,employee.age,department.name from employee inner join department on employee.dep_id = department.id where age >25;

  2.按照员工的年龄,进行降序排序  

select * from  employee inner join department on employee.dep_id = department.id  order by age desc;

  

day 7-17 多表查询的更多相关文章

  1. MyBatis学习总结(五)——实现关联表查询(转载)

    本文转载自:http://www.cnblogs.com/jpf-java/p/6013516.html 一.一对一关联 1.1.提出需求 根据班级id查询班级信息(带老师的信息) 1.2.创建表和数 ...

  2. MyBatis学习总结(五)——实现关联表查询

    一.一对一关联 1.1.提出需求 根据班级id查询班级信息(带老师的信息) 1.2.创建表和数据 创建一张教师表和班级表,这里我们假设一个老师只负责教一个班,那么老师和班级之间的关系就是一种一对一的关 ...

  3. 对于大量left join 的表查询,可以在关键的 连接节点字段上创建索引。

    对于大量left join 的表查询,可以在关键的 连接节点字段上创建索引. 问题: 大量的left join 怎么优化 select a.id,a.num,b.num,b.pcs,c.num, c. ...

  4. MyBatis学习总结_05_实现关联表查询

    一.一对一关联 1.1.提出需求 根据班级id查询班级信息(带老师的信息) 1.2.创建表和数据 创建一张教师表和班级表,这里我们假设一个老师只负责教一个班,那么老师和班级之间的关系就是一种一对一的关 ...

  5. MyBatis学习总结——实现关联表查询(转)

    原文链接:孤傲苍狼 一.一对一关联 1.1.提出需求 根据班级id查询班级信息(带老师的信息) 1.2.创建表和数据 创建一张教师表和班级表,这里我们假设一个老师只负责教一个班,那么老师和班级之间的关 ...

  6. Oracle01——基本查询、过滤和排序、单行函数、多行函数和多表查询

    作者: kent鹏 转载请注明出处: http://www.cnblogs.com/xieyupeng/p/7272236.html Oracle的集群 Oracle的体系结构 SQL> --当 ...

  7. django models的点查询/跨表查询/双下划线查询

    django models 在日常的编程中,我们需要建立数据库模型 而往往会用到表与表之间的关系,这就比单表取数据要复杂一些 在多表之间发生关系的情形下,我们如何利用models提供的API的特性获得 ...

  8. MySQL 多表查询 学习与练习

    一.介绍 首先先准备表 员工表和部门表 #建表 create table department( id int, name varchar(20) ); create table employee1( ...

  9. MySQL学习9 - 单表查询

    一.单表查询的语法 二.关键字的执行优先级(重点) 三.单表查询示例 1.where约束 2.group by分组查询 3.聚合函数 4.HAVING过滤 5.order by查询排序 6.limit ...

  10. Django多表查询

    一.前言 1.什么是ORM? ORM,即Object-Relational Mapping(对象关系映射),它的作用是在关系型数据库和业务实体对象之间作一个映射,这样,我们在具体的操作业务对象的时候, ...

随机推荐

  1. leetCode练习1

    代码主要采用C#书写 题目: 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是,你 ...

  2. 【vue】vue-router的用法

    依赖安装:(c)npm install vue-router 过程: import Vue from 'vue'; import Router from 'vue-router'; Vue.use(R ...

  3. 吴恩达课后作业学习1-week3-homework-one-hidden-layer

    参考:https://blog.csdn.net/u013733326/article/details/79702148 希望大家直接到上面的网址去查看代码,下面是本人的笔记 建立一个带有隐藏层的神经 ...

  4. hyperledger中文文档学习-4-构建第一个fabric网络

    接下来的操作都将在hyperledge环境安装构建的虚拟机的环境下进行 参考https://hyperledgercn.github.io/hyperledgerDocs/build_network_ ...

  5. JS中caller和callee

    caller: caller是函数对象的一个属性,指的是这个函数对象的调用者,如果调用者,如果是顶层调用者,则返回null. 例: function func(){ console.log(func. ...

  6. HTTP与HTTPS对访问速度(性能)的影响

    1 前言 HTTPS 在保护用户隐私,防止流量劫持方面发挥着非常关键的作用,但与此同时,HTTPS 也会降低用户访问速度,增加网站服务器的计算资源消耗. 本文主要介绍 https 对用户体验的影响. ...

  7. Win7 64位系统,IE11,如何让IE的Tab强制运行64位内核?

    有些人在使用TerraExplorer Pro 7版本进行web二次开发的时候,常会遇到下面截图中这样的问题, 这个问题主要是因为安装的TerraExplorer Pro 7 版本是64位的,而模型运 ...

  8. AWS re:Invent(2019.01.09)

    时间:2019.01.09地点:北京国际饭店

  9. 在Winform开发中使用FastReport创建报表

    FastReport.Net是一款适用于Windows Forms, ASP.NET和MVC框架的功能齐全的报表分析解决方案.可用在Microsoft Visual Studio 2005到2015, ...

  10. Linux ACL 权限之进阶篇

    笔者在<Linux ACL 权限>一文中介绍了 Linux ACL 权限的基本用法,本文笔者将尝试探究 ACL 中的基本概念和实现原理,希望能够通过进一步的加深对 Linux 权限系统的理 ...