数据库-多表设计 多表查询

多表设计

一对多

一对多关系实现:在数据库表中多的一方,添加字段,来关联一的一方的主键

外键约束
-- 创建表时指定
create table 表名(
	字段名    数据类型,
	...
	[constraint]   [外键名称]  foreign  key (外键字段名)   references   主表 (字段名)	
);


-- 建完表后,添加外键
alter table  表名  add constraint  外键名称  foreign key (外键字段名) 
        references  主表(字段名);

一对一

一对一关系,多用于单表拆分,将一张表的基础字段放在一张表中,其他字段放在另一张表中,以提升操作效率

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

多对多

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

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

多表查询

多表查询 : 指从多张表中查询数据
笛卡尔积 : 笛卡尔乘积是指在数学中,两个集合 (A 集合 和 B 集合 ) 的所有组合情况。 ( 在多表查询时,需要消除无效的笛卡尔积 )

内连接

隐式内连接: select  字段列表   from   1 , 2   where   条件 ... ;
显式内连接: select  字段列表   from   1  [ inner ]  join on  连接条件 ... ;
select tb_emp.name,tb_dept.name from tb_dept,tb_emp where tb_emp.dept_id = tb_dept.id;

select e.name,d.name from tb_dept d,tb_emp e where e.dept_id = d.id;

select tb_emp.name,tb_dept.name from tb_emp inner join tb_dept on tb_emp.dept_id = tb_dept.id;

外连接

左外连接: select  字段列表   from   left  [ outer ]   join on 连接条件 ... ;
右外连接: select  字段列表   from   right  [ outer ]   join on  连接条件 ... ;
select e.name, d.name from tb_emp e left join tb_dept d on e.dept_id = d.id;

select e.name, d.name from tb_emp e right join tb_dept d on e.dept_id = d.id;

子查询

介绍: SQL 语句中嵌套 select 语句,称为嵌套查询,又称子查询。
形式: select  *   from   t1    where  column1 =  ( select  column1   from  t2  … );
子查询外部的语句可以是 insert / update / delete / select 的任何一个,最常见的是 select

标量子查询
子查询返回的结果是单个值(数字、字符串、日期等),最简单的形式
常用的操作符: =   <>    >     >=     <    <=     
select * from tb_emp where dept_id = (select id from tb_dept where name = '教研部');

select * from tb_emp where entrydate > (select entrydate from tb_emp where name = 'fdb');

列子查询

子查询返回的结果是一列(可以是多行)
常用的操作符: in  not in
select * from tb_emp where dept_id
        in (select id from tb_dept where name = 'jyb' or name = 'cxb');

行子查询

子查询返回的结果是一行(可以是多列)。
常用的操作符: <> in not  in
select * from tb_emp where (entrydate,job) = 
        (select entrydate,job from tb_emp where name = 'wyx');

表子查询

子查询返回的结果是多行多列,常作为临时表
常用的操作符: in
select * from (select * from tb_emp where entrydate > '2016-01-01') e ,tb_dept d 
        where e.dept_id = d.id;

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

帕金森患者饮食小贴士 满满的爱与关怀哦!

&#x1f34e; 首先&#xff0c;要多吃水果和蔬菜&#xff01;新鲜蔬果富含维生素和矿物质&#xff0c;对神经系统有很好的保护作用。&#x1f966; 特别是绿叶蔬菜&#xff0c;比如菠菜、生菜&#xff0c;它们都是健康的小天使&#xff01;&#x1f49a; &#x1f372; 其次&a…

vue2-vue3响应式原理

我们先来看一下响应式意味着什么&#xff1f;我们来看一段代码&#xff1a; m有一个初始化的值&#xff0c;有一段代码使用了这个值&#xff1b;那么在m有一个新的值时&#xff0c;这段代码可以自动重新执行&#xff1b; let m 20 console.log(m) console.log(m * 2)m 40上…

政策护航新能源助推绿色经济腾飞

随着全球气候变化问题日益严重&#xff0c;新能源行业的发展成为推动绿色经济腾飞的重要引擎。近年来&#xff0c;各国政府纷纷出台政策支持新能源产业&#xff0c;旨在激发行业活力&#xff0c;促进经济可持续发展。本文将从政策红利的角度&#xff0c;探讨新能源行业发展的现…

lnmp php7 安装ssh2扩展

安装ssh2扩展前必须安装libssh2包 下载地址: wget http://www.libssh2.org/download/libssh2-1.11.0.tar.gzwget http://pecl.php.net/get/ssh2-1.4.tgz &#xff08;这里要换成最新的版本&#xff09; 先安装 libssh2 再安装 SSH2: tar -zxvf libssh2-1.11.0.tar.gzcd libss…

【Linux进阶】ext2文件系统(inode)

1.再谈inode (1) 理解inode&#xff0c;要从文件储存说起。 文件储存在硬盘上&#xff0c;硬盘的最小存储单位叫做"扇区"&#xff08;Sector&#xff09;。每个扇区储存512字节&#xff08;相当于0.5KB&#xff09;。操作系统读取硬盘的时候&#xff0c;不会一个个…

方法引用 异常 file

一.方法引用 1.方法引用概述 eg: 表示引用run1类里面的sxxxx方法 把这个方法当做抽象方法的方法体 &#xff1a;&#xff1a;是方法引用符 //方法引用Integer[] arr{4,3,1,6,2,7,8,5};Arrays.sort(arr,run1::subtraction);System.out.println(Arrays.toString(arr));}publi…

