精华内容
下载资源
问答
  • SQL的表间关系

    2013-09-05 23:43:52
    1、表间关系的含义: 同一个数据库中,不同表中的数据之间都存在一种关系,这种关系... 3、建立表间关系的目的: * 保证数据的完整性 -> 表间关系的建立使主表和从表之间建立数据约束关系,防止输入错误的数据; * 保
    1、表间关系的含义:

    同一个数据库中,不同表中的数据之间都存在一种关系,这种关系将数据库里各表中的每条数据记录都和数据库中唯一的主题相联系,使得对每一个数据的操作都成为数据库的整体操作。

    2、表间关系的类型:
    * 一对一
    * 一对多
    * 多对多  
     3、建立表间关系的目的:
    * 保证数据的完整性
    -> 表间关系的建立使主表和从表之间建立数据约束关系,防止输入错误的数据;
    * 保证数据的一致性
    -> 当存在多个表的时候,通过建立主表和从表的关系,可以在主表更新时,从表自动更新,省去手动更新;
    * 方便多表查询
    -> 方便连接两个或多个表,一次能查找到多个相关数据。
    二、主外键物理表
    在第3章里我们介绍了主键的设置和选择,为了建立表间关系,还需要在子表里设置外键。
    1、外键的作用
    外键引用另外一个数据表的某条记录,以此在两个表之间建立联系。
    外键是子表里的一个字段,引用父表(主表)里的主键。
    * 外键列类型尽可能与主键列类型保持一致
    * 外键列应该加上 NOT NULL 

     2、外键约束
    外键约束是确保表与表之间引用完整性的主要机制。

    三、主外键物理表的数据插入删除规则
    主表和从表里的数据在插入删除时,要遵循以下规则:
    (1)当主表中没有对应的记录时,不能将记录添加到子表
    上面的例子里学员成绩表 score 中不能出现在学员信息表 student 中不存在的学号。
    (2)不能更改主表中的值而导致子表中的记录孤立
    把 student 表中的学号改变了,score 表中的学号也应当随之改变。
    (3)子表存在与主表对应的记录,不能从主表中删除该行
    不能把有成绩的学员删除了。
    (4)删除主表前,先删子表
    先删除学员成绩表 score、后删除学员信息表 student。

    展开全文
  • 一对一关系一对一的表关系: 例如:qq和qq的详尽信息建立外键的时候 如果明确主从关系? 被引用的是主,外键在从建立 关联主实现代码如下: CREATE TABLE qq( qqid int PRIMARY KEY, password varchar(100)...

    一对一关系

    一对一的表关系:
        例如:qq和qq的详尽信息
    
    建立外键的时候 如果明确主从关系?
        被引用的表是主表,外键在从表中建立 关联主表

    实现代码如下:

        CREATE TABLE qq(
            qqid int PRIMARY KEY,
            password varchar(100)
        );
        CREATE TABLE qqDetail(
            qqid int PRIMARY KEY,
            qname varchar(50) NOT NULL,
            qgender varchar(50) DEFAULT '男'
        );
        ALTER TABLE qqDetail ADD CONSTRAINT fk_qqDetail_qqid FOREIGN KEY(qqid) REFERENCES qq(qqid);

    多对多关系

    建立多对多的关系的时候 实际上就是建立外键
    明确
        1.在哪张表建立外键(中间表)
        2.哪个字段与哪个字段建立联系
            例如:
                score表的sid与student表的sid建立联系
                score表的cid与course表的cid建立联系

    实现代码如下:

        CREATE TABLE student(
            sid int PRIMARY KEY,
            sname varchar(50)
        );
        CREATE TABLE score(
            sid int,
            cid int,
            score int,
            CONSTRAINT fk_score_sid FOREIGN KEY(sid) REFERENCES student(sid),
            CONSTRAINT fk_score_cid FOREIGN KEY(cid) REFERENCES course(cid)
        );
        CREATE TABLE course(
            cid int PRIMARY KEY,
            cname varchar(50)
        );

    合并查询

    合并查询返回的结果集字段的类型和数量一致
    单独使用UNION会把两张表的数据合并 并且过滤掉相同的数据
    
        create table A(
            name varchar(10),
            score int
        );
    
        create table B(
            name varchar(10),
            score int
        );
        // 插入数据
        insert into A values('a',10),('b',20),('c',30);
        insert into B values('a',10),('b',20),('d',40);
        SELECT name,score FROM A
        UNION
        SELECT * FROM B;

    结果:
    合并查询
    不想过滤就使用 UNION ALL

        SELECT name,score FROM A
        UNION ALL
        SELECT * FROM B;

    结果:
    合并查询

    多表查询

    查询两张表(起别名)

        SELECT
            st.sid,
            st.sname,
            sc.score 
        FROM 
            student AS st,score AS sc 
        WHERE 
            st.sid = sc.sid;

    连接查询

    内连接查询 相当于把两张表连接到一起查询
    查询所有学生的成绩

    使用INNER JOIN 关键字 条件使用 ON INNER可以省略
    
        SELECT
            *
        FROM
            student st
        INNER JOIN
            score sc
        ON
            st.sid = sc.sid;

    多张表(查询时 3张表2条件 n张表n-1条件)
    查询所有学生的分数和考试科目

        SELECT
            st.sid,
            sname,
            score,
            cname
        FROM
            student st
        JOIN score sc ON st.sid = sc.sid
        JOIN course c ON c.cid = sc.cid;

    外连接(左外连接、右外连接)
    以左边的表为主 主表中的数据都会查询出来 有可能会产生无用的数据

    左外连接:
            SELECT
                st.sid,st.sname,sc.score
            FROM
                student st
            LEFT JOIN
                score sc
            ON
                st.sid = sc.sid;
    右外与左外连接相反
    外键是约束数据的插入,与查询无关

    自然连接

    会自动帮你匹配到 表中相同字段

        SELECT
            *
        FROM
            student
        NATURAL JOIN
            score;
    注意:没有外键也能自然查询

    子查询

    出现多次select的查询语句

    实例:

    --  雇员表:emp
    CREATE TABLE emp(
        empno INT,
        ename VARCHAR(50),
        job VARCHAR(50),
        mgr INT,
        hiredate DATE,
        sal DECIMAL(7,2),
        comm decimal(7,2),
        deptno INT
    );
    INSERT INTO emp values(7369,'SMITH','CLERK',7902,'1980-12-17',800,NULL,20);
    INSERT INTO emp values(7499,'ALLEN','SALESMAN',7698,'1981-02-20',1600,300,30);
    INSERT INTO emp values(7521,'WARD','SALESMAN',7698,'1981-02-22',1250,500,30);
    INSERT INTO emp values(7566,'JONES','MANAGER',7839,'1981-04-02',2975,NULL,20);
    INSERT INTO emp values(7654,'MARTIN','SALESMAN',7698,'1981-09-28',1250,1400,30);
    INSERT INTO emp values(7698,'BLAKE','MANAGER',7839,'1981-05-01',2850,NULL,30);
    INSERT INTO emp values(7782,'CLARK','MANAGER',7839,'1981-06-09',2450,NULL,10);
    INSERT INTO emp values(7788,'SCOTT','ANALYST',7566,'1987-04-19',3000,NULL,20);
    INSERT INTO emp values(7839,'KING','PRESIDENT',NULL,'1981-11-17',5000,NULL,10);
    INSERT INTO emp values(7844,'TURNER','SALESMAN',7698,'1981-09-08',1500,0,30);
    INSERT INTO emp values(7876,'ADAMS','CLERK',7788,'1987-05-23',1100,NULL,20);
    INSERT INTO emp values(7900,'JAMES','CLERK',7698,'1981-12-03',950,NULL,30);
    INSERT INTO emp values(7902,'FORD','ANALYST',7566,'1981-12-03',3000,NULL,20);
    INSERT INTO emp values(7934,'MILLER','CLERK',7782,'1982-01-23',1300,NULL,10);
    
    --  部门表:dept
    CREATE TABLE dept(
        deptno INT,
        dname varchar(14),
        loc varchar(13)
    );
    INSERT INTO dept values(10, 'ACCOUNTING', 'NEW YORK');
    INSERT INTO dept values(20, 'RESEARCH', 'DALLAS');
    INSERT INTO dept values(30, 'SALES', 'CHICAGO');
    INSERT INTO dept values(40, 'OPERATIONS', 'BOSTON');

    查询与scott同一个部门的员工

        SELECT * FROM emp WHERE deptno=(
        SELECT deptno FROM emp WHERE ename='SCOTT');

    工资高于30号部门所有人的员工信息

        SELECT * FROM emp WHERE sal >(
        SELECT MAX(sal) FROM emp WHERE deptno=30);

    查询工作和工资与MARTIN完全相同的员工信息

        SELECT * FROM emp WHERE (job,sal) IN
        (SELECT job,sal FROM emp WHERE ename='MARTIN');
    注意:单个数据使用等号 多个数据一般使用IN

    有两个以上直接下属的员工信息

        SELECT * FROM emp WHERE empno IN(
        SELECT mgr FROM emp GROUP BY mgr HAVING COUNT(mgr)>=2);

    自连接查询

    给自己这个表取个别名来使用
    应用场景:当你想要的数据全在一张表里 但是一次不能查出来

    7369员工编号 姓名 经理编号 经理姓名

        SELECT
            e1.empno,
            e1.ename,
            e2.mgr,
            e2.ename
        FROM
            emp e1,
            emp e2
        WHERE
            e1.mgr = e2.empno
        AND e1.empno = 7369;

    查询返回的结果集当做一张新表去使用

    各个部门薪水最高的员工所有信息

        SELECT * FROM emp WHERE sal in(
        SELECT MAX(sal) FROM emp GROUP BY deptno);

    结果:
    查询
    查询过程中出现问题 查询时没有把部门的条件带进去 只是按最高工资处理的
    解决方法:

        SELECT
            *
        FROM
            emp e1,
            (
                SELECT
                    deptno,
                    MAX(sal) msal
                FROM
                    emp
                GROUP BY
                    deptno
            ) e2
        WHERE
            e1.sal = e2.msal
        AND e1.deptno = e2.deptno;

    结果:
    查询

    展开全文
  • SQL Server如何建立表关系

    万次阅读 多人点赞 2019-06-18 10:05:14
    SQL Server怎么建立关系表?用教师和学生举例。 两表建立关系之前,要检查连接的条件满足否,比如学生表里的‘外键教师ID’要和教师表里的主键‘教师ID’的数据类型相同,也就是建立关系的条件数据类型要相同 ...

    SQL Server怎么建立关系表?用教师表和学生表举例。

    两表建立关系之前,要检查连接的条件满足否,比如学生表里的外键‘教师ID’要和教师表里的主键‘教师ID’的数据类型相同,也就是建立关系的条件数据类型要相同
    在这里插入图片描述
    在这里插入图片描述
    确认条件满足之后开始建立关系:
    1.在数据库库关系图里新建数据库关系图,如果弹出要创建的提示框点击是可以了
    在这里插入图片描述
    在这里插入图片描述
    2.完成创建之后就在关系图域里右键,点击添加表,把需要建立关系的表添加进去
    在这里插入图片描述
    在这里插入图片描述
    3.添加完表之后连接关系,把教师表里的教师ID拖动到学生表里的教师ID,
    在这里插入图片描述
    在这里插入图片描述
    4.检查主外键表正确了没有,如果你想根据学生表查询教师信息那学生表就是主键表,反过来教师就是主键表。
    在这里插入图片描述
    5.完成以上步骤之后就完成连接了,保存为关系图命名就完成了!
    在这里插入图片描述

    展开全文
  • 外键可以是一对一的,一个的记录只能与另一个的一条记录连接,或者是一对多的,一个的记录与...以上关系:一个妈妈可以在孩子中找到多条记录(也可能是一条),但是一个孩子只能找到一个妈妈 是一种典型的一对

    外键可以是一对一的,一个表的记录只能与另一个表的一条记录连接,或者是一对多的,一个表的记录与另一个表的多条记录连接。

    1.一对多,在多的一方建立外键(外键指向一的主键)

    母亲与孩子的关系:母亲,孩子两个实体
    母亲表:ID(P),名字,年龄,性别
    孩子表:ID(P),名字,年龄,性别
    以上关系:一个妈妈可以在孩子表中找到多条记录(也可能是一条),但是一个孩子只能找到一个妈妈
    是一种典型的一对多的关系。
    但是以上设计:解决了实体的设计表问题,但是没有解决关系问题,孩子找不到母亲,母亲也找不到孩子
    
    解决方案:在某一张表中增加一个字段,能够找到另外一张表中的记录:在孩子表中增加一个字段
    指向母亲表,因为孩子表的记录只能匹配到一条母亲表的记录。
    母亲表:ID(P),名字,年龄,性别
    孩子表:ID(P),名字,年龄,性别,母亲表ID(母亲表主键)

    2.多对多的关系,是通过中间表。中间表是多的一方,所以多的一方要包含指向一的一方的外键。所以中间表,作为两边多的一方,中间表要包含两边的外键,两个外键分别指向两张表的主键。
    多对多
    一对表中(A)的一条记录能够对应另外一张表(B)中的多条记录;同时B表中的一条记录
    也能对应A表中的多条记录
    
    老师和学生
    老师表 T_ID(P),姓名,性别
    学生表 S_ID(P),姓名,性别
    以上设计方案:实现了实体的设计,但是没有维护实体的关系
    一个老师教过多个学生,一个学生也被多个老师教过
    
    解决方案:增加一张中间关系表
    老师与学生的关系表:ID(P),T_ID,S_ID 
    老师表与中间表形成一对多的关系,而中间表是多表;维护了能够唯一找到一表的关系;
    同样的学生表与中间表也是一个一对多的关系; 
    学生找老师:找出学生ID--->中间表寻找匹配记录(多条)--->老师表匹配(一条)
    老师找学生:找出老师ID--->中间表寻找匹配记录(多条)--->学生表匹配(一条)
    展开全文
  • 在看某个项目的数据库的时候发现比较多,且都是和用户相关的,又涉及到租户、站点等,表关系有点小复杂,而且都是虚拟外键,于是自己来创建模型来方便缕清之间关系。 使用的工具为NavicatPremium15 ,12应该也差...
  • 下载请到这里:http://adobec.csdn.net/works/showDetail/273<br />  weaverbird编织鸟(将sql文件转换为数据库表间关系图),是一款基于新理念的数据库间接管理软件。拥有“数据库分析”、"数据库间接...
  • 中已有字段设置 外键 似乎不能设置为主键即使定义时没有定义主键也会报错 如 Multiple primary key defined 1。添加新字段 alter table 表名 add 字段名 字段描述; alter table student add phone varchar(20);...
  • Power bi分析并建立表与表之间的关系,同时通过表与表之间的数据绘制一些可视化图形。
  • MySQL 之间建立关系

    千次阅读 2019-09-27 08:59:13
    今天核心的内容就是怎样让之间产生关系,在思考这个问题的时候,我们可以回顾之前学习python时,当一个任务涉及到很多的功能时,我们为了 让程序的结构更清晰,扩展性更高,我们选择用函数>>模块>&...
  • 表间关系和外键约束

    千次阅读 2007-06-02 22:16:00
    外键,也称为Foreign Key,它是用于建立和加强两个数据之间的链接的一列或多列。我们在前面的课程中讲到了“主键”这个概念,“外键”与主键虽然不是同一个概念,但是它们之间有着紧密的联系。通过将保存中主...
  • ORM的一个大核心就是实现表间关系,总结一下EF的实现方式: 1. 一对多的关系: 1.1 隐喻的方式 public class Lodging { … public Destination Destination { get; set; } [Timestamp] public byte[] ...
  • Sql表间关系和连接查询应用举例

    千次阅读 2013-07-31 12:19:05
    所谓关系,其实就是两个对象之间的存在的联系,比如学生和课程这两个独立对象是多对多关系,两者的联系纽带是学生选择课程,从而可以产生一个新,选修表。sql中复杂的查询与重要的知识点往往都集中在两个对象产生...
  • 我先来跟大家探讨一下儿数据库表间建立关系的利与敝: 利:如果你的关系建立的没有错误的话数据的参照完整性肯定能得到保证,不会出现数据不一致的情况。实现级连删除非常方便。省去了为保证参照完整性用代码保证级...
  • 【数据库笔记04】(MySQL数据库语句,思维导图记忆)如何联系之间...如图建立两个,给product的cno添加一个外键约束 //references 执行 alter table product add foreign key(cno) references category (...
  • 知识点:数据库的相关概念、创建数据库的方法、设计数据库、向数据库中插入数据、建立不同数据库之间的关系、删除数据库。 1、数据相关的一些概念 1.1 数据库里的数据是如何保存的? 数据库...
  • SQL server 如何建立两个关系

    千次阅读 2018-07-14 21:07:27
    SQL Server 2008 ——关系---- https://blog.csdn.net/aiming66/article/details/51469739 5、sql server 两个之间的关联(触发器)---- https://blog.csdn.net/fendou300/article/details/79037544 6、 SQL怎样把...
  • 一、一对多的关系 例:公司与员工的关系,公司为一,公司员工为多,需要在多方建立外键指向一方的主键。...创建一张用户和一张角色,还需创建一张关系表关系表至少有两个外键,分别指向两张的主
  • 外键,也称为Foreign Key,它是用于建立和加强两个数据之间的链接的一列或多列。我们在前面的课程中讲到了“主键”这个概念,“外键”与主键虽然不是同一个概念,但是它们之间有着紧密的联系。通过将保存中主...
  • 两个关联表间如何建立触发器

    千次阅读 2011-03-31 16:58:00
    实现功能描述:C由A、B关联生成(其中A、B在物理库中,C在内存数据库中),A、B数据变化后通过触发器将变化后记录插入到...在基表A、B上建立触发器,触发器上使用游标操作,进行2个的关联操作。
  • 用Rational Rose来建立数据库

    千次阅读 2011-03-28 12:45:00
    我们只挑其中的两个表Customers和Employees做示例,另外我们再新建一个Card表,来建立表间关系,其他依此类推;前提当然是你已经安装了Rose 2003和 SQL Server2000,OK,我们开始 先看最终效果 图一、SQLServer2000...
  • 用主外键关系可以关联两个或多个,进行查询,但是,我也可以使用where tableName1.column1=tableName2.column2;来查询,差别不大,这个逻辑怎么理解?我是这么理解的,你是个男的,你要找一个女人生孩子,你可以找...
  • mysql 笔记 ...在MySQL数据库建立多对多的数据表关系 http://blog.51cto.com/13145200724/1370753 请问数据库在创建的时候如何设计表关系,一对一,一对多,多对多 请高手举例说明。谢谢!!! ...
  • 关联映射:一对多/多对一 存在最普遍的映射关系,简单来讲就如球员与...数据表间一对多关系如下图: 关联映射:一对一 一对一关系就如球队与球队所在地址之间的关系,一支球队仅有一个地址,而一个地
  • 学生,课程关系表

    千次阅读 2018-10-20 21:22:30
    原文:...  ************************************************************ 为sc中的sno和cno创建外键 alter table sc add foreign key(sno) references studen...
  • MySql数据库之关系

    千次阅读 2018-03-23 20:44:59
    关系一:一对一 例如:QQ与QQDetail,我们首先要找到主从关系,从而确定外键约束。在这两张中,QQ有两个属性(qqid与password);另一张为QQDetail有三个属性(qqid,name与address)。我们可以认为,...
  • 二、可视化表关系图 可视化表关系图的方法,书本上是这样说的: 但是我没有找到有数据关系图(Database Diagram)节点。于是百度,发现确实没有数据关系图(Database Diagram)这个节点。 ...
  • 实体关系表

    千次阅读 2014-09-10 14:55:26
    实体关系表
  • 原因可能有:b外键字段数据 与 a主键字段数据不符。  解决办法:使b外键字段数据 与 a主键字段数据一致。... 当建立关系时候就会出现下的错误 将“ab”改成“aa”,先关闭数据,重新编辑关系即可

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 224,629
精华内容 89,851
关键字:

怎么建立表间关系