精华内容
下载资源
问答
  • Oracle数据库中如何查询删除多表关联数据要根据条件删掉一行数据(根据单号及采购组织名称) 要根据条件删掉一行数据(根据单号及采购组织名称) 例如要删这一行 :Index_number = 0000000032 先根据条件查询到这...

    要根据条件删掉一行数据(根据单号及采购组织名称)

    在这里插入图片描述
    例如要删这一行 :Index_number = 0000000032
    先根据条件查询到这一条数据

    SELECT	* FROM JY_SUPASS_FLOW flow LEFT JOIN JYPURORG purorg ON flow.PUR_ORG_ID = purorg. ID
    WHERE INDEX_NUMBER = '0000000032' AND (purorg. ID IN (SELECT purorg. ID FROM JYPURORG purorg
    WHERE PURORG_NAME = '重庆大江生产物料采购组织'));
    

    在这里插入图片描述
    接着执行删除语句:delete from jy_supass_flow where id = '1000250';

    [SQL]delete from jy_supass_flow where id = ‘1000250’
    [Err] ORA-02292: integrity constraint (YAPP_SRM.FKRN3EIDP3AA8ALWA2HBBVAMT27) violated - child record found

    本来以为利用工具找到这一行数据直接删除掉就可以了,奈何关联关系太多(别的表中有用到这一行的数据)… 删不掉
    数据库中表关联如下:在这里插入图片描述
    其他表中关联到该表中数据:
    在这里插入图片描述
    更为糟糕的是 jy_supass_result表还是一个主表,它还关联了jy_supass_result_dt明细表,所以如果要删除的话,得一次性删三张表,依次是jy_supass_result_dtjy_supass_resultjy_supass_flow

    所以首先要依次查找出这三张表中的数据。因为这些表中还有其他关联关系,所以我就直接上sql了
    首先是jy_supass_result_dt(可省)

    SELECT
    	*
    	FROM
    	JY_SUPASS_RESULT_DT dt
    LEFT JOIN JY_SUPASS_RESULT result ON dt.sup_ass_result_id = result. ID
    WHERE
    	result. ID IN (
    		SELECT
    			result. ID
    		FROM
    			JY_SUPASS_RESULT result
    		LEFT JOIN JY_SUPASS_Flow aaa ON result.sup_ass_flow_id = aaa. ID
    		WHERE
    			aaa. ID IN (
    				SELECT
    					flow. ID
    				FROM
    					JY_SUPASS_Flow flow
    				LEFT JOIN JYPURORG purorg ON flow.pur_org_id = purorg. ID
    				WHERE
    					purorg. ID = '1000006'
    			)
    		AND (
    			result. ID IN (
    				SELECT
    					result. ID
    				FROM
    					JY_SUPASS_RESULT result
    				LEFT JOIN jy_supass_task task ON result.sup_ass_task_id = task. ID
    				WHERE
    					TASK.INDEX_NUMBER = '0000000032'
    			)
    		)
    	);
    

    然后是jy_supass_result

    SELECT DISTINCT
    	(aaa. ID)
    FROM
    	JY_SUPASS_RESULT result
    LEFT JOIN JY_SUPASS_Flow aaa ON result.sup_ass_flow_id = aaa. ID
    WHERE
    	aaa. ID IN (
    		SELECT
    			flow. ID
    		FROM
    			JY_SUPASS_Flow flow
    		LEFT JOIN JYPURORG purorg ON flow.pur_org_id = purorg. ID
    		WHERE
    			purorg. ID = '1000006'
    	)
    AND (
    	result. ID IN (
    		SELECT
    			result. ID
    		FROM
    			JY_SUPASS_RESULT result
    		LEFT JOIN jy_supass_task task ON result.sup_ass_task_id = task. ID
    		WHERE
    			TASK.INDEX_NUMBER = '0000000032'
    	)
    );
    

    最后依次按照删jy_supass_result_dtjy_supass_resultjy_supass_flow这样的顺序就可以删掉啦。
    不过 写delete语句的时候发现 根本就不需要查询jy_supass_result_dt表中的数据,可以直接通过主表.id来删除明细中的数据。

    DELETE FROM JY_SUPASS_RESULT_DT WHERE SUP_ASS_RESULT_ID = '1000057';
    DELETE FROM JY_SUPASS_RESULT WHERE id = '1000057';
    DELETE FROM jy_supass_flow where id = '1000250';
    

    ps:上面是这种是针对多表中关联关系混乱的查询语句。
    如果一般查询的话,可以参照如下sql:

    -- 一般写法
    select * from jy_supass_flow where id = '10000';
    --返回两个集合
    SELECT * from JY_SUPASS_FLOW flow, JY_SUPASS_RESULT result WHERE FLOW.id = RESULT.SUP_ASS_FLOW_ID;
    --使用join
    SELECT * from JY_SUPASS_FLOW flow join JY_SUPASS_RESULT result ON FLOW.id = RESULT.SUP_ASS_FLOW_ID; -- WHERE
    --子查询
    -- 返回多条用 IN
    SELECT flow.* from JY_SUPASS_FLOW flow WHERE id IN (SELECT result.id from JY_SUPASS_RESULT result);
    --返回一条
    SELECT flow.* from JY_SUPASS_FLOW flow WHERE id IN (SELECT result.id from JY_SUPASS_RESULT result where id=1000004);
    

    同事还告诉了一个可以查外键关联的sql,多表关联中可以使用:

    SELECT
    	A .constraint_name,
    	A .table_name,
    	b.constraint_name
    FROM
    	user_constraints A,
    	user_constraints b
    WHERE
    	A .constraint_type = 'R'
    AND b.constraint_type = 'P'
    AND A .r_constraint_name = b.constraint_name
    AND A .constraint_name = 'FKCICV93OTPOKDYGVI0GBB9FL7J';
    

    如果有更好的建议可以分享一下。
    如有错误 希望指出(ps:小白一枚)。

    展开全文
  • 3.1对1数据库表设计、1对多数据库表设计、多数据库表设计三种关联方式:左关联、右关联、内联左关联(left join):以左为主(左保持完整,将右中和左有依赖关系的记录添加进来形成新的) 右关联(right...

    本篇博客知识点
    1.三种简单的关联方式:左关联、右关联、内联
    2.实例演示多表查询和关联查询
    3.1对1数据库表设计、1对多数据库表设计、多对多数据库表设计
    4.数据库—存储过程
    5.数据库—-binary: 用该关键字指定是否区分大小写

    三种关联方式:左关联、右关联、内联

    左关联(left join):以左表为主(左表保持完整,将右表中和左表有依赖关系的记录添加进来形成新的表)
    右关联(right join):以右表为主(右表保持完整,将左表中和右表有依赖关系的记录添加进来形成新的表)
    内联(inner join):将两个表中有联系的记录分别抽取出来形成新的表
    示意图
    左关联:
    这里写图片描述

    右关联
    这里写图片描述

    内联
    这里写图片描述

    以实际表 不同的车主有多辆车 为例
    这里写图片描述

    左关联生成的虚拟表如下
    这里写图片描述

    右关联生成的虚拟表如下
    这里写图片描述

    内联生成的虚拟表如下
    这里写图片描述

    实例演示多表查询和关联查询

    现在有两个表。 车主信息表和车辆信息表,car里的pid是外键
    person表
    这里写图片描述
    car表
    这里写图片描述

    需求1:查询 车辆数目大于等于二的车主编号

    SELECT pid FROM car GROUP BY pid HAVING COUNT(pid)>=2;

    这里写图片描述

    查询哪些人有两辆及以上车的车主信息
    方式一普通查询

    SELECT person.pname,car.cname,car.cid,car.price FROM person,car WHERE person.pid IN( SELECT pid FROM car GROUP BY pid HAVING COUNT(pid)>=2) AND person.pid=car.pid;

    方式二-关联查询

    SELECT person.pname,car.cname,car.cid,car.price FROM person INNER JOIN car ON person.pid IN( SELECT pid FROM car GROUP BY pid HAVING COUNT(pid)>=2) AND person.pid=car.pid;
    SELECT person.pname,car.cname, car.cid,car.price FROM person INNER JOIN car ON person.pid= car.pid WHERE person.pid IN( SELECT pid FROM car GROUP BY pid HAVING COUNT(pid)>=2);

    这里写图片描述
    查询哪些车主没车
    方式一

    SELECT person.pname,person.pid FROM person WHERE person.pid NOT IN(SELECT pid FROM car);

    方式二:做关联

    SELECT person.pname,person.pid FROM person LEFT JOIN car ON person.pid= car.pid WHERE car.pid IS NULL;

    方式三:右关联

    SELECT person.pname,person.pid FROM car RIGHT JOIN person ON person.pid = car.pid WHERE car.pid IS NULL;

    这里写图片描述
    查询哪些车主有车
    方式一

    SELECT person.pname,car.cname, car.price FROM person,car WHERE person.pid= car.pid;

    方式二

    SELECT person.pname,car.cname, car.price FROM person INNER JOIN car ON person.pid= car.pid;

    这里写图片描述

    1对1数据库表设计、1对多数据库表设计、多对多数据库表设计

    1对1数据库表设计
    需求:一对一的夫妻关系表

    ☆法1:分开两个独立的表
    create table wife(
      id int primary key,
      name varchar(10),
      sex char(1)
    );
    
    create table husband(
      id int primary key,
      name varchar(10),
      sex char(1),
      wid int unique,
      constraint husband_fk foreign key(wid) references wife(id)
    ); //通过constraint约束体现一对一
    
    ☆法2:合并在一个独立表
    create table person(
      id int primary key,
      name varchar(10),
      sex char(1),
      wife int,
      husband int
    );
    insert into person values(1,'小花','0', 0,3);
    insert into person values(2,'玉芬','0', 0,4);
    insert into person values(3,'张三','1', 1,0);
    insert into person values(4,'李四','1', 2,0);
    insert into person values(5,'王五','0', 0,0);
    
    通过分别建立视图来体现一对一的关系
    create view women as select * from person where sex='0';
    create view men as select * from person where sex='1';
    

    1对多数据库表设计
    需求:一个人拥有多辆车
    数据库设计

    方案一(差的设计)
    编号  姓名   性别   年龄   汽车编号    车型   排量   价格
    P001  Jack   男     25     C001      BMW    12L    80w
    P001  Jack   男     25     C002      Benz   12L    100w
    P001  Jack   男     25     C003      Benz   12L    100w
    P002  Tom    男     26     C004      BMW    12L    80w
    P002  Tom    男     26     C005      Benz   10L    60w
    P003  Rose   女     24     C006      Adio   10L    70w
    方案二(好的设计)
    1)把"一方"单独建表
    编号  姓名   性别   年龄 ...
    P001  Jack   男     25  ...
    P002  Tom    男     26  ...
    P003  Rose   女     24  ...

    2)把”多方”也建个表(要依赖”一方”: 通过外键(补一个字段) )
    外键:位于依赖的那个表,它是被依赖那个表是的主键

    汽车编号    车型   排量   价格   车主
    C001      BMW    12L    80w    P001
    C002      Benz   12L    100w   P001
    C003      Benz   12L    100w   P001
    C004      BMW    12L    80w    P002
    C005      Benz   10L    60w    P002
    C006      Adio   10L    70w    P003

    3)SQL代码实现

    create table person2(
      id varchar(32) primary key,
      name varchar(30),
      sex char(1),
      age int
    );
    //插入记录
    insert into person2 values('P1001','小花','0',25);
    insert into person2 values('P1002','玉芬','0',24);
    insert into person2 values('P1003','Tom','1',25);
    insert into person2 values('P1004','Rose','0',23);
    
    create table car(
      id varchar(32) primary key,
      name varchar(30),
      price numeric(10,2),
      pid varchar(32),
      constraint car_fk foreign key(pid) references person2(id)
    );
    insert into car values('C001','BMW',82.5, 'P1001');
    insert into car values('C002','BMW',111.5, 'P1001');
    insert into car values('C003','Benz',78.5, 'P1001');
    insert into car values('C004','BMW',55.5, 'P1002');
    insert into car values('C005','Audio',82.5, 'P1002');
    insert into car values('C006','QQ',6.5, 'P1003');
    insert into car(id,name,price) values('C007','ABC',6.6);

    多对多数据库表设计
    △需求引例: 学生–课程 之间的关系

    1、数据库设计(差的设计方案)
    1)学生表

    编号   姓名  性别  年龄   电话    住址  ...
    P001  Jack   男    23    135***  ***  ...
    P002  Tom    男    24    139***  ***  ...

    2)课程(选课)表

    课程    名称    学生   出版社   价格   ...
    S001   Java    P001   电子工业  40    ...
    S001   Java    P002   电子工业  40    ...
    ...
    S002   数据库   P001   清华大学 35    ...
    S002   数据库   P002   清华大学 35    ...

    2、数据库设计(好的设计方案)
    1)学生表(实体表独立建,编号字段为主键)

    编号   姓名  性别  年龄   电话    住址  ...
    P001  Jack   男    23    135***  ***  ...
    P002  Tom    男    24    139***  ***  ...

    2)课程表(实体表独立建,编号字段为主键)

    课程    名称    出版社   价格   ...
    S001   Java   电子工业   40    ...
    S002   数据库  清华大学  35    ...

    3)选课表(专为两个实体之间的联系建立一个关系表, 建立联合主键)
    课程编号 学生编号

    S001      P001
    S001      P002
    S002      P001
    S002      P002
    外键       外键
     ┗━━-------━━━┛
          
        联合主键

    3) 代码实现

    create table stud2(
      id varchar(32) primary key,
      name varchar(30),
      age int
    );
    create table ject(
      id varchar(32) primary key,
      name varchar(30)
    );
    create table sj(
      studid varchar(32),
      jectid varchar(32)
    );
    
    //建立联合主键: 先加外键再加联合主键,,不行的!!!
    alter table sj add constraint fk_stud foreign key(studid) 
          references stud2(id);
    alter table sj add constraint fk_ject foreign key(jectid) 
          references ject(id);
    alter table sj add constraint pk_sj primary key(studid,jectid);
    
    //删除外键
    alter table sj drop foreign key fk_stud;
    alter table sj drop foreign key fk_ject;
    
    //建立联合主键的正确顺序: 先加联合主键,再添加外键

    ※※※存储过程※※※※
    定义的语法格式:

    create procedure 过程名(形参)
    begin
       sql语句1;
       sql语句2;
       ...
    end

    调用的语法格式:

    call 过程名(实参)

    必须要注意的一个小细节: 要把默认的语句结束符”;”号改成其它如”$$”,这样存储过程中定义的分号就不被看成是语句结束(否则会直接被提交)。记得最后要改回分号

    SQL代码实例
    1.无参数的存储过程

    delimiter $$
    create procedure p1()
    begin
      INSERT INTO stud2 VALUES('P007','小王',23);
      select * from stud2;
    end$$
    delimiter ;
    
    call p1();

    2.有参数的存储过程

    delimiter $$
    create procedure p2( in id varchar(32), in nm varchar(30), in age int)
    begin
      INSERT INTO stud2 VALUES(id,nm,age);
      select * from stud2;
    end$$
    delimiter ;
    call p2('P008','小谢',22);

    3.有返回值的存储过程

    delimiter $$
    create procedure p3( in id varchar(32), in nm varchar(30),
                         in age int, out num int)
    begin
      INSERT INTO stud2 VALUES(id,nm,age);
      select * from stud2;
      select count(*) into num from stud2;
    end$$
    delimiter ;
    
    call p3('P009','Alice',23, @xx);
    
    //显示用户变量
    select @xx;

    ※※※binary: 用该关键字指定是否区分大小写※※※

    MySQL查询时,默认是不区分大小写的,如:
    select * from stud where sname like 'j%';
    select * from sutd where sname like 'J%';
    上面两句效果是一样的。
    
    1)要让MySQL查询区分大小写,可以:
    select * from stud where binary sname like 'j%';
    select * from sutd where binary sname like 'J%';
    
    2)也可以在建表时,加以标识
    create table tbName(
      aa varchar(20) binary
    );
    
    展开全文
  • 文章目录多表设计-关联查询为什么需要多表设计?数据库设计范式第一范式(1NF)第二范式(2NF)第三范式(3NF)数据库实例外键数据库实例注意关联查询概述分类内连接(inner join)外连接交叉连接 多表设计-关联查询 为什么...

    多表设计-关联查询

    为什么需要多表设计?

    多表设计的目的就是为了消除冗余的数据,将一张表拆分成为多张表,或者将多张表中的共同数据提取到一张表中.

    举个例子,有如下两张表

    编号 姓名 民族 国籍
    1 张三 汉族 中国
    2 李四 汉族 中国
    编号 省份 国籍
    1 陕西 中国
    2 广州 中国

    这两张表中就存在着大量的冗余,如民族,国籍,若是我们对其进行多表设计就可以变为

    民族表

    民族编号 民族
    1 汉族
    2 回族

    国家表

    国家编号 国籍
    1 中国
    2 巴基斯坦

    而最上面的两张表就可以变为

    编号 姓名 民族编号 国家编号
    1 张三 1 1
    2 李四 1 1
    编号 省份 国家编号
    1 西安 1
    1 广州 1

    通过这样的方法我们可以将重复的冗余数据消除掉,并且可以做到对一个数据重复利用.

    数据库设计范式

    1.为了建立冗余较小, 结构合理的数据库,设计数据库时必须遵循一定的规则, 在关系型数据库中这种规则也被称作时范式. 范式是符合某一种设计要求的总结.

    2.在目前关系型数据库中有6种范式:

    (1)第一范式(1NF);

    (2)第二范式(2NF);

    (3)第三范式(3NF);

    (4)巴斯-科德范式(BCNF);

    (5)第四范式(4NF);

    (6)第五范式(5NF), 又称完美范式.

    3.满足最低要求的范式是第一范式(1NF), 在第一范式的基础上进一步满足更多的规范要求就被称为第二范式(2NF), 其余范式依次类推. 一般来说, 数据库只需要第三范式(3NF)就行了.

    第一范式(1NF)

    第一范式是最基本的范式, 要确保数据库表中的每一列都保持原子性, 如果数据库表中的所有字段值都是不可分解的原子值, 就说明该数据库表满足了第一范式.

    举个例子

    编号 姓名 联系方式
    1 王麻子 邮箱/电话/qq

    满足第一范式后的表结构

    编号 姓名 邮箱 电话 QQ
    1 王麻子 12345676@qq.com 1313131 2212321

    第二范式(2NF)

    1.第二范式就是要有主键, 要求其他字段都依赖于主键;

    2.没有主键就没有唯一性,没有唯一性在集合中就定位不到这行记录, 所以要主键.

    3.其他字段为什么要依赖于主键? 因为不依赖于主键, 就找不到他们. 更重要的是, 其他字段组成的这行记录和主键表达的是同一个东西, 而主键是唯一的, 它们只需要依赖于主键,也就成了唯一的.

    第三范式(3NF)

    第三范式就是要消除传递依赖, 方便理解, 可以看做是"消除冗余".

    订单编号 数量 商品编号 商品名称 单价 订单金额
    1000 2 2020 手机 2000 4000
    商品编号 商品名称 单价
    2020 手机 2000
    订单编号 数量 订单金额 商品编号
    1000 2 4000 2020

    一般来说, 数据库只需要第三范式(3NF)就行了.

    数据库实例

    学生表:姓名,性别,手机号,年级编号,注册时间
    年级表:年级编号,年级名称,年级介绍
    课程表:课程编号,课程名称,课程介绍
    表与表之间的几种关系:
    1.一对一关联;
    2.一对多关联;
    3.多对一关联;
    4.多对多关联.

    -- 创建年级表
    CREATE TABLE t_grade(
    	g_id INT PRIMARY KEY AUTO_INCREMENT COMMENT'年级编号',
    	g_name VARCHAR(10) COMMENT'年级名称',
    	g_desc VARCHAR(50) COMMENT'年级介绍'
    )
    

    在这里插入图片描述

    -- 创建学生表
    CREATE TABLE t_stu(
    	s_id INT PRIMARY KEY AUTO_INCREMENT COMMENT'学号',
    	s_name VARCHAR(10) COMMENT'姓名',
    	s_sex CHAR(1) DEFAULT'男' COMMENT'性别',
    	s_phone INT(11) COMMENT'电话',
    	s_g_id INT COMMENT'年级编号',
    	reg_time DATETIME COMMENT'注册时间'
    )
    

    在这里插入图片描述

    介绍一下弱关联关系: 表结构本质上没有联系,表与表之间的关系是人为定义的,删除关联表中的数据对另一个没影响, 如上图的年级编号和年级表是一种弱关联关系.

    外键

    再说一下强关联关系, 给外键添加约束,强制让外键与对应的主键产生关联关系(外键,对应的都是另一个表中的主键)

    1.外键: 引用另外一个数据表的某条记录.

    2.外键列的数据类型应于主键列保持一致.

    3.数据表之间的关联/引用关系是依靠具体的主键(primary key)和外键(foreign key)建立起来的.

    建表时添加外键的语法:

    create table 表名(
    	constraint 约束名 foreign key(外键列) references 主键表(主键列)
    )
    

    添加外键约束语法:

    alter table 表名 
    add [constraint 约束名(自己起的)] 
    foreign key(外键列) 
    references 关联表(主键)
    

    删除外键语法:

    alter table 表名 drop foreign key 外键约束名;
    

    数据库实例

    为上表添加外键

    ALTER TABLE t_stu 
    ADD CONSTRAINT s_foreign_key 
    FOREIGN KEY(s_g_id) 
    REFERENCES t_grade(g_id); 
    
    -- 创建课程表,多对多关系,一个学生对应多个课程,一个课程对应多个学生
    CREATE TABLE t_course(
    	c_id INT PRIMARY KEY AUTO_INCREMENT COMMENT'课程号',
    	c_name VARCHAR(10) COMMENT'课程名',
    	c_desc VARCHAR(20) COMMENT'课程介绍'
    )
    -- 设计关系表来存储多个数据之间的关系
    CREATE TABLE t_stu_course(
    	sc_id INT PRIMARY KEY AUTO_INCREMENT,
    	sc_stu_id INT,
    	sc_course_id INT,
    	CONSTRAINT stu_id_fk FOREIGN KEY(sc_stu_id) REFERENCES t_stu(s_id),
    	CONSTRAINT cou_id_fk FOREIGN KEY(sc_course_id) REFERENCES t_course(c_id)
    )
    

    在这里插入图片描述
    在这里插入图片描述

    注意

    1.当主表中没有对应的记录时,不能将记录添加到从表

    2.不能更改主表中的值而导致从表中的记录孤立

    3.从表存在与主表对应的记录,不能从主表中删除该行

    4.删除主表前,先删除从表

    关联查询

    概述

    1.关联查询又称为多表查询, 当查询的字段来自于多个表时, 就会用到连接查询

    2.笛卡尔乘积现象: 表1有m行, 表2有n行, 查询结果有m*n行

    (1)发生原因: 没有有效的连接条件

    (2)如何避免: 添加有效的连接条件

    分类

    内连接(inner join)

    把满足条件的两张表中的交集数据查询出来

    语法:

    select 结果 from1,2 where1.1=2.2
    
    SELECT s_id,s_name,s_sex,s_g_id,g_name,g_id 
    FROM t_stu,t_grade
    WHERE s_g_id = g_id
    

    在这里插入图片描述

    1.等值连接

    #等值连接
    /*
    语法
    select 结果 from 表名 inner join 被连接的表名(外键表) on 外键=主键
    */
    SELECT * 
    FROM t_stu
    INNER JOIN t_grade ON s_g_id = g_id 
    

    在这里插入图片描述

    2.非等值连接

    #创建一个等级表
    CREATE TABLE t_level(
    	l_name CHAR(1),
    	l_min_score INT,
    	l_max_score INT
    )
    /*
    非等值连接
    语法
    select 结果
    from 表1
    inner join 表2
    on 表1.列1 between 表2.列2 and 表2.列3
    */
    SELECT
      s_name,
      l_name
    FROM
      t_stu
      INNER JOIN t_level
        ON s_score BETWEEN l_min_score
        AND l_max_score
    

    在这里插入图片描述

    在这里插入图片描述

    3.自连接: 在一张表中建立连接关系

    CREATE TABLE t_area(
    	a_id INT,
    	a_name VARCHAR(10),
    	a_father INT
    )
    #在一张表中建立连接关系
    SELECT
      t1.a_name,
      t2.a_name
    FROM
      t_area t1
      INNER JOIN t_area t2
        ON t1.a_father = t2.a_id;
    

    在这里插入图片描述
    在这里插入图片描述

    外连接

    1.左外连接(left join)

    /*
    语法
    select 结果
    from 表1
    left join 表2 
    on 表1.字段=表2.字段l;
    
    不管表1的字段与表2的字段是否有连接,都会显示表1的所有信息
    */
    SELECT *
    FROM t_stu s
    LEFT JOIN t_grade g
    ON s.s_g_id = g.g_id;
    

    2.右外连接(right join)

    /*
    语法
    select 结果
    from 表1
    right join 表2 
    on 表1.字段1=表2.字段2;
    
    不管表1有没有和表2中的所有数据关联,都会显示出表2的所有
    */
    SELECT *
    FROM t_stu s
    RIGHT JOIN t_grade g
    ON s.s_g_id = g.g_id;
    
    交叉连接
    -- 交叉连接 类似于内连接
    SELECT *
    FROM t_stu s
    CROSS JOIN t_grade g
    ON s.s_g_id = g.g_id;
    
    展开全文
  • Oracle数据库的外键所关联表查询

    千次阅读 2017-03-30 15:03:56
    问题:需要删除一个主的数据,但是该被其他外键关联了,于是需要找到关联的那个。 解决方法:通过以下语句查询到外键是建在哪张表上的:select * from dba_constraints where constraint_name='xxx' and ...

    问题:需要删除一个主表的数据,但是该表被其他表外键关联了,于是需要找到关联的那个表。
    解决方法:

    通过以下语句查询到外键是建在哪张表上的:

    select * from dba_constraints where constraint_name='xxx' and constraint_type = 'R';

    例如:

    执行delete from student;时报错:

    ORA-02292: integrity constraint (CCSYS.FK_STUDENTRUNRESULT_TASKID) violated - child record found

    可以通过执行

    select table_name from dba_constraints where constraint_name='FK_STUDENTRUNRESULT_TASKID' and  constraint_type = 'R';

    查询出外键是建在哪张表上的,先把该表删除,就可以删除 student表记录了。

    展开全文
  • 数据库多表查询与视图操作

    千次阅读 2019-12-30 17:04:52
    在上一次的基础上对已经创建的jwg数据库中的数据进行各种查询操作 多表查询 1、进行多表查询 从student、course、student_course三个中检索出学生的学号、姓名、学习课程号、学习课程名、课程成绩 2、...
  • 数据库删除关联表的命令

    千次阅读 2019-03-11 20:04:15
    drop table tb cascade 后面加个cascade就可以了 就可以把与之关联也一并删除.
  • 在对oracle数据库进行操作的时候,我们往往会有这样的困惑:  1、新增数据时,按照mySql的写法... 那么在下面,将详细讲解单的增删改成及多表关联查询该如何书写sql语句: 首先,我们要建立数据库的连接,在src
  • PostgreSQL 多表关联删除

    千次阅读 2020-09-06 15:21:44
    用PostgreSQL数据库删除某个数据 student,需要关联多(如classroom)作为条件,以下语句走不通: delete s.* from student s,classroom c where s.cid = c.id and s.sid = 1 delete from student s,...
  • SQL多表关联查询

    千次阅读 2019-09-19 09:26:01
    有时候,我们查询数据时,会采用多数据库关联查询的方式。数据库通过连接两张张表查询时,会生成一张临时的中间,然后返回给用户的就是这张临时的数据。那么具体怎么操作呢?我们可以采用left join,搭配...
  • java mybatis 实现简单多表通用查询 ### 简介 实现项目中比较基本的多表通用查询。 ​ 实现简单的实体类操作多表, 首先你的项目是使用了mybatis-plus 才可以使用。 ​ 不做任何更改,也不会对项目产生任何影响...
  • PyMySQL高级多表关联查询

    千次阅读 2019-10-24 09:54:22
    第一章 模型类添加关联表 第二章 多表关联查询 第三章 查询集QuerySet 第四章 综合案例
  • mongodb数据库多表查询

    2019-12-23 08:40:08
    mongodb数据库多表查询方式大致分为两种 ref…与population的形式。这一种仅仅适用于一对的关系中,并且ref自动关联另一个的_id字段 aggregate…$lookup的形式适用于任何形式,包括一对对一 如何实现一...
  • 数据库关联查询

    千次阅读 2019-03-16 10:54:17
    给laobian2数据库中的person表查询权限授权给 10.10.65.%登录laobian2 用户   2. insert 插入权限 grant insert on laobian2.person to "laobian2"@"10.10.65,%" 3. update 更新权限 grant ...
  • 课程回顾:MySQL数据库和SQL语言数据库的概述1.数据库的作用:仓库,存储数据。 2.关系型的数据库,保存实体与实体之间的关系。...数据库的服务器 – 数据库 – 每一个数据库中存在的结构 – 创
  • 2018.05.17******************************************************* ...那么在flask中也要面对数据库中表格的一对一,一对乃至关联关联,这些关系需要怎么处理呢,这里我详细介绍一对...
  • 这是我和我同学有关数据库逻辑关联和物理关联的讨论,我感觉我好…o(╥﹏╥)o 我太懒了,不想写,直接截图看讨论的过程,总结的不是很到位,七张join图知识查询方法,但是删除和更新没考虑到,建表是正常建表不加外键还是加...
  • 在开发的过程中,由于持久层使用的是非关系型数据库mongodb,涉及到列表查询多表关联查询,在实现此功能的过程中出现了不少问题,做下记录方便以后遇到此类问题可以快速的解决,同时为遇到此类问题的小伙伴提供...
  • mysql数据库表关联关系级联删除问题

    千次阅读 2018-11-03 14:27:08
    场景“删除一个的数据的时候,将相关的相关数据删除。” 例 : table1 : 活动(主) table2:活动图片(外键活动id) table3:评论(外键活动id) table4:报名 table5:活动报名关系(外键活动id,报名id)...
  • 前几天写了简单的从页面对数据库进行的操作,下面对该功能进行升级,操作两张相关联;上次是对新闻类型的修改,我在这里就不重复了,可以查看我之前的博客, 首先从页面说起: 页面部分: 页面部分我用了10个...
  • 干货 | Elasticsearch多表关联设计指南

    万次阅读 多人点赞 2019-03-24 23:45:37
    多表关联通常指:1对,或者。 本文以星球问题会出发点,引申出ES多表关联认知,分析了4种关联关系的适用场景、优点、缺点, 希望对你有所启发,为你的多表关联方案选型、实战提供帮助。 1、抛出问题 1.1...
  • 我想问一下在实际的项目开发中,Hibernate的关联关系和数据库表关联关系需要同时建立吗?就是既在持久化对象里写关联关系又在数据库里建外键
  • 当然做项目时为了省空间,通常只建一个,如果要实现一对一的查询,可以建两个视图。示例如下: 1)建物理,初始化数据 CREATE TABLE person( id INT, NAME VARCHAR(10), sex CHAR(1), wife INT, husband INT...
  • 1.创建两张 2.插入数据 3.创建关联表 4.设置主键 5.设置外键 6.在关联表中插入数据 7.查找(两种方法) 附言:删除主键:
  • 当需要对多表进行删除操作时,无外乎进行后台的多表联合查询,后台判断是否存在关联,存在关联则不删除,不存在则使用DML语言删除并返回前台结果。 现把经常用到的几个多表联合删除的方法总结如下,并附具体例子: ...
  • Coredata的多表关联

    千次阅读 2016-08-27 11:24:18
    当你会使用单个Coredata数据库表了,那你就会想到,如果两张有一定的关联了。而且经常会有根据互相关联去查找。其实Coredata的多表关联,以及关联查找功能并没有sqlite3的强大,所以了,如果遇到复杂和太多表...
  • mysql数据库关联查询与视图

    千次阅读 2019-05-21 10:30:15
    1、union:合并查询结果 要求:两次查询的列数一致;推荐:查询的每一列,对应的列的类型一致 认识: select goods_id,goods_name,shop_price from goods where shop_price<20 or shop_price>5000; select ...
  • 将python中的类映射为数据库中的,一个类就是一张,类的属性映射为的字段,将python代码翻译为对应的sql语句。 1、优点: (1)、 降低耦合 (2)、开发人员只需要关注业务逻辑,降低开发人员的开发难度 2、...
  • 应用名/models.py(模型,定义模型类,一对 models.ForeignKey): from django.db import models # 一个图书对应个英雄人物 # 图书类(一类) class BookInfo(models.Model): btitle = models.CharField(max...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 296,489
精华内容 118,595
关键字:

数据库删除多表关联查询