MySQL数据库的多表操作

 更新时间:2022年08月03日 08:51:05   作者:面屏思过​​​​​​​  
这篇文章主要介绍了MySQL数据库的多表操作,文章围绕主题展开详细的内容介绍,具有一定的参考价值,感兴趣的小伙伴可以参考一下,希望对你的学习有所帮助

一、 数据库的多表操作

数据库的多表关系:

  • 一对一
  • 一对多
  • 多对一
  • 多对多

二,操作

一对一

建立数据表personcard,设置person数据表id为主键且自增,设置cardid为外键

// 创建person表
CREATE TABLE person (
id INT PRIMARY KEY AUTO_INCREMENT, // 主键 自增
NAME VARCHAR(20)
);

// 创建card表
CREATE TABLE card (
	id INT PRIMARY KEY AUTO_INCREMENT, // 主键 自增
	number VARCHAR(20) UNIQUE NOT NULL,// 不能为null
	pid INT UNIQUE,// pid唯一
	CONSTRAINT cp_fk1 FOREIGN KEY (pid) REFERENCES person(id) // 外键列
);

一对多

创建user数据表和orderlist数据表,这里不再设置uid为唯一值,因此是一对多的关系

// 创建user表
CREATE TABLE USER(
	id INT PRIMARY KEY AUTO_INCREMENT, // 主键 自增
	NAME VARCHAR(20)
);

// 添加数据
INSERT INTO USER VALUES (NULL, '张三'),(NULL, '李四');
//  创建orderlist表
CREATE TABLE orderlist(
	id INT PRIMARY KEY AUTO_INCREMENT,
	number VARCHAR(20),
	uid INT, // 这里没有再设置唯一值
	CONSTRAINT out_fk1 FOREIGN KEY (uid) REFERENCES USER(id) // 外键列

);
-- 添加数据
INSERT INTO orderlist VALUES (NULL, 'hm001', 1), (NULL, 'hm002', 1),(NULL, 'hm003', 2),(NULL, 'hm004', 2);
  • 多对多 创建student数据表,设置主键,再创建course数据表,创建中间表将两者关联起来
// 创建student表
CREATE TABLE student(
id INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(20)

);
// 创建course表
CREATE TABLE course (
	id INT PRIMARY KEY AUTO_INCREMENT,
	NAME VARCHAR(10)
);

//  创建中间表
CREATE TABLE stu_course(
	id INT PRIMARY KEY AUTO_INCREMENT,
	sid INT,
	cid INT,
	CONSTRAINT sc_fk1 FOREIGN KEY (sid) REFERENCES student(id),// 设置外键
	CONSTRAINT sc_fk2 FOREIGN KEY (cid) REFERENCES course(id)// 设置外键
);

多表查询-内链查询:

通过规定语法,进行内链查询

// 标准语法: SELECT 列名 FROM 表名1 [INNER] JOIN 表名2 ON 关联条件;
-- 查询用户信息和对应的订单信息
SELECT * FROM USER INNER JOIN orderlist ON orderlist.uid = user.id;
// 设置别名进行查询
SELECT u.name, u.age, o.number FROM USER u INNER JOIN orderlist o ON o.uid = u.id;

多表查询-隐式内连接:

// 标准语法: SELECT 列名 FROM 表名1,表名2 WHERE 关联条件;
// 查询用户姓名,年龄。和订单编号
SELECT u.name, u.age, o.number FROM USER u, orderlist o WHERE o.uid = uid;

多表查询-左外连接:

标准语法: SELECT 列名 FROM 表名1 LEFT [OUTER] JOIN 表名2 ON 条件;

// 查询所有用户信息,以及用户对应的订单信息

SELECT u.* o.number FROM USER u LEFT OUTER JOIN orderlist o ON o.uid = u.id;

多表查询-右外连接:

标准语法: SELECT 列名 FROM 表名1 RIGHT [OUTER] JOIN 表名2 ON 条件;
//  查询所有订单信息,以及订单所属的用户信息
SELECT o.*, u.name FROM USER u RIGHT OUTER JOIN orderlist o ON o.uid = u.id;

多表查询-子查询:

// 结果是单行单列的
// 标准语法: SELECT 列名 FROM 表名 WHERE 列名=(SELECT 列名 FROM 表名 [WHERE 条件]);

