首页 > 数据库 >Mysql之多表查询

Mysql之多表查询

时间:2023-12-07 22:36:48浏览次数:37  
标签:comment 外键 查询 Mysql 之多表 null 连接 select

关于Mysql的多表操作

表与表的关系

通常来说我们根据业务要求及其业务模块之间的关系,分析并设计表结构,由于业务之间相互关联,所以我们将表与表的关系分为三类

  1. 一对一
  2. 一对多
  3. 多对多

物理外键和逻辑外键

物理外键是值使用foreign key作为外键关联另一张表的字段的连接方法

物理外键删除一条信息,如果不把外键关联的信息同步删除,数据库操作会进行报错

逻辑外键删除一条信息,对应的信息可以不删除,保留,也不会报错

  • 物理外键:强调数据完整性,操作中性能消耗比较大,小数据库量推荐

  • 逻辑外键:不强制对应信息,只是在代码中体现,如果代码质量不完整,删除导致的垃圾数据会越来越多,大数据库量推荐

表与表的关系实现

1.一对一

通常指的是单表对应单表

是一种特殊的一对多,我们可以在任意一方表中添加外键

SQL脚本

-- 用户基本信息表
create table tb_user(
    id int unsigned  primary key auto_increment comment 'ID',
    name varchar(10) not null comment '姓名',
    gender tinyint unsigned not null comment '性别, 1 男  2 女',
    phone char(11) comment '手机号',
    degree varchar(10) comment '学历'
) comment '用户基本信息表';
-- 用户身份信息表


create table tb_user_card(
    id int unsigned  primary key auto_increment comment 'ID',
    nationality varchar(10) not null comment '民族',
    birthday date not null comment '生日',
    idcard char(18) not null comment '身份证号',
    issued varchar(20) not null comment '签发机关',
    expire_begin date not null comment '有效期限-开始',
    expire_end date comment '有效期限-结束',
    user_id int unsigned not null unique comment '用户ID',
    constraint fk_user_id foreign key (user_id) references tb_user(id)
) comment '用户身份信息表';

注意:在任意的一表加入外键,关联另外一表的主键,并且设置外键为唯一的 unique

2.一对多

列如一个人对应一个部门,而一个部门有很多个人,人与部门就构成了一对多的关系

  • 具体实现

在一对多的表设计中,我们通常将对应 的那张表设置外键关联另一张表的主键

3.多对多

列如一个学生有多个老师,一个老师有多个学生,n:m对应

  • 具体实现

在多对多的表设计中我们我们通常会建立第三张表,中间表至少包含两个外键,分别关联两张表主键

多表查询

多表查询是指从多张表中获取所需数据

  • 笛卡尔积
select * from 表1,表2;

如果我们这样查询,将会看到两表内的数据会自由组合。这种现象被称为笛卡尔积

指的是两个集合的所有组合情况

内连接

隐式内连接语法

select 字段 from 表1,表2 where 连接条件

显式内连接语法

select 字段 from 表1 join 表2 on 连接条件

注意

在多表查询的时候,如果两表有冲突相同的表名,我们通常会在字段名前面加上表名,来指定字段

外连接

外连接分为左外连接和右外连接

左外连接语法:(查询左表所有数据,包括表1和表2交集部分)

select  字段列表   from   表1  left  join 表2  on  连接条件 ... ;

右外连接语法:(查询右表所有数据,包含表1和表2交集部分)

select  字段列表   from   表1  right   join 表2  on  连接条件 ... ;

子查询

指的是select语句的嵌套查询,又称为子查询

SELECT  *  FROM   t1   WHERE  column1 =  ( SELECT  column1  FROM  t2 ... );

子查询可以书写的位置

  • where后
  • from后(作为临时表)
  • select后

标签:comment,外键,查询,Mysql,之多表,null,连接,select
From: https://www.cnblogs.com/yifan0820/p/17884106.html

