联表删除

联表查询
1、内连接--等值连接

自然连接,两个表相匹配的行才在结果集中出现

Select 内容 from 表1 inner join 表2 on 等值条件

Select * from student inner join grade on grade.stuid = student.stuid;

2、外连接

左连接:select 内容 from 表1 left  outer join 表2 on 等值条件

右连接:select 内容 from 表1 right  outer join 表2 on 等值条件

左连接按左表内容全部显示,右表数据无关联则显示null

右连接按右表内容全部显示,左表数据无关联则显示null

Select * from student right outer join grade on student.stuid = grade.stuid;

3、多表关联

Select 内容 from 表1,表2,表3  where 条件

Select * from student,course,grade where student.stuid = grade.stuid and course.couid = grade.couid  and coursegrade > 80;

Select  avg(coursegrade) from student,grade where student.stuid =grade.stuid and sex =’男’ and coursegrade is not null;

4.子查询--嵌套查询

当某一个查询条件实在另一个查询结果集里时,使用嵌套查询

Select * from grade where stuid = (select stuid from student where stname = ‘李四’);

Select * from grade where stuid in (select stuid from student where stname =’张三’or stname =’李四’);

Select * from grade where stuid = (select stuid from student where stname =’张三’) or stuid = (select  stuid from student where stname =’李四’ );

Select stname from student where stuid in (select stuid from grade where coursegrade between 70 and 90);

Select stname,sex,stel  from student where sno in (select sno from sc group by sno having count(cno)=(select count(cno) from course));

 
联表删除
1、从数据表t1 中把那些id值在数据表t2 里有匹配的记录全删除掉

DELETE t1 FROM t1,t2 WHERE t1.id=t2.id    或

DELETE  FROM t1 USING t1,t2 WHERE t1.id=t2.id

2、从数据表t1里在数据表t2里没有匹配的记录查找出来并删除掉

DELETE t1 FROM t1 LEFT JOIN T2 ON t1.id=t2.id WHERE t2.id IS NULL  或

DELETE  FROM t1,USING t1 LEFT JOIN T2 ON t1.id=t2.id WHERE t2.id IS NULL

3、从两个表中找出相同记录的数据并把两个表中的数据都删除掉

DELETE t1,t2 from t1 LEFT JOIN t2 ON t1.id=t2.id WHERE t1.id=25

注意此处的delete t1,t2 from 中的t1,t2不能是别名

如:delete t1,t2 from table_name as t1 left join table2_name as t2 on t1.id=t2.id where table_name.id=25 在数据里面执行是错误的(MYSQL 版本不小于5.0在5.0中是可以的)

delete table_name,table2_name from table_name as t1 left join table2_name as t2 on t1.id=t2.id where table_name.id=25 在数据里面执行是错误的(MYSQL 版本小于5.0在5.0中是可以的)

 

另外补充DELETE语句基本用法 :   

1.删除表中某行    DELETE FROM 表名称 WHERE 列名称 = 值

2.删除所有行,在不删除表的情况下删除所有的行     DELETE FROM table_name / DELETE * FROM table_name
————————————————

在按照上面例子进行删除时,遇到了无法删除的问题,原来是删除时的表名问题,下面附上自己的删除实例,联表删除格式例子

DELETE t1, t2, t3  FROM consult_task t1
LEFT JOIN choose_history t2 on t2.task_code = t1.task_code
LEFT JOIN consult_org t3 on t3.task_id = t1.id
WHERE t1.task_code = ''


转自:https://blog.csdn.net/weixin_39049960/article/details/84193438

SQL Server联表删除数据涉及到对两个或多个表的数据进行关联并执行删除操作的过程。这通常在需要清除基于特定条件关联的记录时应用,比如当某条记录在一个表中已不存在时,应该同步从相关的另一张表中删除该记录。 ### SQL Server联表删除的基本步骤 1. **确定关联字段**:首先,明确两个表之间如何关联,通常是通过某个共同的字段(例如ID、客户编号等)。 2. **选择查询**:编写SQL查询语句来查找那些满足删除条件的数据行。这个过程可能涉及INNER JOIN或LEFT JOIN等连接类型,以及WHERE子句来指定删除条件。 3. **执行删除操作**:将查找到的数据行从目标表中删除。 ### 示例代码 假设我们有两个表 `Orders` 和 `OrderDetails`,其中 `Orders.OrderID` 和 `OrderDetails.OrderID` 相关联: ```sql -- 删除关联的订单详情,前提是对应的订单不存在了 DELETE FROM OrderDetails WHERE OrderDetails.OrderID NOT IN ( SELECT Orders.OrderID FROM Orders ); ``` 这条SQL语句的功能是,它首先找出所有存在但在 `OrderDetails` 表中对应订单已经不在 `Orders` 表里的记录,并将这些记录从 `OrderDetails` 中删除。 ### 注意事项 - **事务处理**:对于敏感操作如数据删除,推荐使用事务处理来保证操作的一致性和可靠性。 - **备份**:在执行这类操作前,总是建议先做数据库的完整或增量备份。 - **权限检查**:确保执行此操作的用户有适当的权限,包括删除记录和访问相关表的权限。 ### 相关问题: 1. 如何在SQL Server中创建联表查询? 2. 在联表删除数据时,如何避免死锁? 3. 使用联表删除数据后如何验证结果是否正确?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值