SQL语句详解四-DQL(数据查询语言-多表查询一)

news2024/11/28 23:07:39

文章目录

    • 表和表的关系
      • 一对一关系
      • 一对多、多对一关系
      • 多对多关系

表和表的关系

  • 概述:数据库中表的关系有三种,一对一关系、一对多的关系、多对多的关系。

一对一关系

  • 例如:一个人只能有一个身份证号,一个身份证号只属于一个人

  • 示例代码

    -- 创建数据库,并指定 utf8 字符集
    CREATE DATABASE IF NOT EXISTS school CHARACTER SET utf8;
    
    -- 使用数据库
    USE school;
    
    -- 创建人类表
    CREATE TABLE person(
    	p_id INT PRIMARY KEY AUTO_INCREMENT,		-- 人类表 id 
    	p_name VARCHAR(40) NOT NULL,				-- 姓名字段
    	p_address VARCHAR(200)						-- 地址字段
    );
    
    -- 创建身份证号表
    CREATE TABLE idcard(
    	c_id INT PRIMARY KEY AUTO_INCREMENT,		-- 身份证号表 id
    	c_number VARCHAR(18)						-- 身份证号字段
    );
    
    -- 插入数据
    INSERT INTO person VALUES(1 , '张三' ,'河南');
    INSERT INTO person VALUES(2 , '李四' ,'北京');
    INSERT INTO person VALUES(3 , '王五' ,'上海');
    
    INSERT INTO idcard VALUES(1 , '11111');
    INSERT INTO idcard VALUES(2 , '22222');
    INSERT INTO idcard VALUES(3 , '33333');
    
    -- 给人类表添加外键
    ALTER TABLE person ADD CONSTRAINT p_idcard FOREIGN KEY (p_id) REFERENCES idcard(c_id);
    
  • 一对一关系图

一对多、多对一关系

  • 例如:一门课程只能属于一个老师,一个老师可以有多门课程

    • 站在老师的角度,是一对多
    • 站在课程的角度,是多对一
    • 我们习惯把 一 的一方称之为 主表,多的一方称之为 从表
  • 示例代码

    -- 创建课程表
    CREATE TABLE course(
    	c_id INT PRIMARY KEY AUTO_INCREMENT,		-- 课程表 id
    	c_name VARCHAR(100),						-- 课程名称
    	ct_id INT									-- 教师外键
    );
    
    -- 创建教师表
    CREATE TABLE teacher(
    	t_id INT PRIMARY KEY AUTO_INCREMENT,		-- 教师编号
    	t_name VARCHAR(40)							-- 教师姓名
    );
    
    -- 插入数据
    INSERT INTO course VALUES( 101, '语文',1);
    INSERT INTO course VALUES( 102, '数学',3);
    INSERT INTO course VALUES( 103, '英语',5);
    INSERT INTO course VALUES( 104, '政治',2);
    INSERT INTO course VALUES( 105, '历史',1);
    INSERT INTO course VALUES( 106, '地理',4);
    
    INSERT INTO teacher VALUES(1 , '张老师');
    INSERT INTO teacher VALUES(2 , '李老师');
    INSERT INTO teacher VALUES(3 , '王老师');
    INSERT INTO teacher VALUES(4 , '黄老师');
    INSERT INTO teacher VALUES(5 , '马老师');
    
    -- 给课程表添加外键
    ALTER TABLE course ADD CONSTRAINT c_teacher FOREIGN KEY (ct_id) REFERENCES teacher(t_id);
    
  • 一对多、多对一关系图

