-- 创建部门  (主表)
create table dept(
id int primary key auto_increment,
name varchar(20)
);
-- 创建员工 (副表)
create table employee(
id int primary key auto_increment,
name varchar(20),
deptId int, -- 级联修改 级联删除
constraint employee_dept_fk foreign key(deptId) references dept(id) on update cascade on delete cascade -- 设置外键
);
insert into dept(name) values('软件开发部'),('软件维护部'),('秘书部');
insert into emplpyee(name, deptId) values('张三', 1),('李四', 2),('王五', 3), ('陈六', 2);

1.交叉连接查询(笛卡尔乘积:出来的结果是两张表的乘积 4*3 = 12)错误的

-- 产生笛卡尔积的原因:没有足够的连接条件
-- 需求:员工及其部门
select employee.name, dept.name from employee, dept;

多表查询的步骤:   
    1)确定查询哪些表
    2)确定查询哪些字段
    3)确定连接条件

语句涉及比较长之后可以分行写,语法遇到分号结束
一般我们可以给表一个别名:这里的as可以省略

-- 2.内连接查询

-- 内连接的效果:只有满足连接条件的数据才会显示出来

select e.name, d.name
from employee as e, dept as d -- 可写为:from employee e, dept d
where e.deptId = d.id;

-- 以上写法等同于:

select e.name, d.name
from employee e
inner join dept d
on e.deptId = d.Id;

-- 3.外连接查询

-- 3.1 左外连接查询

-- 需求:查询部门及其部门的员工(部门全部都要显示)
-- 包括即使员工为null都要显示出来
-- 效果:左表 部门要全部显示出来, 左外连接查询 优先查询左表
-- 右表的数据当满足连接条件的时候就显示满足条件的数据
-- 当不满足条件时,则就显示一个null
-- 预期结果:
-- 软件开发部 张三
-- 软件开发部 王五
-- 软件维护部 李四
-- 软件维护部 陈六
-- 秘书部 null
select d.name, e.name
from dept d
left outer join employee e
on e.deptId = d.id;

-- 3.2 右外连接查询

-- 同上,右表优先显示,和上表效果一样的显示:
select d.name, e.name
from employee e
right outer join dept d
on d.id = e.deptId;

-- 4.自连接查询

-- 现在有一个表如下:
-- id name deptId bossId(上司id也是员工id)
-- 1 张三 4 null
-- 2 李四 5 1
-- 3 王五 4 2
-- 4 陈六 5 3
-- 需求:查询员工姓名及其上司姓名
-- 预期结果:
-- 员工 上司
-- 张三 null
-- 李四 张三
-- 王五 李四
-- 陈六 王五
select e.name, b.name
from employee e
left outer join employee b
on e.bossId = b.id;

join 和 union 的区别:

left join 表示至少2表要有1个匹配字段才能返回数据;

union则不需要有关联字段就可以返回数据;

而且union要求多次查询的结果列数必须一样;

例如:

select a,b
from t1
union
select a,b
from t2

必须要求,t1,t2都是显示两个字段

select查询中的格式:

-- select 字段名,可以为*  可用聚合
-- from 表名 子查询中可跟limit
-- join
-- where 条件限制 子查询中可跟聚合
-- group by 分组语句 having 统计函数的比较语句 可跟聚合
-- order by 排序语句 可跟聚合
-- limit

补充:case when的使用

select wokshop_id as '车间编号',
sum(case when worker_sex='男' then 1 else 0 end) as '男',
sum(case when worker_sex='女' then 1 else 0 end) as '女'
from XXX;
SELECT
case -------------如果
when sex='1' then '男' -------------sex='1',则返回值'男'
when sex='2' then '女' -------------sex='2',则返回值'女'
else 0 -------------其他的返回'其他’
end -------------结束
from sys_user --------整体理解: 在sys_user表中如果sex='1',则返回值'男'如果sex='2',则返回值'女' 否则返回'其他’

