首页 > 数据库 >MYSQL基础知识之多表查询

MYSQL基础知识之多表查询

时间:2023-04-06 21:57:08浏览次数:37  
标签:关系 列表 基础知识 学生 MYSQL 之多表 查询 连接 select

1、多表关系

在数据表中,各个表结构之间存在着各种关系(一对一、一对多、多对多)。

一对一关系:

示例:学生与学生详情的关系,一个学生对应一个详细情况,一个详细情况对应一个学生。

实现:在任意一方加入外键,关联另外一方的主键,并且设置外键为唯一的UNIQUE。

一对多关系:

示例:学生与班级的关系,一个班级对应多个学生,一个学生对应一个班级。

实现:在一对多关系中,在多的一方建立外键,指向一的一方的主键。

多对多关系:

示例:学生与课程的关系,一个学生可以选修多门课程,一门课程也可以给多个学生选择。

实现:在多对多关系中,建立第三张中间表,中间表至少包含两个外键,分别关联两方主键

 

2、多表查询

  多表查询就是从多张表中去查询数据,在实际开发中大多数情况数据都是存储在多张中的,它们通过一个关联关系连接起来,这样就可以通过这个关联关系去查询到想要的数据。多表查询可以分为连接查询、联合查询和子查询。

 

3、连接查询

连接查询有:

内连接:相当于查询A、B交集部分数据;

外连接:左(右)外连接,查询左(右)表所有数据,以及两张表交集部分数据;

自连接:当前表与自身的连接查询,自连接必须使用表别名

 

3.1、内连接

内连接可以分为隐式内连接和显式内连接,语法格式如下:

# 隐式内连接
select 字段列表 FROM 表1,表2 where 条件.....;

# 显式内连接
select 字段列表 FROM 表1 [inner] join 表2 on 连接条件....;

 

3.2、外连接

语法:

# 左外连接
select 字段列表 FROM 表1 left [outer] join 表2 on 条件...;

# 右外连接
select 字段列表 FROM 表1 right [outer] join 表2 on 条件...;

 

3.3、自连接

语法:select 字段列表 from 表A 别名A join 表名A 别名B on 条件...;

 

4、联合查询

联合查询就是把多次查询的结果合并起来,形成一个新的查询结果集,使用union、union all关键字连接。注意:在联合查询中,多张表的列数、字段类型必须保持一致

语法:

select 字段列表 from 表A union [all] select 字段列表 from 表B;

 

 5、子查询

在SQL语句中嵌套select语句,称为嵌套查询,又称子查询。

语法:select * from t1 where column1=(select column1 from t2);

子查询外部的语句可以是insert、update、delete、select的任何一个。

根据子查询结果不同,分为:

标量子查询(子查询结果为单个值);

列子查询(子查询结果为一列);

行子查询(子查询结果为一行);

表子查询(子查询结果为多行多列)。

根据子查询位置,可以分为:where之后,from之后,select之后。

 

5.1、标量子查询
子查询返回的结果是单个值(数字、字符串、日期等),最简单的形式,这种子查询成为标量子查询。

常用的操作符:= 、<> 、 > 、 >= 、 < 、 <=。

 

5.2、列子查询
子查询返回的结果是一列或多列,这种子查询称为列子查询。

常用的操作符:

IN:在指定的集合范围之内,多选一;

NOT IN :不在指定的集合范围之内;

ANY:子查询返回列表中,有任意一个满足即可;

SOME:子查询返回列表中,有任意一个满足即可;

ALL:子查询返回列表的所有值都必须满足。

 

5.3、行子查询
子查询返回的结果是一行或多列,这种子查询称为行子查询。

常用的操作符:=、<>、IN 、NOT IN

 

5.4、表子查询

子查询返回的结果是多行多列,这种子查询称为表子查询。

常用的操作符为IN。

 

6、附7种SQL JOINS的实现

 

标签:关系,列表,基础知识,学生,MYSQL,之多表,查询,连接,select
From: https://www.cnblogs.com/jpxjx/p/17294258.html