多对多关系

  • 例如:一门课程可以有多个学生,一个学生也可以有多门课程

    • 多对多可以看成两个多对一的关系,此时我们需要使用到中间表
  • 中间表的创建规则

    • 表名由多对多关系的两个表名称组成
    • 表中只有两个字段,分别建立对应外键关联到对应表的主键
    • 两个字段都是主键,组成联合主键
  • 示例代码

    -- 创建学生表
    CREATE TABLE student(
    	s_id INT PRIMARY KEY AUTO_INCREMENT,		-- 学生表 id
    	s_name VARCHAR(40) NOT NULL					-- 学生姓名字段
    );
    
    -- 创建中间表
    CREATE TABLE student_course(
    	cc_id INT,									-- 课程表外键
    	ss_id INT									-- 学生表外键
    );
    
    -- 插入数据
    INSERT INTO student_course VALUES(101 , 1);
    INSERT INTO student_course VALUES(101 , 2);
    INSERT INTO student_course VALUES(101 , 3);
    INSERT INTO student_course VALUES(102 , 3);
    INSERT INTO student_course VALUES(105 , 3);
    INSERT INTO student_course VALUES(104 , 2);
    
    INSERT INTO student VALUES(1,'张三');
    INSERT INTO student VALUES(2,'李四');
    INSERT INTO student VALUES(3,'王五');
    
    -- 添加外键
    ALTER TABLE student_course ADD CONSTRAINT c_sc FOREIGN KEY(cc_id) REFERENCES course(c_id);
    ALTER TABLE student_course ADD CONSTRAINT s_sc FOREIGN KEY(ss_id) REFERENCES student(s_id);
    
  • 多对多关系图

接下来,请看文章:多表查询!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1392225.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

集合框架面试

1.常见的集合有哪些 主要分为3种List、Map、Set 2.ArrayList和LinkedList有什么区别 数据结构不同:ArrayList是基于数组实现的,LinkedList是双向链表实现使用场景不同:ArrayList更利于查找,LinkedList利于增删是否支持随机访问…

92.乐理基础-记号篇-演奏记号(三)刮奏、琶音

内容参考于:三分钟音乐社 上一个内容:91.乐理基础-记号篇-演奏记号(二)保持音、滑音-CSDN博客 下图红框里是之前的内容: 刮奏:它是滑音操作层面上的说法,可以把滑音理解成它是一种效果&#x…

kibana查看和展示es数据

本文来说下使用kibana查看和展示es数据 文章目录 数据准备查询所有文档示例kibana查看和展示es数据 数据准备 可以使用es的命令或者java程序来往,es进行新增数据 查询所有文档示例 在 apifox 中,向 ES 服务器发 GET请求 :http://localhost:92…

Live800:满足客户的情感需求:提升客户服务的新维度

在当前的商业环境中,提供优质的产品或服务已不再足够。消费者现在更关注他们与品牌的关系,以及品牌如何满足他们的情感需求。这就要求企业在提供客户服务时,不仅要解决客户的实际问题,也要关注和满足客户的情感需求。今天将探讨如…

深度强化学习Task1:马尔可夫过程、DQN算法回顾

本篇博客是本人参加Datawhale组队学习第一次任务的笔记 【教程地址】https://github.com/datawhalechina/joyrl-book 【强化学习库JoyRL】https://github.com/datawhalechina/joyrl/tree/main 【JoyRL开发周报】 https://datawhale.feishu.cn/docx/OM8fdsNl0o5omoxB5nXcyzsInGe…

基于Web的航空航天数字博物馆推荐系统

介绍 项目背景: 航空航天数字博物馆推荐系统是一个基于Web开发的应用,旨在为用户提供一个全面的航空航天领域的数字博物馆体验。通过展品展示、分类筛选和个性化推荐等功能,用户可以更好地了解航空航天知识和文化,并丰富参观体验…

笔试面试题——继承和多态

📘北尘_:个人主页 🌎个人专栏:《Linux操作系统》《经典算法试题 》《C》 《数据结构与算法》 ☀️走在路上,不忘来时的初心 文章目录 一、什么是多态?二、什么是重载、重写(覆盖)、重定义(隐藏)?三、 inli…

Open CASCADE学习|显示模型

目录 1、编写代码 Viewer.h Viewer.cpp ViewerInteractor.h ViewerInteractor.cpp helloworld.cpp 2、配置 3、编译运行 1、编写代码 Viewer.h #pragma once ​ #ifdef _WIN32 #include <Windows.h> #endif ​ // Local includes #include "ViewerInteract…

奥伦德光电耦合器5G通信领域及其相关领域推荐

光电耦合器是以光为媒介传输电信号的一种电-光-电转换器件。由于该器件使用寿命长、工作温度范围宽&#xff0c;所以在过程控制、工业通信、家用电器、医疗设备、通信设备、计算机以及精密仪器等方面有着广泛应用在当前工艺技术持续发展与提升的过程中&#xff0c;其工作速度、…

测试的基本概念

