三九宝宝网宝宝百科宝宝知识

SQL语句基础学习从子表里如何删除数据

02月24日 编辑 39baobao.com

[SQL语句基础学习之CreateIndex]索引 (Index) 可以帮助我们从表格中快速地找到需要的资料。举例来说,假设我们要在一本园艺书中找如何种植青椒的讯息。若这本书没有索引的话,那我们是必须要从头开始读,直到我...+阅读

在这篇文章里我要描述一下如何从表格里删除列,要删除的这些列同时还要依赖于其他表格的标准。要解决这个问题就需要一个很聪明而且完全遵守SQL92子查询声明的应用程序。 我必须提醒读者的是,尽管查询可能会遵守SQL的标准,但是众多的数据库生产商会以不同的句法支持实现SQL。以下这个解决方案应该适合于大多数数据库;但是,如果你的结果有出入,就还是应该查看一下文档。

同时,由于这个查询要处理DELETE声明,所以你应该在将其应用于真实的生产环境以前在实验数据上进行测试。 宠物店的例子要解释如何进行这种类型的列删除,我会使用如下这个数据库的表格,该数据库叫做PetStore,并包含有清单(inventory)信息。在叫做“品种(breed)”的表A里,我存储有每种动物的信息和宠物店库存的信息。在叫做“清单”的表B里,包含有商店里特定动物的信息。

在这个例子里,我们先假设商店把整窝Shitzu小狗都卖完了。我可以使用breed表格里的breed_id字段来删除Shitzu清单里的所有项目,就像这样: DELETE FROM inventory WHERE breed_id IN (SELECT breed_id FROM breed WHERE breed_name = 'Shitzu');首先,我要指定需要删除记录的表格,在这里是清单表格。然后再将识别字段breed_id同子选项子句的结果反复比对。我知道要找的是Shitzus,所以就能直接删掉他们,而不用再在单独的请求里查询breed_id。

我必须要警告你的是,以这种方式使用DELETE声明是危险的,只有在你对数据库的结构很熟悉的情况下才能使用这些声明。DELETE查询会从受影响的表格里删除掉全部列,你应该知道这对你所管理着的数据意味着什么。有个好办法是使用SELETE *这个短语替代DELETE关键字来对DELETE声明的子查询结果进行测试,这样就能保证结果里含有你要删除的所有东西,就像这样: SELECT * FROM inventory WHERE breed_id IN (SELECT breed_id FROM breed WHERE breed_name = 'Shitzu');DELETE和JOIN联用有人问到了解决这个问题另一个可能的办法:把JOIN子句和DELETE声明联合使用。

由于以前没有使用过这种方法,我就研究了一下,发现SQL Server的文档声明支持这个方法,尽管它不符合SQL92。在经过测试和询问各种数据库平台的老手之后,我发现把DELETE和JOIN声明联合使用在我测试过的任何平台上都行不通。 从多个表格里一次删除以上的解决方案还没有解释如何使用父表从多个子表里删除信息。但是SQL92规范里没有提供完成这项任务的标准解决方案。

DELETE的声明不能把多个表格作为一个参数接受。作为一个具有破坏性的查询,这能保证在命令要被执行的地方不会出现歧义。此外,这个限制防止了在单个声明内将AND和多个子查询联用。如果测试SELECT声明的结果用以检查DELETE查询将要影响到的是哪些数据,你会发现SELECT会返回多个表格的清单,DELETE不会影响到的多个子查询不在其中。 有很多可能的方法能够满足你的需求,例如在表格里创建一个字段,用以指明该项目是否为活动的。

以下为关联文档:

SQL数据操作基础第十章“SQL基础”向你初步介绍了SQL。你学会了如何用SELECT语句进行查询,你还学会了如何建立自己的表。在这一章里,你将加深你的SQL知识。你将学习如何建立索引来加快查询速...

SQL语句基础学习之TRIMSQL 中的 TRIM 函数是用来移除掉一个字串中的字头或字尾。最常见的用途是移除字首或字尾的空白。这个函数在不同的资料库中有不同的名称:MySQL: TRIM(), RTRIM(), LTRIM()O...

初学者SQL语句创建数据库create database BookManage go use BookManage go create table book ( 图书ID int identity primary key, --图书编号,identity是自动编号,可取消 书名 varchar(50), 作者 varc...

sql中删除重复数据SQL Server删除重复行是我们最常见的操作之一,下面就为您介绍六种适合不同情况的SQL Server删除重复行的方法,供您参考。 1.如果有ID字段,就是具有唯一性的字段 delect table w...

SQL中如何删除重复数据1.把重复记录放到临时表: select A,B,C,D into temp1 from [表名] group by A,B,C,D having count(*)>1 2.将不重复的记录记入temp1表: insert temp1 select A,B,C,D from [表...

怎么样删除SQL SERVER数据库中重复的数据重复记录如果是整条都重复 这么说 你的表没有主键? 请提供表名 各字段名 给你一个例子 可以直接执行的 --建表 create table school ( names varchar(23), adress int, ) --...

如何快速学习SQL语句囝ASP中多条件搜索SQL语句:方法一:sql="select * from table where 1=1" '避免所有查询条件为空时出错 if 条件1"" then sql=sql&" and ziduan1='"&条件1&"'" '精确搜索条件1if 条件2"" th...

SQL语句基础学习GroupBy是怎样的我们现在回到函数上。记得我们用 SUM 这个指令来算出所有的 Sales (营业额)吧!如果我们的需求变成是要算出每一间店 (store_name) 的营业额 (sales),那怎么办呢?在这个情况下,我们要做...

在SQL语句中如何实现查询当月数据和当年数据select * from yh.zsxx where to_char(rkrq,'yyyy-mm') = to_char(sysdate,'yyyy-mm') ——当月数据 select * from yh.zsxx where to_char(rkrq,'yyyy') = to_char(sysdate...

推荐阅读
图文推荐