// 查询年龄最高的用户姓名
SELECT NAME,age FROM USER WHERE age=(SELECT MAX(age) FROM USER);

// 结果是多行单列的
// 标准语法:SELECT 列名 FROM 表名 WHERE 列名 [NOT] IN (SELECT 列名 FROM 表名 [WHERE 条件]); 

// 查询张三和李四的订单信息
SELECT * FROM orderlist WHERE uid IN (SELECT id FROM USER WHERE NAME IN ('张三','李四'));

// 结果是多行多列的
// 标准语法: SELECT 列名 FROM 表名 [别名],(SELECT 列名 FROM 表名 [WHERE 条件]) [别名] [WHERE 条件];

// 查询订单表中id大于4的订单信息和所属用户信息
SELECT u.name, o.number FROM USER u, (SELECT * FROM orderlist WHERE id > 4) o WHERE o.uid=u.id;

到此这篇关于MySQL数据库的多表操作的文章就介绍到这了,更多相关MySQL表操作内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Workbench连接不上阿里云服务器Ubuntu的Mysql解决方法(已测)

    Workbench连接不上阿里云服务器Ubuntu的Mysql解决方法(已测)

    这两天为了解决workbench连接不上阿里云服务器的问题,搞得头大,网上搜到的教程都大同小异,但唯独到我这就是行不通。不过好在最后终于解决了,记录一下这个坑爹的过程,另外脚本之家小编特把这些问题整理了一下,看完这一篇文章基本上就解决了
    2020-02-02
  • 深入Mysql字符集设置[精华结合]

    深入Mysql字符集设置[精华结合]

    深入Mysql字符集设置,建议大家看本文之前先看风雪之隅的文章,需要的朋友可以参考下
    2012-07-07
  • MySQL查看与修改当前数据库编码的方法

    MySQL查看与修改当前数据库编码的方法

    这篇文章主要介绍了MySQL查看与修改当前数据库编码的方法,需要的朋友可以参考下
    2016-04-04
  • IDEA找不到Database的完美解决方法

    IDEA找不到Database的完美解决方法

    IntelliJ IDEA中可以用database来连接数据库,但也会经常遇到问题,下面这篇文章主要给大家介绍了关于IDEA找不到Database的完美解决方法,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2023-05-05
  • mysql数据库详解(基于ubuntu 14.0.4 LTS 64位)

    mysql数据库详解(基于ubuntu 14.0.4 LTS 64位)

    这篇文章主要介绍了mysql数据库详解(基于ubuntu 14.0.4 LTS 64位),具有一定借鉴价值,需要的朋友可以参考下。
    2017-12-12
  • 初步介绍MySQL中的集合操作

    初步介绍MySQL中的集合操作

    这篇文章主要介绍了初步的MySQL中的集合操作,即UNION DISTINCT和UNION ALL两个命令,需要的朋友可以参考下
    2015-04-04
  • MySQL学习必备条件查询数据

    MySQL学习必备条件查询数据

    这篇文章主要介绍了MySQL学习必备条件查询数据,首先通过利用where语句可以对数据进行筛选展开主题相关内容,具有一定的参考价值,需要的小伙伴可以参考一下,希望对你有所帮助
    2022-03-03
  • MySQL 清除表空间碎片的实例详解

    MySQL 清除表空间碎片的实例详解

    这篇文章主要介绍了MySQL 清除表空间碎片的实例详解的相关资料,希望通过本文能帮助到大家,需要的朋友可以参考下
    2017-10-10
  • MySQL查询条件常见用法详解

    MySQL查询条件常见用法详解

    这篇文章主要介绍了MySQL查询条件常见用法,结合实例形式总结分析了MySQL常见的各类查询条件与简单使用方法,需要的朋友可以参考下
    2019-11-11
  • 在同一Linux下安装两个版本的MySQL的流程步骤

    在同一Linux下安装两个版本的MySQL的流程步骤

    打工人奉旨制作数据库服务的虚拟机模板,模板中包含各种数据库,其中mysql需要具备5.7及8.0两个版本,并保证服务能正常同时使用,所以本文给小编介绍了在同一Linux下安装两个版本的MySQL的流程步骤,需要的朋友可以参考下
    2024-03-03

最新评论