一. 准备表

#部门表
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. JS DOM 实现删除和添加的功能

    <!DOCTYPE html> <html> <head> <title>发表评论</title> <link rel="s ...

  2. ES5-ES6-ES7_函数的扩展

    call()/apply()/bind()的用法 Function.prototype.bind(obj) :将函数内的this绑定为obj, 并将函数返回 function foo() { cons ...

  3. UVA11400-Lighting System Design(动态规划基础)

    Problem UVA11400-Lighting System Design Accept: 654  Submit: 4654Time Limit: 3000 mSec Problem Descr ...

  4. [CQOI2018]解锁屏幕

    嘟嘟嘟 这题感觉真的很简单-- \(O(n ^ 2 logn)\)的做法特别好理解,但得开O2. 看数据范围,肯定是状压dp.但刚开始我没想通状压啥,因为点与点之间还有顺序问题.但后来发现这个顺序是子 ...

  5. docker-1-环境安装及例子实践

    1.安装go 先新建一个Go的工作空间文件夹,文件夹路径建议放在$HOME下: userdeMacBook-Pro:~ user$ cd $HOME userdeMacBook-Pro:~ user$ ...

  6. 手动设定统计数据 set_table_stats

    PROCEDURE SET_TABLE_STATS Argument Name Type In/Out Default? ------------------------------ -------- ...

  7. redis list 清空记录小技巧

    redis list 清空记录小技巧   redis中的list操作命令中删除指定key中的所有记录命令: ltrim key 1 0 即 ltrim key start end 中的start要比e ...

  8. 理解使用before,after伪类实现小三角形气泡框

    先来理解before和after伪类的用法吧,before从字面上的意思可以理解为前面的意思,它一般和content属性一起使用,把内容插入在其他元素的前面,同理after的含义就是把内容插入到其他元 ...

  9. C# — Socket通信实现

    昨天晚上在网上查找资料,简单实现了C#开发的Socket通信,以下是具体的开发流程,我使用的是VS2017进行开发的: 一.服务器端: 1.新建一个项目,Windows控制台程序 2.重命名cs文件 ...

  10. Git基础使用教程

    Git是一个开源的分布式版本控制系统,可以有效.高速的处理从很小到非常大的项目版本管理,是目前使用范围最广的版本管理工具. 之前的博客中介绍了linux下安装Git的内容,这篇博客,简单介绍下使用Gi ...