mysql基础操作(四):简单多表查询的更多相关文章

  1. Mysql基础(四):库、表、记录的详细操作、单表查询

    目录 数据库03 /库.表.记录的详细操作.单表查询 1. 库的详细操作 3. 表的详细操作 4. 行(记录)的详细操作 5. 单表查询 数据库03 /库.表.记录的详细操作.单表查询 1. 库的详细 ...

  2. Mysql基础(五):多表查询、pymysql模块

    目录 数据库04 /多表查询.pymysql模块 1. 笛卡尔积 2. 连表查询 3. 子查询 4. pymysql模块 数据库04 /多表查询.pymysql模块 1. 笛卡尔积 将两表所有的数据一 ...

  3. MySQL基础(三)多表查询(各种join连接详解)

    Mysql 多表查询详解 一.前言 二.示例 三.注意事项 一.前言 上篇讲到Mysql中关键字执行的顺序,只涉及了一张表:实际应用大部分情况下,查询语句都会涉及到多张表格 : 1.1 多表连接有哪些 ...

  4. MySQL数据库(四)多表查询

    两张假设有两张表格A和B,把表格当作一个集合,那么表格中的记录就是集合中的一个元素. 两张表格如下: TableA:TableB: 2.1 内连接(只有一种场景) inner join 或者join( ...

  5. MySQL基础(四)(子查询与链接)

    1.子查询简介 其中,所谓的“外层查询”并不是指“查找”,指的是所有SQL语句的统称:结构化查询语言(Structured Query Language),简称SQL. : 2.由比较运算符引发的子查 ...

  6. MYSQL基础操作之单表的增删改查

    一.添加数据. -- 1.创建表,并插入一定的数据. CREATE TABLE STUDENT( ID INT, USERNAME ), SERVLET INT, JSP INT, ADDRESS ) ...

  7. MYSQL 基础操作

    1.MySQL基础操作 一:MySQL基础操作 1:MySQL表复制 复制表结构 + 复制表数据 create table t3 like t1; --创建一个和t1一样的表,用like(表结构也一样 ...

  8. MySQL基础操作&&常用的SQL技巧&&SQL语句优化

    基础操作     一:MySQL基础操作         1:MySQL表复制             复制表结构 + 复制表数据             create table t3 like t ...

  9. MYSQL基础操作

    MYSQL基础操作 [TOC] 1.基本定义 1.1.关系型数据库系统 关系型数据库系统是建立在关系模型上的数据库系统 什么是关系模型呢? 1.数据结构可以规定,同类数据结构一致,就是一个二维的表格 ...

  10. MySQL基础操作(二)

    MySQL基础操作 一.视图 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名称]即可获取结果集,并可以将其当作表来使用.注意:使用视图时 ...

随机推荐

  1. 《手把手教你》系列技巧篇(九)-java+ selenium自动化测试-元素定位大法之By name(详细教程)

    1.简介 上一篇宏哥已经介绍了通过id来定位元素,今天继续介绍其他剩下的七种定位方法中的通过name来定位元素.本文来介绍Webdriver中元素定位方法之By name,顾名思义,就是我们想要定位的 ...

  2. easyui-textbox使用value设置默认值失效

    1,使用easyu-textbox的value参数设置默认值失效,easyui-textbox放到dialog弹框中,当dialog的closed为false时,也就是打开dialog时,设置的val ...

  3. 前端开发入门到进阶第一集【使用sublime快速编写Html和Css】

    1,安装sublime编辑器,下载地址:http://www.sublimetext.com/3 2,要使用sublime的插件机制必须安装package control:https://packag ...

  4. vue.js 贡献指南(翻译)

    Vue.js Contributing Guide vue 2.x 嗨! 我很高兴你有兴趣为Vue.js做贡献. 在提交您的贡献之前,请务必花点时间阅读以下指南. 行为守则 问题报告指南 PR指南 开 ...

  5. 说说Java异步调用的几种方式

    日常开发中,会经常遇到说,前台调服务,然后触发一个比较耗时的异步服务,且不用等异步任务的处理结果就对原服务进行返回.这里就涉及的Java异步调用的一个知识.下面本文尝试将Java异步调用的多种方式进行 ...

  6. 图解 HTTP 连接管理

    熟悉我的小伙伴都知道,我之前肝了本<HTTP 核心总结>的 PDF,这本 PDF 是取自我 HTTP 系列文章的汇总,然而我写的 HTTP 相关内容都是一年前了,我回头看了一下这本 PDF ...

  7. MFC发送自定义消息

    1.在窗口的头文件中声明: afx_msg LRESULT OnMyMessage(WPARAM wParam, LPARAM lParam); 2.在cpp的BEGIN_MESSAGE_MAP和EN ...

  8. WinUI 3学习笔记(2)—— 用ListView来展示集合

    在WPF的时代,我们多是使用ListBox和ListView来展示,纵向滚动条显示的集合数据.这两个控件的默认样式,以及对触控的支持,已完全落后于时代.他们两个分别长这样,和Win10及Win11的风 ...

  9. [SQL]基本表的定义及其完整性约束

    在使用数据库时,绝大多数时间都是在使用基本表. SQL Server数据类型 截图来源: https://www.w3school.com.cn/sql/sql_datatypes.asp 创建基本表 ...

  10. 作为有经验的程序员如果不懂Lambda表达式就说不过去了吧,建议收藏!!!

      最近刚好有空给大家整理下JDK8的特性,这个在实际开发中的作用也是越来越重了,本文重点讲解下Lambda表达式 Lambda表达式   Lambda 表达式,也可称为闭包,它是推动 Java 8 ...