DML_Data Modification_DELETE
DML_Data Modification_Delete
删除记录比较简单,但是需要特别注意,一不小心,就变成了 “从删库到跑路“ 就掉的大了
/*
Microsoft SQL Server 2008 T-SQL Fundamentals_CN(Chapter 8 Inserting Data)
*/ ----------------------------------------------------------------------------------------------------------------------
----先不用曾经测试过的表做实验,还需要实验+看数据+回顾,不小心已经破坏了Orders表
--SELECT *
--FROM Orders
----------------------------------------------------------------------------------------------------------------------
--先复制:Northwind.Customers, Orders,2个表(表结构+数据)到testdb库下
if OBJECT_ID('dbo.Customers','U') IS NOT NULL DROP TABLE dbo.Customers;
if OBJECT_ID('dbo.Orders','U') IS NOT NULL DROP TABLE dbo.Orders; SELECT * INTO testdb.dbo.Customers FROM Northwind.dbo.Customers
SELECT * INTO testdb.dbo.Orders FROM Northwind.dbo.Orders ALTER TABLE dbo.Customers ADD
CONSTRAINT PK_Customers PRIMARY KEY(CustomerID) ALTER TABLE dbo.Orders ADD
CONSTRAINT PK_Orders PRIMARY KEY(OrderID),
CONSTRAINT PK_Orders_Customers FOREIGN KEY(CustomerID)
REFERENCES dbo.Customers(CustomerID)
-------------------------------------------------------------------------------
--检查,表结构+数据,都复制到 testdb 库下了
SELECT * FROM Customers
SELECT * FROM Orders
--
--SELECT * FROM Northwind.dbo.Customers
SELECT * FROM Northwind.dbo.Orders
left join Northwind.dbo.Customers
on Orders.CustomerID=Customers.CustomerID
WHERE ShipCountry = 'UK' -- 有 56个,为下面删除 连接...的参考
--------------
SELECT * FROM Northwind.dbo.Orders
left join Northwind.dbo.Customers
on Orders.CustomerID=Customers.CustomerID
WHERE ShipCountry = 'USA' -- 有 122个,为下面删除 连接...的参考
--------------
SELECT * FROM Northwind.dbo.Orders
left join Northwind.dbo.Customers
on Orders.CustomerID=Customers.CustomerID
WHERE ShipCountry = 'France' -- 有 77个,为下面删除 连接...的参考 -------------------------------------------------------------------------------
-- DELETE(没有过滤条件时,是删除所有行)
SET NOCOUNT OFF --NOCOUNT 为 ON 时,只会报告命令完成,不会报告数量
DELETE
FROM dbo.Orders
WHERE orderdate < '' --TRUNCATE 没有过滤条件,删除所有行
--区别: TRUNCATE以最小模式记录日志(效率高),DELETE以完整模式记录日志
--创建一个 dummy table(让它包含一个指向产品表的外键,这样就可保护产品表了,此处还可多理解一下
TRUNCATE TABLE Orders
-------------------------------------------------------------------------------
-- 基于连接的 DELETE 不是标注的SQL语句(知道有这么一种写法就可),平时尽量采用标准的SQL语句
DELETE FROM O
FROM dbo.Orders as O
JOIN dbo.Customers AS C
ON O.CustomerID = C.CustomerID
WHERE C.Country = 'UK' --删除完满足条件的纪录后,再查,确证删除
--SELECT * FROM Customers
SELECT * FROM Orders
-----------------------------
--下面是标准的SQL语句
DELETE FROM dbo.Orders
WHERE EXISTS
(SELECT *
FROM dbo.Customers AS C
WHERE Orders.CustomerID = C.CustomerID
AND Orders.ShipCountry ='USA'
)
--------
--以连接形式的写法,然后再删除
DELETE FROM dbo.Orders
WHERE EXISTS
(SELECT *
FROM dbo.Customers AS C
LEFT JOIN Orders AS O
ON O.CustomerID = C.CustomerID
WHERE Orders.ShipCountry ='France'
)
--对于非标准的删除写法,也好理解(如右边), 先查询--->后条件--->最后删除
运行结果:
略
/*
Orders表在PIVOT、UNPIVOT中已经做了示例,下面表为OrdersA为区别
Microsoft SQL Server 2008 T-SQL Fundamentals_CN(Chapter 8 Inserting Data)
*/
DML_Data Modification_DELETE的更多相关文章
- DML_Data Modification_UPDATE
DML_Data Modification_UPDATE写不进去,不能专注了...... /* */ ------------------------------------------------- ...
- DML_Data Modification_MERGE
DML_8-Data Modification_MERGE (将Source表合并到Target) 语法:MERGE INTO 目标表USING 源表WHEN MATCHED AND ...
- DML_Data Modification_INSERT
Data Modification (INSERT.DELETE.UPDATE.MERGE)之INSERT(基础知识,算是20年来第2次学习MSSQL吧,2005年折腾过一段时间的Oracle)INS ...
- DML_Modifying Data Through Table Expressions_UPDATE
DML_Modifying Data Through Table Expressions_UPDATE之前也学习过使用CTE,再来泛泛的学习下,最后将会将一些书籍上或学习到的CTE来个小结 /* Mi ...
随机推荐
- Kubernetes学习笔记(五):卷
简介 卷是Pod的一部分,与Pod共享生命周期.它不是独立的Kubernetes对象,因此不能单独创建. 卷提供的存储功能不但可以解决容器重启后数据丢失的问题,还可以使数据在容器间共享. 一些卷的类型 ...
- Java——动态生成POJO类
package com.java.test.dynamicpojo; import java.io.ByteArrayOutputStream; import java.io.IOException; ...
- poi——读取excel数据
单元格类型 读取Excel数据 package com.java.test.poi; import java.io.File; import java.io.FileInputStream; impo ...
- Istio的流量管理(实操二)(istio 系列四)
Istio的流量管理(实操二)(istio 系列四) 涵盖官方文档Traffic Management章节中的inrgess部分. 目录 Istio的流量管理(实操二)(istio 系列四) Ingr ...
- 工作中遇到的SQL
1.根据a表中的字段col,修改b表中的col UPDATE a INNER JOIN b ON a.id = b.id SET b.col = xx WHERE a.col = xx 2.模糊查询 ...
- 特效 css3 持续动作的渐变背景
html,body{ margin:; padding:; height: 100%; width: 100%; background: linear-gradient(125deg,#2c3e50, ...
- 在树莓派里搭建 Lighttpd 服务器
Lighttpd 像 Ngnix 一样,是被设计运行在低内存,低 CPU 负载的设备上,它们都非常适合在树莓派上运行. 本文将介绍如何在树莓派上运行基本配置的 Lighttpd ,以及如何与 PHP- ...
- [优文翻译]002.陪伴我作为程序员的9句名言(9 Quotes that stayed with me as a developer)
导读:本文是从<9 Quotes that stayed with me as a developer>这篇文章翻译而来 下面的锦句均来自于<9 Quotes that stayed ...
- [JavaWeb基础] 022.线程安全(一)
在我们做客户端程序的时候我们经常会碰到线程安全的问题,比较经典的例子就是模拟局域网聊天.那么线程的安全到底是怎么回事呢,我们经常会听到StringBuffer是线程安全的,StringBuilder不 ...
- [工具推荐]002.SoftOrbits Sketch Drawer使用教程
SoftOrbits Sketch Drawer是一款简单易用的照片素描化软件,内置多种预设方案以及丰富的自定义细节. 只需要一次轻轻的鼠标点击,就可以帮助你迅速的将家人的照片转换为黑白或者彩色的素描 ...