MySQL学习笔记-多表查询(上)
多表查询(上)
一. 多表关系
在实际应用中,根据需求,设计的表结构之间存在联系,联系一般分为以下三种
- 一对多(多对一)
- 多对多
- 一对一
1. 一对多(多对一)
案例:部门与员工的关系,一个部门对应多个员工,一个员工对应一个部门。
- 实现:在多的一方建立外键,指向一的一方的主键

2. 多对多
案例:学生与课程的关系,一个学生可以选修多门课程,一门课程也可以供多个学生选择。
- 实现:建立第三张中间表,中间表至少包含两个外键,分别关联两方主键

3. 一对一
案例:用户与用户信息的关系。
多用于单表拆分,将一张表的基础字段放在一张表中,其他详情字段放在另一张表中,以提升效率。
- 实现:在任意一方加入外键,管理另外一方的主键,并且设置外键为唯一的(UNIQUE)。

二. 多表查询
多表查询:从多张表中查询数据
笛卡尔积:指两个集合的所有组合情况。而多表查询目的就是消除无效的笛卡尔积。
多表查询的分类
- 连接查询
- 内连接:查询A、B交集部分数据
- 外连接:左(右)外连接:查询左表(右表)所有数据,以及两张表交集部分数据
- 自连接:当前表与自身的连接查询,自连接必须使用表别名
- 子查询
- 连接查询
1. 连接查询
1.1 内连接
内连接:查询A、B交集部分数据
# 隐式内连接
select {字段列表} from {表1},{表2} where {条件};
# 显式内连接
select {字段列表} from {表1} [inner] join {表2} on {连接条件};
- 在编写条件时,有些情况下表名会很长,不方便,可以在表名后取一个别名,后面的条件就用别名代替表名。注意:取别名后,在写条件或字段列表时原名就不能用了,会报错。
select {字段列表} from {表1} {别名1},{表2} {别名2} where {条件};
1.2 外连接
外连接:左(右)外连接:查询左表(右表)所有数据,以及两张表交集部分数据
# 左外连接
select {字段列表} from {表1} left [outer] join {表2} on {条件};
# 右外连接
select {字段列表} from {表1} right [outer] join {表2} on {条件};
- 外连接和内连接的区别:比如说有一张员工表和一张部门表,如果其中有一条数据没有部门,如果使用内连接查询员工和对应的部门,没有部门的那个员工就查不到,但是使用外连接是可以查询到的。
1.3 自连接
自连接:当前表与自身的连接查询,自连接必须使用表别名
案例:在一张表里有员工信息,包括直属领导id(领导也在员工表内),查询员工与对应的领导,用自连接。
- 自连接可以是内连接查询,也可以是外连接查询。
# 内连接语法,外连接类似
select {字段列表} from {表A} {别名A} join {表A} {别名B} on {条件};
- 自连接可以看成两张一样的表连接查询。
MySQL学习笔记-多表查询(上)的更多相关文章
- mysql学习笔记-- 多表查询之外键、表连接、子查询、索引
本章主要内容: 一.外键 二.表连接 三.子查询 四.索引 一.外键: 1.什么是外键 2.外键语法 3.外键的条件 4.添加外键 5.删除外键 1.什么是外键: 主键:是唯一标识一条记录,不能有重复 ...
- MySQL学习9 - 单表查询
一.单表查询的语法 二.关键字的执行优先级(重点) 三.单表查询示例 1.where约束 2.group by分组查询 3.聚合函数 4.HAVING过滤 5.order by查询排序 6.limit ...
- MySQL学习笔记——多表连接和子查询
多表连接查询 # 返回的是两张表的乘积 SELECT * FROM tb_emp,tb_dept SELECT COUNT(*) FROM tb_emp,tb_dept # 标准写法,每个数据库都能这 ...
- MySQL学习10 - 多表查询
一.多表连接查询 1.交叉连接 2.内连接 3.外连接之左连接 4.外连接之右连接 5.全外连接 二.符合条件连接查询 三.子查询 1.带in关键字的子查询 2.带比较运算符的子查询 3.带EXIST ...
- mysql学习笔记11_12(查询)
1.建表和插入值 创建company数据库 创建 department表 create table department(d_id int(10) primary key not null uniqu ...
- MySQL学习笔记 -- 数据表的基本操作
数据库是一个可以存放数据库对象的容器,数据库对象包括:表.视图.存储过程.函数.触发器.事件.其中,表是数据库最基本的元素,是其他数据库对象的前提条件. 表中的一列称为一个字段,一行称为一条记录. 1 ...
- MySql 学习笔记 (派生表)
派生表也是一种子查询那么它出现在 select * from ( select * from b <--这个就是派生表啦 )派生表其实不是个好东西,在生产的时候他是可以通过索引来过滤的,但是一但 ...
- mysql学习笔记02 表的操作
创建数据表create table table_name(//定义表的列的结构)创建表 先分析需要保存的实体数据,荣有哪些属性,这些属性应该有哪些属性列的定义 列名 列的数据类型 {} 进行表操作时 ...
- MySql学习笔记(一)之DQL常用查询
MySql学习笔记(一)之DQL常用查询 前言:mysql是中小型的数据库软件,SQL语言分为DDL,DCL,DML,DQL四种,在这里重点讲解DQL的单表查询. 正文:在学习mysql单表查询之前, ...
- Mysql学习笔记(三)对表数据的增删改查。
正文内容. 这一部分是最简单的,也是最麻烦的.简单是因为其实只包括增删该插四个部分.大体上看,增加数据.删除数据.修改数据.查询数据都不麻烦啊,我们日常都是常用的.这个谁不会呢?以前在培训机构学mys ...
随机推荐
- 爱奇艺在 Dubbo 生态下的微服务架构实践
简介: 本文整理自作者于 2020 年云原生微服务大会上的分享<爱奇艺在 Dubbo 生态下的微服务架构实践>,重点介绍了爱奇艺在 Dubbo.Sentinel 等开发框架方面的使用经验以 ...
- 先行一步,7大技术创新和突破,阿里云把 Serverless 领域的这些难题都给解了
简介: 函数计算 FC 首创 GPU 实例.业内首发实例级别可观测和调试.率先提供端云联调和多环境部署能力.GB 级别镜像启动时间优化至秒级.VPC 网络建连优化至200ms,Serverless ...
- IEC104 从站/服务端模拟器 调试工具推荐
目录 IEC104 从站/服务端模拟器 调试工具推荐 主要功能 软件截图 IEC104 从站/服务端模拟器 调试工具推荐 下载地址:http://www.redisant.cn/iec104serve ...
- 18.基于Consul的服务发现和ConsulManager管理
192.168.10.14 prometheus.consul 192.168.10.100 各类服务 一.基于Consul的服务发现 Consul 是由 HashiCorp 开发的一个支持多数据中心 ...
- 一个可一键生成短视频的AI大模型,亲测可用
大家好,我是 Java陈序员. 自从 OpenAI 发布 Sora 文本生成视频模型后,文本生成视频的 AI 技术引起了无数圈内圈外人士的关注和实验. 今天,给大家介绍一个大模型,可一键生成短视频. ...
- Node.js 万字教程
0. 基础概念 Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境,使用了一个事件驱动.非阻塞式 I/O 模型,让 JavaScript 运行在服务端的开发平台. ...
- SAP HANA计算视图
Text. Text. Text. Text. Text. Text. Text. Text. Text. Text. 越来越多的SAP用户正在将SAP HANA实施为现有SAP BW的基础和数据库. ...
- golang 常用操作
golang 获取切片 slice 第一个 最后一个 元素 复合数据类型切片通常用作Go中索引数据的口语结构. 该类型[]intSlice是具有类型为integer的元素的切片. len函数用于获取切 ...
- gorm 如何对字段进行comment注释?
type User struct { Model Name string `gorm:"type:char(30);comment:'姓名'"` }
- idea修改项目中某个模块名称
1.修改模块名称 2.修改文件夹名称 3.修改本模块里面pom的名称 4.修改其他模块里面引用的名称