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语句获取动态的数据集,并为其命名],用户使用时只需使用[名称]即可获取结果集,并可以将其当作表来使用.注意:使用视图时 ...
随机推荐
- 【LeetCode】144. 二叉树的前序遍历
144. 二叉树的前序遍历 知识点:二叉树:递归:Morris遍历 题目描述 给你二叉树的根节点 root ,返回它节点值的 前序 遍历. 示例 输入:root = [1,null,2,3] 输出:[ ...
- 更改Nginx网站根目录以及导致的403 forbidden问题
Nginx采用默认配置,只修改了root的网站根目录位置,再访问网站的时候提示403Forbidden的错误. 仔细检查了新文件夹的权限,也对比了心就网站根目录的权限,都是一样的. 最后尝试关闭了SE ...
- 我去!爬虫遇到JS逆向AES加密反爬,哭了
今天准备爬取网页时,遇到『JS逆向AES加密』反爬.比如这样的: 在发送请求获取数据时,需要用到参数params和encSecKey,但是这两个参数经过JS逆向AES加密而来. 既然遇到了这个情况,那 ...
- 微信机器人项目开发--python
1.外网穿透工具下载与注册[http://ngrok.ciqiuwl.cn/] 2.公众号审请 3.代码编写 糗事百科接口 # _*_ coding:utf-8 _*_ import requests ...
- 第八篇 -- 对数据库mysql进行连接并压测
参考链接:https://blog.csdn.net/laofashi2015/article/details/81296929 工具:mysql-8.0.12-winx64,apache-jmete ...
- 爬取房价信息并制作成柱状图XPath,pyecharts
以长沙楼盘为例,看一下它的房价情况如何url = https://cs.newhouse.fang.com/house/s/b91/ 一.页面 二.分析页面源代码 我们要获得的数据就是名字和价格,先来 ...
- sql注入之类型及提交注入
#参数类型 这里说的参数是源码中存在注入的地方. 其中参数类型有:数字.字符.搜索.json等. 其中sql语句干扰符号有:',",%,),}等,过滤首先考虑闭合这些符号,再进行注入测试. ...
- [源码解析] 机器学习参数服务器ps-lite (1) ----- PostOffice
[源码解析] 机器学习参数服务器ps-lite 之(1) ----- PostOffice 目录 [源码解析] 机器学习参数服务器ps-lite 之(1) ----- PostOffice 0x00 ...
- ubuntu16登录后黑屏无法进入系统问题汇总
今晚在使用虚拟机的过程中发现有些卡顿,顿时想给虚拟机增加内核数,然后,然后,,,我就再也没有看到过图形化界面,在某搜索引擎查找了半天,把我的问题汇总了一下发出来,希望对遇到同样问题的有所帮助. 出现黑 ...
- 规模化敏捷 LeSS(三):LeSS Huge 是怎样炼成的?
上篇文章< LeSS 团队实践指南>中讲到 LeSS 框架中的团队数量不要超过8个,但8个以上的团队要如何实践敏捷呢? 为了应对8个以上团队实践敏捷的情况,Bas 以及 Carig 还提出 ...