1、什么是需求&#xff1f; 在企业中主要分为两类&#xff1a;用户需求和软件需求 用户需求&#xff1a;甲方的需求&#xff0c;或者终端用户使用产品时必须要完成的任务&#xff08;比较简略&#xff09;。 软件需求&#xff1a;或者叫功能需求&#xff0c;该需求会详细描述开…

力扣hot100 二叉树中的最大路径和 递归

Problem: 124. 二叉树中的最大路径和 文章目录 解题方法复杂度&#x1f496; Code 解题方法 &#x1f468;‍&#x1f3eb; 参考思路 复杂度 时间复杂度: O ( n ) O(n) O(n) 空间复杂度: O ( n ) O(n) O(n) &#x1f496; Code /*** Definition for a binary tree no…

odoo16 销售订单中数量与单价,手机录入不方便

odoo16 销售订单中数量与单价&#xff0c;手机录入不方便 在销售订单中&#xff0c;服装批发&#xff0c;数量与单价均是整数&#xff0c;系统默认的为保留两位小数的float类型&#xff0c;输入起来很不方便&#xff0c;如何修改 电脑版&#xff0c;输入时&#xff0c;自动选取…

每日一题——LeetCode1281.整数的各位积和之差

方法一 个人方法&#xff1a; 没啥好说的&#xff0c;循环取n的最后一位就行&#xff1a; var subtractProductAndSum function(n) {var mulSumn%10,addSumn%10nMath.floor(n/10)while(n/10>0){let numn%10mulSum*numaddSumnumnMath.floor(n/10)}return mulSum-addSum };…

JAVA方法及练习

目录 Java方法的定义以及调用 带返回值方法的定义和调用 方法的重载 方法大练习 练习1 练习2 练习3 练习4 Java方法的定义以及调用 方法练习package java方法;public class fangfa1 {public static void main(String[] args) {xuexi();}//定义一个方法public static vo…

vue3__Provide / Inject (依赖注入)和mixins

一、 Provide提供和Inject 注入 Provide提供 <script setup> import { provide } from vueprovide(/* 注入名 */ message, /* 值 */ hello!) </script> 例如父组件中提供方法 <template> <div class"home">dfhualsf<div><button…

CMD常用命令

打开CMD winR——>输入cmd——>回车 常用cmd命令&#xff1a; 1.盘符名称冒号 盘符切换 举例&#xff1a;D回车&#xff0c;表示切换到D盘 2.dir 查看当前路径下的内容&#xff08;比如&#xff0c;该路径是文件夹&#xff0c;那么该文件夹中的内容将被展示出来&am…

【OpenAI】自定义GPTs应用(GPT助手应用)及外部API接口请求

11月10日&#xff0c;OpenAI正式宣布向所有ChatGPT Plus用户开放GPTs功能 简而言之&#xff1a;GPT应用市场(简称GPTs, 全称GPT Store) Ps&#xff1a; 上图为首次进入时的页面&#xff0c;第一部分是自己创建的GPTs应用&#xff0c;下面是公开可以使用的GPTs应用 一、创建GPTs…

【JavaEEj进阶】 Spring实现留言板

文章目录 &#x1f38d;预期结果&#x1f340;前端代码&#x1f384;约定前后端交互接⼝&#x1f6a9;需求分析&#x1f6a9;接⼝定义 &#x1f333;实现服务器端代码&#x1f6a9;lombok &#x1f332;服务器代码实现&#x1f334;运⾏测试 &#x1f38d;预期结果 可以发布并…

Ubuntu使用手册

点击前往查看&#x1f517;我的博客文章目录 Ubuntu使用手册 本篇文章原文是我的Ubuntu使用手册&#xff0c;在我的GitHub博客上&#xff0c;现在位于CSDN整理备份一份手册&#xff0c;方便操作Ubuntu的时候自己查阅&#xff0c;也欢迎各位网友翻阅。 Ubuntu系统环境搭建&…

kubernetes 灰度发布设计方案

ㅤㅤㅤ ㅤㅤㅤ ㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤ&#xff08;生活有时会迫使我们弯曲&#xff0c;但在弯曲的轨迹上&#xff0c;我们也能找到属于自己的旅程。 即便离开了我钟爱的技术领域&#xff0c;我仍然在新的旋律中发现着人生的节奏。- 史蒂夫乔布斯&#xff09; ㅤㅤㅤ ㅤ…