相关文章

  • pip 安装 mysqlclient报错ERROR: Could not build wheels for mysqlclient, which is
    这是本地环境中没有安装C++的环境,安装好后再次运行报错:国内网站上找了半天,试了又试,不能根本上解决问题,最后从国外的网站上找到的:下载安装MariaDBCConnector,地址:DownloadMariaDBConnectorsfordataaccess&analysis|MariaDB,安装到默认路径下,关闭重新打开cmd,输入:pi......
  • Flask读取MySQL数据库中的图片并返回给前端的步骤?
    要在Flask中读取MySQL数据库中的图片并返回给前端,可以按照以下步骤进行操作:导入相关模块:在Flask应用程序文件中,首先导入必要的模块,包括Flask、MySQL驱动和一些辅助函数。fromflaskimportFlask,request,send_fileimportmysql.connector创建Flask应用程序实例:创建一个Flask应......
  • MySQL 数据备份
    备份类型常见的备份有冷备份、温备份、热备份,还有什么物理备份、逻辑备份、增量备份、差异备份等等。冷备份:需要服务停止,在备份期间不能进行读和写操作。温备份:读操作可执行;但写操作不可执行热备份:读和写都可以正常进行,不影响数据备份逻辑备份:导出数据库中的数据和对......
  • MySQL LOAD DATA LOCAL, 如何跳过第一行?
    在MySQL中,使用LOADDATALOCAL命令可以将数据从本地的文件导入到数据库里面。常见的导入数据格式是csv和txt。但是在导入csv和txt格式的数据时,第一行通常是表头,而不是数据,因此我们需要跳过第一行,只导入后面的数据。阅读更多:MySQL教程 方法一:使用IGNORE关键字LOADDATALOCA......
  • Lucene 查询原基础
    内容收集于知乎,留作学习记录:https://zhuanlan.zhihu.com/p/35814539?spm=ata.21736010.0.0.2b08736byUyj3I前言Lucene是一个基于Java的全文信息检索工具包,目前主流的搜索系统Elasticsearch和solr都是基于lucene的索引和搜索能力进行。想要理解搜索系统的实现原理,就需要深入lu......
  • MySQL创建索引的优缺点
    索引的优点1.创建唯一性索引,保证数据库表中每一行数据的唯一性2.大大加快数据的检索速度,这也是创建索引的最主要的原因3.加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义。4.在使用分组和排序子句进行数据检索时,同样可以显著减少查询中分......
  • windows 安装mysql 和不能通过ip访问到数据库
     一、确认windows是否已经安装mysql1.按【Win+R】打开运行2.输入【services.msc】打开服务3、在服务列表中查找MySQL,如果有mysql服务则表示Windows已经安装MySQL,如果没有MySQL服务则表示Windows没有安装MySQL二、下载MySQL安装包1、mysql官网下载地址  https://d......
  • mysql 实用的sql
    计算今日:SELECTCURRENT_DATE(); 计算本周一日期:SELECTDATE_SUB(CURDATE(),INTERVALWEEKDAY(CURDATE())DAY);计算本周日日期:SELECTDATE_ADD(CURDATE(),INTERVAL6-WEEKDAY(CURDATE())DAY); 计算本月第一天日期:SELECTDATE_SUB(CURDATE(),INTERVALDAY(CURDAT......
  • [小白入门指南] 如何使用gorm操作MySQL
    1.使用gorm的前置条件1.1MySQL的安装和配置1.2NaviacteForMySQL162.gorm基本操作2.1增2.2查2.3改2.4删2.5gorm迁移1.使用gorm的前置条件1.1MySQL的安装和配置Debian中安装MySQL|MySQL创建用户并授予权限#用rpm查看是否安装了MySQLrpm-qa|gr......
  • Illegal mix of collations (utf8mb4_0900_ai_ci,IMPLICIT) MySql字符集及校对规则不
    查询时报错--用于解决报错>1267-Illegalmixofcollations(utf8mb4_0900_ai_ci,IMPLICIT)and(utf8mb4_general_ci,IMPLICIT)foroperation'='这个错误是由于在进行比较操作时涉及到不同的字符集和校对规则(collations)。涉及到了utf8mb4_0900_ai_ci和utf8mb4_general......