相关文章

  • 二。docker安装mysql 并配置
    1.docker安装mysql1.1使用docker拉取mysql的镜像dockerpullmysql:5.71.2通过镜像启动dockerrun-p3306:3306--namemymysql-v$PWD/conf:/etc/mysql/conf.d-v$PWD/logs:/logs-v$PWD/data:/var/lib/mysql-eMYSQL_ROOT_PASSWORD=123456-dmysql:5.7-p3306:3306:......
  • MYSQL数据库误赋权引发的血案
    赋权操作是DB最常规操作,只增加一个赋权,这都有坑吗?帮同事处理mysql赋权引发的故障案例,有代表性,避坑!!! 11:03 接到求助,系统完全打不开了。信息获取。Q1:哪个系统?xxx系统。Q2:什么报错?Access denied by for user ‘pqc_doa_up’@’172.26.154.68’(using password:YES)Q3......
  • MySQL Others--优化autocommit会话参数设置请求
    问题描述在排查QPS较高的MySQL集群过程中发现,部分MySQL集群约50%的请求为"SETautocommit=1",每次业务请求前都会执行1次"SETautocommit=1"操作,虽然单次”SETautocommit=1“操作并不会消耗过多MySQL服务器资源,但高QPS场景下频繁执行"SETautocommit=1"操作,严重浪费应用服务器和M......
  • keepalived+MySQL实现高可用
    (一)keepalived概述Keepalived通过VRRP(虚拟路由冗余协议)协议实现虚拟IP的漂移。当master故障后,VIP会自动漂移到backup,这时通知下端主机刷新ARP表,如果业务是通过VIP连接到服务器的,则此时依然能够连接到正常运行的主机,RedHat给出的VRRP工作原理如下图: 本来对VIP漂移有一定了解的......
  • MySQL - 02
     数据库--查询数据库showdatabases;--创建数据库createdatabaseifnotexistsdbName;--切换数据库usedbName;--删除数据库dropdatabasedbName;dropdatabaseifexistsdbName;--查看当前使用的数据库selectdatabase(); 表&数据--创建表createta......
  • MySQL(十二)索引使用的情况分析
    索引使用的情况分析数据准备创建表student_info、courseCREATETABLE`student_info`(`id`intNOTNULLAUTO_INCREMENT,`student_id`intNOTNULL,`name`varchar(20)DEFAULTNULL,`course_id`intNOTNULL,`class_id`intDEFAULTNULL,`create_tim......
  • mysql 窗口函数(Window Functions)
    MySQL窗口函数(WindowFunctions)是一种高级的SQL查询技巧,它允许在结果集的一组相关行上执行计算。窗口函数可以用于处理分组、排序、累计等复杂的聚合任务,使得查询更加简洁和高效。在MySQL8.0及更高版本中,支持窗口函数。以下是一些常用的窗口函数:ROW_NUMBER():为结果集中的......
  • Linux下安装MySQL
    0准备工作yum换源:https://www.cnblogs.com/lgjb/p/17293111.html1下载yumRepositorywget-i-chttp://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm2安装yumRepositoryyum-yinstallmysql57-community-release-el7-10.noarch.rpm3安装mysql5.......
  • MySQL重复数据
    插入的数据中A,B,E存在重复数据,C没有重复记录123456789101112131415161718192021CREATETABLE`tab`(  `id`int(11)NOTNULLAUTO_INCREMENT,  `name`varchar(20)DEFAULTNULL,  PRIMARYKEY(`id`))ENGINE=InnoDBAUTO_INCREME......
  • 深入理解MySQL索引底层数据结构
    1引言在日常工作中,我们会遇见一些慢SQL,在分析这些慢SQL时,我们通常会看下SQL的执行计划,验证SQL执行过程中有没有走索引。通常我们会调整一些查询条件,增加必要的索引,SQL执行效率就会提升几个数量级。我们有没有思考过,为什么加了索引就会能提高SQL的查询效率,为什么有时候加了索引SQ......