mysql基础操作(四):简单多表查询
-- 创建部门 (主表)
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基础操作(四):简单多表查询的更多相关文章
- Mysql基础(四):库、表、记录的详细操作、单表查询
目录 数据库03 /库.表.记录的详细操作.单表查询 1. 库的详细操作 3. 表的详细操作 4. 行(记录)的详细操作 5. 单表查询 数据库03 /库.表.记录的详细操作.单表查询 1. 库的详细 ...
- Mysql基础(五):多表查询、pymysql模块
目录 数据库04 /多表查询.pymysql模块 1. 笛卡尔积 2. 连表查询 3. 子查询 4. pymysql模块 数据库04 /多表查询.pymysql模块 1. 笛卡尔积 将两表所有的数据一 ...
- MySQL基础(三)多表查询(各种join连接详解)
Mysql 多表查询详解 一.前言 二.示例 三.注意事项 一.前言 上篇讲到Mysql中关键字执行的顺序,只涉及了一张表:实际应用大部分情况下,查询语句都会涉及到多张表格 : 1.1 多表连接有哪些 ...
- MySQL数据库(四)多表查询
两张假设有两张表格A和B,把表格当作一个集合,那么表格中的记录就是集合中的一个元素. 两张表格如下: TableA:TableB: 2.1 内连接(只有一种场景) inner join 或者join( ...
- MySQL基础(四)(子查询与链接)
1.子查询简介 其中,所谓的“外层查询”并不是指“查找”,指的是所有SQL语句的统称:结构化查询语言(Structured Query Language),简称SQL. : 2.由比较运算符引发的子查 ...
- MYSQL基础操作之单表的增删改查
一.添加数据. -- 1.创建表,并插入一定的数据. CREATE TABLE STUDENT( ID INT, USERNAME ), SERVLET INT, JSP INT, ADDRESS ) ...
- MYSQL 基础操作
1.MySQL基础操作 一:MySQL基础操作 1:MySQL表复制 复制表结构 + 复制表数据 create table t3 like t1; --创建一个和t1一样的表,用like(表结构也一样 ...
- MySQL基础操作&&常用的SQL技巧&&SQL语句优化
基础操作 一:MySQL基础操作 1:MySQL表复制 复制表结构 + 复制表数据 create table t3 like t ...
- MYSQL基础操作
MYSQL基础操作 [TOC] 1.基本定义 1.1.关系型数据库系统 关系型数据库系统是建立在关系模型上的数据库系统 什么是关系模型呢? 1.数据结构可以规定,同类数据结构一致,就是一个二维的表格 ...
- MySQL基础操作(二)
MySQL基础操作 一.视图 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名称]即可获取结果集,并可以将其当作表来使用.注意:使用视图时 ...
随机推荐
- 微信小程序云开发-云存储-上传单张照片到云存储并显示到页面上
一.wxml文件 页面上写上传图片的按钮,按钮绑定chooseImg. <button bindtap="chooseImg" type="primary" ...
- 第十一篇 -- QMainWindow与QAction(斜体-粗体-下划线)
效果图: ui_mainWindow.py # -*- coding: utf-8 -*- # Form implementation generated from reading ui file ' ...
- [SqlServer] 理解数据库中的数据页结构
这边文章,我将会带你深入分析数据库中 数据页 的结构.通过这篇文章的学习,你将掌握如下知识点: 1. 查看一个 表/索引 占用了多少了页. 2. 查看某一页中存储了什么的数据. 3. 验证在数据库中用 ...
- shell常识
1 #!/bin/bash 2 : << ! 3 #使用变量 4 your_name="qinjx" 5 echo $your_name 6 echo ${your_n ...
- Http Request Smuggling - Note
http请求走私漏洞 访问Burp靶场速度感人..都要哭了(如果没有账户的先创建账户) 基础补充 pipeline http1.1有了Pipeline,就不需要等待Server端的响应了.浏览器默认不 ...
- VMware 安装 Centos 7 虚拟机配置网络
在 Windows 机器上如果想使用 Linux 环境,最方便的方式莫过于使用虚拟机,最常用的软件各位肯定也不陌生,大名鼎鼎的 VMware . 不过这玩意有点稍稍不是那么智能,每次安装 Linux ...
- 时间转换 BASIC-14
时间转换 给定一个以秒为单位的时间t,要求用"::"的格式来表示这个时间.表示时间,表示分钟,而表示秒,它们都是整数且没有前导的"0".例如,若t=0,则应输出 ...
- excel的导入与导出---通用版
excel的导入与导出---通用版 web项目关于导入导出的业务场景很常见,最近我就又遇到了这个业务场景.这次将最近半个月做的导入导出总结一下 使用的pom如下,主要还是阿里巴巴的easyexcel依 ...
- STM32启动代码分析及其汇编学习-ARM
STM32 启动代码 Author By YuCloud 边看启动文件边学汇编 汇编 see ARM: Assembler User Guide see: https://blog.csdn.net/ ...
- 【笔记】scikit-learn中的PCA(真实数据集)
sklearn中的PCA(真实的数据集) (在notebook中) 加载好需要的内容,手写数字数据集 import numpy as np import matplotlib.pyplot as pl ...