首页 > 数据库 >MySQL入门系列7-多表查询

MySQL入门系列7-多表查询

时间:2023-09-10 23:32:55浏览次数:39  
标签:语句 多表 入门 MySQL 查询 SQL employee id select

在我们日常开发中,表与表之间的关系通常分为以下几种:一对多(多对一)、’多对多、一对一。

一、一对多(多对一)

我们之前的部门和员工表就是一个一对多的关系,一个部门有多个员工,部门就是一方,员工就是多方。

员工表的外键关联了部门表

MySQL入门系列7-多表查询_数据

二、多对多

学生和课程的关系可以理解为多对多的关系,一个学生可以学习多门课程,一门课程也可以被多个学生选择。这种情况下我们需要建立一个中间表来存储,中间表需要包含两个外键,分别关联双方的主键。

学生表建表SQL语句:

CREATE TABLE t_student (
id BIGINT PRIMARY KEY auto_increment,
name VARCHAR ( 50 ) NOT NULL COMMENT '学生姓名')

课程表建表SQL语句:

CREATE TABLE t_course (
id BIGINT PRIMARY KEY auto_increment,
name VARCHAR ( 50 ) NOT NULL COMMENT '课程名称')

学生课程中间表SQL语句:

CREATE TABLE t_student_course (
	id BIGINT PRIMARY KEY auto_increment,
	student_id BIGINT COMMENT '学生ID',
	course_id BIGINT COMMENT '课程ID',
CONSTRAINT fk_student FOREIGN KEY ( student_id ) REFERENCES t_student ( id ),
CONSTRAINT fk_course FOREIGN KEY ( course_id ) REFERENCES t_course ( id ))

执行这些SQL语句之后我们查看中间表已经添加了学生和课程表的外键约束。

MySQL入门系列7-多表查询_数据_02

三、一对一

我们的用户和用户详情表之间或者订单和订单详情表之间就是一对一的关系,多用于单表拆分,将一张表的基础字段放在一张表中,其他详情字段放在另外一张表中,在详情表中设置外键关联主表的主键,实现一对一的关系。

用户表SQL语句:

CREATE TABLE `t_user`  (
  `id` bigint primary key auto_increment NOT NULL,
  `name` varchar(50)  NOT NULL,
  `age` int NULL DEFAULT NULL,
) ENGINE = InnoDB

用户详情表SQL语句:

CREATE TABLE t_user_info (
	id BIGINT PRIMARY KEY auto_increment,
	native_place VARCHAR ( 50 ) COMMENT '籍贯',
	address VARCHAR ( 50 ) COMMENT '地址',
user_id BIGINT COMMENT '所属用户',
CONSTRAINT fk_user FOREIGN KEY ( user_id ) REFERENCES t_user ( id ))

MySQL入门系列7-多表查询_数据_03

四、多表查询

1.隐式内连接

语法:

SELECT 字段列表 FROM 表1,表2 WHERE 限制条件;

SQL语句:

select d.*,e.* from t_department d,t_employee e WHERE d.id=e.dept_id

MySQL入门系列7-多表查询_数据_04

2.显式外连接

语法:

SELECT 字段列表 FROM 表1 [ INNER ] JOIN 表2 ON 连接条件 ... ;

SQL语句:

select d.*,e.* from t_department d inner join t_employee e on d.id=e.dept_id

MySQL入门系列7-多表查询_字段_05

3.外连接

外连接分为:左外连接和右外连接。左外连接相当于查询左表的所有数据,也包含左表和右表交集的部分的数据。右外连接相当于查询右表的所有数据,也包含左表和右表交集部门的数据。

左外连接语法:

SELECT 字段列表 FROM 表1 LEFT [ OUTER ] JOIN 表2 ON 条件 ... ;

SQL语句:

select d.*,e.* from t_department d left join t_employee e on d.id=e.dept_id

MySQL入门系列7-多表查询_SQL_06

右外连接语法:

SELECT 字段列表 FROM 表1 RIGHT [ OUTER ] JOIN 表2 ON 条件 ... ;

SQL语句:

select d.*,e.* from t_department d right join t_employee e on d.id=e.dept_id

MySQL入门系列7-多表查询_SQL_07

4.联合查询

联合查询就是把多次查询的结果合并起来,形成一个新的查询结果集。

语法:

SELECT 字段列表 FROM 表A  ...   # 查询结果集1
UNION [ ALL ]
SELECT 字段列表 FROM 表B  ....;  # 查询结果集2

