在项目开发中遇到这么一个例子,首先产品表 tb_product ----------------------------- id name 1 手机 2 电脑 3 笔记本 第二张表...parent_product_id 1 1 2 2 1 3 需要新建一个查询,即把表2...中的product_id和parent_product_id替换为产品的name 我们可以这么操作 select a.id,b.name,c.name from tb_product_chain ...一下是我的项目中的实际操作数据 tb_product_chain ? tb_product ? v_product_chain ?
oracle中查询表的信息,包括表名,字段名,字段类型,主键,外键唯一性约束信息,索引信息查询SQL如下,希望对大家有所帮助: 1、查询出所有的用户表 select * from user_tables...=au.constraint_name and cu.table_name='NODE' 8、查找表的外键 select * from user_constraints c where c.constraint_type...= 外键名称 查询引用表的键的列名: select * from user_cons_columns cl where cl.constraint_name = 外键引用表的键名 9、查询表的所有列及其属性...b.column_name 主键列, c.owner 外键拥有者, c.table_name 外键表, d.column_name...外键列 FROM user_constraints a LEFT JOIN user_cons_columns b ON a.constraint_name = b.constraint_name
一对多 一个部门可以有多名员工,但一个员工只能归于一个部门 在多的一方建立外外键指向一的一方 多对多 下表为多对多关系,由下表可知多对多关系的中间表至少需要2个外键...MySQL外键约束 创建外键 格式: constraint 外键名> foreign key 字段名[,字段名2,…] references 主键列1 [,主键列2,…] 方式一 创建表时添加外键...); 方式二 修改表添加外键 altertable 表名> add constraint 外键名> foreign key() references ();...,外键列的值不能随便写,必须依赖主表的主键列 删除 主表的数据被从表依赖时,不能删除,否则可以删除 从表的数据可以随便删除 多表联合查询 交叉连接查询 • 交叉连接查询返回被连接的两个表所有数据行的笛卡尔积...返回的数据类型 单行单列:返回的是一个具体列的内容,可以理解为一个单值数据; 单行多列:返回一行数据中多个列的内容; 多行单列:返回多行记录之中同一列的内容,相当于给出了一个操作范围; 多行多列:查询返回的结果是一张临时表
目录MySQL多表关系一对一一对多多对多MySQL外键约束创建外键数据插入删除多表联合查询交叉连接查询内连接查询外连接查询子查询关键字自关联MySQL多表关系MySQL表与表之间的三种关系一对多关系...在多的一方建立外外键指向一的一方编辑多对多 下表为多对多关系,由下表可知多对多关系的中间表至少需要2个外键编辑 MySQL外键约束创建外键 格式: constraint 外键名> foreign...key 字段名[,字段名2,…] references 主键列1 [,主键列2,…]方式一 创建表时添加外键create table if not exists emp( eid varchar...-- 注意给从表添加数据时,外键列的值不能随便写,必须依赖主表的主键列删除主表的数据被从表依赖时,不能删除,否则可以删除从表的数据可以随便删除多表联合查询编辑 交叉连接查询 •交叉连接查询返回被连接的两个表所有数据行的笛卡尔积...返回的数据类型单行单列:返回的是一个具体列的内容,可以理解为一个单值数据;单行多列:返回一行数据中多个列的内容;多行单列:返回多行记录之中同一列的内容,相当于给出了一个操作范围;多行多列:查询返回的结果是一张临时表
(多对一):在多的一方建立外键,指向一的一方的主键 多对多:建立中间表,包含两个外键,分别关联两方主键 一对一:一对一关系多用于单标拆分,将一张表的基础字段放在一张表中,其他详细字段放在另一张表,以提升操作效率...;实现:在仁义一方加入外键,并且设置外键为唯一的(UNIQUE) 二、多表查询概述 (一)多表查询概述 概述:指从多张表中查询数据 笛卡尔积:笛卡尔积是指在数学中,两个集合A集合和B集合的所有组合情况。...SELECT 字段列表 FROM 表A UNION ALL SELECT 字段列表 FROM 表B; 对于联合查询的多张表的列数必须保持一致,字段类型也需要保持一致。...常用的操作符:=>>=<<= 列子查询(子查询结果为一列) 子查询返回的结果是一列(可以是多行),这种子查询称为列子查询。...常用的操作符:=、、IN、NOT IN 表子查询(子查询结果为多行多列 子查询返回的结果是多行多列,这种子查询称为表子查询。
表子查询 表子查询:子查询的返回结果用于FROM数据源,它是一个符合二维表结构的数据,可以是一行一列、一列多行、一行多列或多行多列。...外键约束 添加外键约束 外键指的是-一个表中引用另一个表中的一列或多列,被引用的列应该具有主键约束或唯一性约束, 从而保证数据的一-致性 和完整性。 ➢被引用的表称为主表。...关键字CONSTRAINT用于定义外键约束的名称symbol,如果省略,MYSQL将会自动生成-一个名字。...➢对于添加了外键约束的关联表而言,数据的插入、更新和删除操作就会受到一定的约束。 一个具有外键约束的丛表在插入数据时,外键字段的值会受主表数据的约束,保证从表插入的数据必须符合约束规范的要求。...例如,从表外键字段不能插入主表中不存在的数据。
外键列, constraint 外键名称 foreign key (外键列名称) references 主键名称(主表列名称) ); 创建表后添加外键约束 alter table 表名 add constraint...实现:在多的一方建立外键,指向一的一方的主键。 多对多 举例:学生和课程 分析:一个学生可以选择很多门课程,一个课程也可以被很多学生选择。 实现:多对多关系实现需要借助第三张中间表。...中间表至少包含两个字段,这两个字段作为第三张表的外键,分别指向两张表的主键 数据库范式 设计数据库时,需要遵循的一些规范。...] join 表名2 on 条件; 注意 从哪些表中查询数据 条件是什么 查询哪些字段 外连接查询 左外连接 select 字段列表 from 表1 left [outer] join 表2 on 条件...子查询的结果是多行多列的 子查询可以作为一张虚拟表参与查询。 事务 如果一个包含多个步骤的业务操作,被事务管理,那么这些操作要么同时成功,要么同时失败。
-- 分数表(次表/子表) CREATE TABLE score( stuid VARCHAR(10), --外键列的数据类型一定要与主键列的数据类型一致 ...-- 分数表(次表/子表) CREATE TABLE score( stuid VARCHAR(10), -- 外键列的数据类型一定要与主键列的数据类型一致 ...设计从表可以有两种方案: 方式1:在t_card表中添加外键列(相对t_user表),并且给外键添加唯一约束;即:字段 字段类型 unique, 方式2:给t_card表的主键添加外键约束...例如再创建一张表t_stu_tea表,给出两个外键,一个相对t_stu表的外键,另一个相对t_teacher表的外键。 ...当子查询出现在where后作为条件时,还可以使用如下关键字: any all 子查询结果集的形式: 单行单列(用于条件) 单行多列(用于条件) 多行单列(用于条件) 多行多列
外键指的是在“从表”中与“主表”的主键对应的那个字段,比如员工表的 dept_id,就是外键。使用外键约束可以让两张表之间产生一个对应关系,从而保证主从表的引用的完整性。...主表:主键 id 所在的表,约束别人的表;从表:外键所在的表,被约束的表。...实现方式:主表(一方)的主键为从表(多方)的外键。在多的一方建立外键,指向一的一方的主键。 -- 省和市表:一个省包含多个市 # 创建省表。...aid INT, # 指向 role 表的外键 rid INT ); # 添加外键约束指向演员表的主键 ALTER TABLE actor_role ADD FOREIGN KEY(aid...比如,通过 从表的外键 = 主表的主键 的方式去匹配。
2.非聚集索引的叶子节点不是数据页,这样非聚集索引的叶子节点只包含键值和定位符(定位符,存在两种可能,如果表中有了聚集索引那么定位符就是个直接指向数据所在行的物理指针,如果有聚集索引,那么就是一个指向索引的聚集键...本篇的重点:非聚集索引 非聚集索引包含了索引键列,包含列和书签。书签的值根据所在表是堆还是聚集索引既可以是RID也可以是聚集索引键,我们用两个图对比看一下一目了然。 ?...上图显示的是非聚集索引在对上的实际结构,可以发现除了索引键值外,就是“RID”就是指向数据页的指针。 ?...上图是非聚集索引在聚集索引上的结构,可以发现除去索引键值外,就是聚集索引键,查询数据时继续到索引中去寻找数据。...因此,一个页上将能包含比表行(所有的列)更多行的非聚集索引。
2.非聚集索引的叶子节点不是数据页,这样非聚集索引的叶子节点只包含键值和定位符(定位符,存在两种可能,如果表中有了聚集索引那么定位符就是个直接指向数据所在行的物理指针,如果有聚集索引,那么就是一个指向索引的聚集键...本篇的重点:非聚集索引 非聚集索引包含了索引键列,包含列和书签。书签的值根据所在表是堆还是聚集索引既可以是RID也可以是聚集索引键,我们用两个图对比看一下一目了然。...上图显示的是非聚集索引在对上的实际结构,可以发现除了索引键值外,就是“RID”就是指向数据页的指针。...上图是非聚集索引在聚集索引上的结构,可以发现除去索引键值外,就是聚集索引键,查询数据时继续到索引中去寻找数据。...因此,一个页上将能包含比表行(所有的列)更多行的非聚集索引。
在任一表中添加唯一外键,指向另一方主键,确保一对一关系。 一般一对一关系很少见,遇到一对一关系的表最好是合并表。...1.2 一对多/多对一关系 比如: 部门和员工关系:一个部门有多个员工,一个员工只能对应一个部门 实现规则: 在多的一方建立外键,指向一的一方的主键 1.3 多对多关系 举例...中间表至少包含两个字段,将多对多的关系,拆成一对多的关系,中间表至少要有两个外键,这两个外键分别指向原来的那两张表的主键 2....特点 子查询可以返回的数据类型一共分为四种 单行单列 返回的是一个具体列的内容,可以理解为一个单值数据; 单行多列 返回一行数据中多个列的内容; 多行单列 返回多行记录之中同一列的内容,相当于给出了一个操作范围...; 多行多列 查询返回的结果是一张临时表 子查询回显的数据类型 单行单列 返回的是一个具体列的内容,可以理解为一个单值数据; 单行多列 返回一行数据中多个列的内容; 多行单列 返回多行记录之中同一列的内容
首先,为了方便说明问题,创建两个表emp(雇员信息)和dept(雇员部门信息),其数据如下: 在之前的博客中,我们分享了单表查询的方法,但是在实际应用中,我们要查的数据很可能不在同一个表中...可以发现,结果是这样的,从第一个表中选出第一条记录,和第二个表中的所有所有记录进行组合,然后再从第一个表中取出第二条记录,和第二张表的所有记录进行组合,这样的结果是没有实际意义的。...和职位Manger的人 2. union all 与union类似,但是不会自动去重 例如:与or类似 外键 外键定义主表和从表的关系,外键约束主要是定义在从表上,主表必须是有主键或者唯一键...当定义外键后,要求外键列数据必须在主表列存在或者为NULL。 ...例如:创建一个主表class,从表stu 由上图,我们可以知道主键不能为null,但是外键可以为null,同时不能存在外键有的数据而主表中不存在。
5 外键 主外键是构成表与表关联的唯一途径! 外键是另一张表的主键!例如员工表与部门表之间就存在关联关系,其中员工表中的部门编号字段就是外键,是相对部门表的外键。...设计从表可以有两种方案: Ø 在t_card表中添加外键列(相对t_user表),并且给外键添加唯一约束; Ø 给t_card表的主键添加外键约束(相对t_user表),即t_card表的主键也是外键。...t_user和t_section的关系,从t_user来看就是一对多,而从t_section的角度来看就是多对一!这种情况都是在多方创建外键!...例如再创建一张表t_stu_tea表,给出两个外键,一个相对t_stu表的外键,另一个相对t_teacher表的外键。...) 单行多列(用于条件) 多行单列(用于条件) 多行多列(用于表) 练习: 1.
DEFAULT FOREIGN KEY(外键约束) 针对两个表之间,产生的约束。...外键约束的含义,就是要求student里的classId 务必要在class表的id列中存在。 学生表中的数据要依赖班级表的数据。班级表的数据要对学生表产生约束力。...此处起到约束作用的班级,就叫做“父表”(parent),被约束的这个表,就叫做子表(child)。 外键约束,是父表对 子表做了约束,但与此同时。子表也在反过来约束了父表。...默认情况下查询是需要遍历表的。在表非常大的时候,遍历效率非常低,所以要使用索引。 要想创建外键,就要求父表的对应的列,得有primary key 或者unique约束。...先笛卡尔积 加上连接条件 加上聚合查询,把同一个同学的行合并到同一个组中同时计算总分 任务3:查询所有同学的成绩以及同学的个人信息 分析:期望查询结果中,有个人信息(student表),
二.多表设计与实现(外键约束) 系统设计中,实体之间的关系有三种:一对一,一对多,多对多 也就是说,数据库开发中表与表之间的关系有三种,而表与表之间关系是通过外键来维护的。...外键约束特性如下: 外键必须是另一表主键的值; 外键可以重复; 外键可以为null; 一张表中可以有多个外键。 表之间关联关系 1....在开发中一般有两种思路 a.根据需求将一张表的主键设置外键,就可以描述其一对一的关系。...: alter table 当前表 add [constraint] foreign key (需要设为外键的字段) references 指向表(指向表的主键字段) b.两张表合二为一,例如,在person...i.先得到订单价格大于300的订单信息 select * from orders where price>300; ii.在查询出用户信息,与上面的多行多列关联 select * from user u
:结果是一个数据(一行一列) 列子查询:结果是一列(一列多行) 行子查询:结果是一行(一行多列) 表子查询:结果是多行多列(多行多列) exists子查询:返回结果1或0(类似布尔操作) 子查询按位置分类...外键 12.1 概念 foreign key : 一张表(从表)中有一个字段(外键),保存的值指向另外一张表(主表)的主键 12.2 外键的操作 增加外键 方案1:创建表时增加外键(类似主键) 基本语法...外键字段与主表主键字段类型完全一致 外键字段与主表主键字段基本属性相同 如果是在表后增加外键,对数据有要求(从表数据与主表的关联关系) 外键只能使用innodb存储引擎,myisam不支持 12.4...外键约束概念 外键约束主要约束主表操作,从表仅约束不能插入主表不存在的数据,外键约束约束了例如: 从表插入数据,不能插入对应主表主键不存在的数据 主表删除数据,不能删除被从表引入的数据 外键约束保证了数据的完整性...:级联模式,一起操作,主表变化,从表数据跟随变化 set null:置空模式,主表变化(删除),从表对应记录设置为空,前提是从表中对应的外键字段允许为空 添加外键约束模式: 基本语法: add foreign
聚集索引VS非聚集索引 SQL Server 2014 发布日期: 2016年12月 索引是与表或视图关联的磁盘上结构,可以加快从表或视图中检索行的速度。 索引包含由表或视图中的一列或多列生成的键。...非聚集索引包含非聚集索引键值,并且每个键值项都有指向包含该键值的数据行的指针。 从非聚集索引中的索引行指向数据行的指针称为行定位器。 行定位器的结构取决于数据页是存储在堆中还是聚集表中。...对于堆,行定位器是指向行的指针。 对于聚集表,行定位器是聚集索引键。 您可以向非聚集索引的叶级添加非键列以跳过现有的索引键限制(900 字节和 16 键列),并执行完整范围内的索引查询。...聚集索引和非聚集索引都可以是唯一的。 这意味着任何两行都不能有相同的索引键值。 另外,索引也可以不是唯一的,即多行可以共享同一键值。 有关详细信息,请参阅 创建唯一索引。...查询优化器使用索引时,搜索索引键列,查找到查询所需行的存储位置,然后从该位置提取匹配行。 通常,搜索索引比搜索表要快很多,因为索引与表不同,一般每行包含的列非常少,且行遵循排序顺序。
案例: 部门与员工的关系 关系: 一个部门可以对用多个员工,但是一个员工只能对应一个部门 实现: 在多的一方设置外键,指向一的一方 在员工表中emp设置外键 deft_id,与部门表deft中的主键 id...,在DataGrip软件中,能够将表结构的关系可视化: 右击想要查看的表结构,点击 图->显示图: 这样能够清楚的观察到,两张表通过外键department_id相关联。...实现: 在任意一方设置外键,与另一方的主键相关联,并且将外键设置为UNIQUE 这是一张用户表,其中不仅有用户的基本信息,还包括了一些详细信息,在一定程度上会影响信息查询的效率,所以我们进行单表拆分:...id from dept where dept_name = '销售部'); 列子查询 子查询结果返回的是一列数据(可以是多行) 常用操作符: ALL select *from emp where salary...表子查询 子查询结果返回的是多行多列。