算法金 | 平均数、众数、中位数、极差、方差,标准差、频数、频率 一“统”江湖

大侠幸会&#xff0c;在下全网同名「算法金」 0 基础转 AI 上岸&#xff0c;多个算法赛 Top 「日更万日&#xff0c;让更多人享受智能乐趣」 抱个拳&#xff0c;送个礼 更多内容&#xff0c;见微*公号往期文章&#xff0c;阅读人数已破 10, 000&#xff1a;协方差、方差、标准…

vue3自定义全局指令和局部指令

1.全局指令 el&#xff1a;指令绑定到的DOM元素&#xff0c;可以用于直接操作当前元素&#xff0c;默认传入钩子的就是el参数&#xff0c;例如我们开始实现的focus指令&#xff0c;就是直接操作的元素DOM binding&#xff1a;这是一个对象&#xff0c;包含以下属性&#xff1a;…

vue项目打包部署后 浏览器自动清除缓存问题(解决方法)

vue打包部署后 浏览器缓存问题&#xff0c;导致控制台报错ChunkLoadError: Loading chunk failed的解决方案 一、报错如下&#xff1a; 每次build打包部署到服务器上时&#xff0c;偶尔会出现前端资源文件不能及时更新到最新&#xff0c;浏览器存在缓存问题&#xff0c;这时在…

怎么做外贸推广:10个详细教程和工具

1. 介绍 1.1 什么是外贸推广 外贸推广指的是将产品或服务推广到国际市场的过程。它的主要目的是吸引海外客户&#xff0c;增加销售额&#xff0c;并扩大企业的全球影响力。外贸推广不仅仅是销售产品&#xff0c;它还包括品牌建设、市场研究和客户关系管理。 谷歌外贸推广案例…

WPF 实现 移动带/旋转带 效果

先来看看效果&#xff1a; 接下来说明下实现步骤&#xff1a; 1.定义个背景 <Grid Background"#ffffff"><Border Background"#7f8b99" /></Grid> 2.定义平行四边形 定义一个 宽40 高21的 四边形。然后定义四个点的起始位置 Points …

el-table实现固定列,及解决固定列导致部分滚动条无法拖动的问题

一、el-table实现固定列 当数据量动态变化时&#xff0c;可以为 Table 设置一个最大高度。 通过设置max-height属性为 Table 指定最大高度。此时若表格所需的高度大于最大高度&#xff0c;则会显示一个滚动条。 <div class"zn-filter-table"><!-- 表格--…

zdppy+vue3+antd 实现表格数据渲染

基本用法 <template><a-table :columns"columns" :data-source"data"><template #headerCell"{ column }"><template v-if"column.key name"><span>xxx Name</span></template></temp…

2024年中国陶瓷轴承用氮化硅粉体市场发展现状及重点竞争企业研究

2024年中国陶瓷轴承用氮化硅粉体市场发展现状及重点竞争企业研究 氮化硅是一种硬度高、结构稳定、热膨胀系数小&#xff0c;抗氧化和抗侵蚀性能好的一种的陶瓷材料&#xff0c;可用于制造高性能氮化硅陶瓷结构件、坩埚涂层等。近年来&#xff0c;伴随着机械制造行业进一步向高精…

Google重大更新--解读Android Auto认证4.3

Google在今年五月更新了Android Auto 4.2.2版本&#xff0c;而在2024年7月他们推出了Android Auto 4.3版本&#xff0c;这是自2023年9月以来对Android Auto 4.2版本的一次重大更新。 为了确保合规性和顺利认证&#xff0c;OEM和Tire1必须确保PDK组件版本与正在认证的主机的Rece…

昇思25天学习打卡营第18天 | 基于MobileNetv2的垃圾分类

内容介绍&#xff1a; MobileNet网络是由Google团队于2017年提出的专注于移动端、嵌入式或IoT设备的轻量级CNN网络&#xff0c;相比于传统的卷积神经网络&#xff0c;MobileNet网络使用深度可分离卷积&#xff08;Depthwise Separable Convolution&#xff09;的思想在准确率小…

Shopee(虾皮)怎么获取流量?

店铺流量的高低会直接关联到卖家店铺单量&#xff0c;也关系到一个店铺的营业情况和利润&#xff0c;那么Shopee的流量从哪里来呢&#xff1f; Shopee的平台流量可分为五个部分&#xff1a; 1.自然流量 2.关键字广告流量 3.平台活动流量 4.营销流量 5.粉丝流量 怎么提升…

nacos源码 nacos注册中心1.4.x 源码 nacos源码如何下载 nacos 客户端源码下载地址 nacos discovery下载地址(一)

首先&#xff0c;发现很多解读文章对核心点讲解的很多&#xff0c;但是我感觉没讲全&#xff0c;记录下&#xff0c;我自己看源码时候一些心得 1. 读源码第一步&#xff0c;先去github, issue, 官网&#xff1a; 1.1 github : https://github.com/alibaba/…

数据挖掘与分析——深度学习算法应用

1. TensorFlow框架的基本使用&#xff08;5-1&#xff09; 获取训练数据 构建一个简单的线性模型&#xff1a;W&#xff0c;b为参数&#xff0c;W2&#xff0c;b1&#xff0c;运用tf.random.normal() 产生1000个随机数&#xff0c;产生x,y数据。 用matplotlib库&#xff0c;…