注意 :

  1. 对于联合查询的多张表的字段列表必须保持一致,字段类型也需要保持一致,如果不一致将会报错。
  2. union all 会将全部的数据直接合并在一起,union 会对合并之后的数据去重。

SQL语句:

select * FROM t_employee WHERE id=6
UNION ALL
select * FROM t_employee WHERE id=7

MySQL入门系列7-多表查询_字段_08

5.子查询

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

子查询的结果为单个值:

select * from t_employee WHERE dept_id=(SELECT id FROM t_department WHERE `name`='软件部');

MySQL入门系列7-多表查询_SQL_09

子查询返回多行数据:

select * from t_employee WHERE dept_id in(SELECT id FROM t_department);

MySQL入门系列7-多表查询_数据_10

标签:语句,多表,入门,MySQL,查询,SQL,employee,id,select
From: https://blog.51cto.com/u_13312531/7428850

相关文章

  • 统计图入门
    为什么需要统计图?因为统计图是一种可以简单、快速了解数据的一种图形可视化方式。为什么需要各式各样的统计图?每个人的社会分工不一样,工作内容的不一样,工作目标就会不一样,这就导致了数据和数据内容是各种各样的。同样的数据,用不同的统计图展示时,基于需求的不同,一定会有一种是......
  • MYSQL基础上
    MYSQL基础确保MySQL已经安装完成启动windows下进入cmd的管理运行模式启动netstartmysql80停止netstopmysql80连接客户端连接注意这里使用的命令行既然在所有目录下都可行,那么必然要改环境变量数据模型SQLDDLDDL-数据库操作查询查询所有数据库SHOWDATAB......
  • MySQL数据库进阶 自定义函数
    自定义函数在MySQL中,您可以使用自定义函数来扩展数据库管理系统的功能。自定义函数允许您封装一段可重用的代码,并在查询和其他操作中调用它。以下是在MySQL中创建和使用自定义函数的一般步骤:1、创建自定义函数语法:CREATEFUNCTIONfunction_name(parameters)RETURNSreturn_t......
  • S0002-HomeBrew基础入门
    零、homebrewHomebrew是一个自由开源的软件包管理系统,主要设计给AppleMac电脑的操作系统macOS使用,但也支持Linux系统。它可以快速简洁的安装、卸载以及管理计算机软件包。Homebrew的一个重要特点是其包含了一些Mac预装软件缺失的GNU工具,如:bash,git,wget,curl等......
  • Navicat连接Docker创建的MySQL运行实例
    一步步教你在Docker中安装MySQL(qq.com)Docker部署MySql应用-魔鬼YU天使-博客园(cnblogs.com)拉取MySQL镜像我们可以通过Docker提供的命令,直接从DockerHub上拉取MySQL的官方镜像。打开终端,输入如下命令:dockerpullmysql:8.0其中,:8.0表示我们需要下载的MySQL版本,你也......
  • linux7.X二进制方式安装MySQL5.7.X
    概述系统环境服务器型号VMwareVirtualPlatform操作系统版本RHEL7.6x86_64主机名linuxpg51PubIP192.168.115.51数据库安装版本mysqlVer14.14Distrib5.7.30,forlinux-glibc2.12(x86_64)usingEditLinewrapper安装路径规划[mysql@linuxpg51/]$tree-L1/mysql/mysq......
  • 群论入门
    本蒟蒻也只能到入门的层次了初步认识什么是群?我把它理解为:一个运算系统换句话说,一个群里面包含:数+运算方法例如,一个最好理解的群,由整数加法构成的一个群:……-2,-1,0,1,2,3,4……它只包含整数,对这些整数只能进行加法运算为方便表示,用G表示非空数集,用·表示运......
  • MySQL基础
    要学习数据库首先要先搞清楚三个概念数据库(DB):是存储数据的仓库数据库管理系统(DBMS):管理数据库的大型软件SQL:通过SQL操作数据库管理系统操作数据库,对数据库进行增删改查等由此我们可以知道数据库就是安装在操作系统之上的数据仓库,用于存储数据。我们也先认识一个概念->关系型数据......
  • BJL技巧之下三路打法入门(新手必看)
    若你是个BJL游戏的爱好者,第一件要做的事就是养成分析牌路的习惯,再从中找出输-钱的点,接着检讨并改正,如此一来才有办法轻松获胜赢-钱。根据徐白深入研究以前的4000局-牌,发现整体来说能够赢钱的只有下面三种类型的牌局,其它的总体来说都是亏钱的。BJL罔止 TL6291點com  探讨BJL......
  • OpenResty快速入门
            ......