exists,not exists总结
来源:百度文库 编辑:神马文学网 时间:2024/06/05 01:54:43
1 exists
SELECT * FROM anken_m WHERE EXISTS(
SELECT my_list_temp_m.sales_code
FROM my_list_temp_m
WHERE my_list_temp_m.sales_code=anken_m.sales_code)
说明:
1) 查询在anken_m表和my_list_temp_m表中都存在的sales_code。
2) sales_code是anken_m的主键,my_list_temp_m的外键。
注意:
1) 外层查询表anken_m是查询的对象。
2) 内层查询表my_list_temp_m是条件对象。
3) 内外层的查询表不能相同。
4) 作为关联条件的anken_m表不需要在内层查询FROM后添加。
5) my_list_temp_m.sales_code=anken_m.sales_code条件的左右顺序不影响查询结果。
2 not exists
SELECT * FROM anken_m WHERE NOT EXISTS(
SELECT my_list_temp_m.sales_code
FROM my_list_temp_m
WHERE my_list_temp_m.sales_code=anken_m.sales_code)
说明:
1) 查询在anken_m表中存在,但是在my_list_temp_m表中不存在的sales_code。
2) sales_code是anken_m的主键,my_list_temp_m的外键。
注意:
1) 外层查询表anken_m是查询的对象。
2) 内层查询表my_list_temp_m是条件对象。
3) 内外层的查询表不能相同。
4) 作为关联条件的anken_m表不需要在内层查询FROM后添加。
5) my_list_temp_m.sales_code=anken_m.sales_code条件的左右顺序不影响查询结果。
3 综合运用
UPDATE anken_m
SET( plan_type_code, branch_name, business_type_code)
=(SELECT anken.plan_type_code,anken.branch_name,anken.business_type_code
FROM anken
WHERE anken.sales_code=anken_m.sales_code)
WHERE EXISTS (
SELECT anken.sales_code
FROM anken,my_list_temp_m
WHERE my_list_temp_m.sales_code=anken.sales_code
AND anken.sales_code=anken_m.sales_code
)
说明:
1) 用一个表的记录数据更新另一个表的记录数据。
2) 用一个SQL语句进行批量更新。
2) sales_code是anken,anken_m的主键,my_list_temp_m的外键。
注意:
1) set 语句中的要被更新字段必须跟数据源字段一一对应,另外数据源查询中的条件必须限定一条记录。 也就是根据sales_code可以唯一确定anken的一条记录,和anken_m的一条记录,这样才能保证要被更新的记录和数据源记录的主键是相同的。
2) 根据WHERE EXISTS语句可以确定数据源记录的范围,也就是可以用anken表中哪些记录更新anken_m表。所以anken_m不需要在WHERE EXISTS语句中的FROM后添加。
实际生产中的例子:
insert tbl_Log select * from tbl_log_Temp
where not exists(
select * from tbl_Log
where tbl_Log.exch_id = tbl_log_Temp.exch_id AND
tbl_Log.iCurID = tbl_log_Temp.iCurID AND
tbl_Log.iFlag = tbl_log_Temp.iFlag AND
tbl_Log.iIdenty = tbl_log_Temp.iIdenty AND
tbl_Log.sOperatorName = tbl_log_Temp.sOperatorName AND
tbl_Log.iConnectStyle = tbl_log_Temp.iConnectStyle AND
tbl_Log.sIpAddress = tbl_log_Temp.sIpAddress AND
tbl_Log.iCommPortNo = tbl_log_Temp.iCommPortNo AND
tbl_Log.iCmdCode = tbl_log_Temp.iCmdCode AND
tbl_Log.sOpCmd = tbl_log_Temp.sOpCmd AND
tbl_Log.sOpTime = tbl_log_Temp.sOpTime AND
tbl_Log.iFinished = tbl_log_Temp.iFinished AND
tbl_Log.iErrorCode = tbl_log_Temp.iErrorCode
)
SELECT * FROM anken_m WHERE EXISTS(
SELECT my_list_temp_m.sales_code
FROM my_list_temp_m
WHERE my_list_temp_m.sales_code=anken_m.sales_code)
说明:
1) 查询在anken_m表和my_list_temp_m表中都存在的sales_code。
2) sales_code是anken_m的主键,my_list_temp_m的外键。
注意:
1) 外层查询表anken_m是查询的对象。
2) 内层查询表my_list_temp_m是条件对象。
3) 内外层的查询表不能相同。
4) 作为关联条件的anken_m表不需要在内层查询FROM后添加。
5) my_list_temp_m.sales_code=anken_m.sales_code条件的左右顺序不影响查询结果。
2 not exists
SELECT * FROM anken_m WHERE NOT EXISTS(
SELECT my_list_temp_m.sales_code
FROM my_list_temp_m
WHERE my_list_temp_m.sales_code=anken_m.sales_code)
说明:
1) 查询在anken_m表中存在,但是在my_list_temp_m表中不存在的sales_code。
2) sales_code是anken_m的主键,my_list_temp_m的外键。
注意:
1) 外层查询表anken_m是查询的对象。
2) 内层查询表my_list_temp_m是条件对象。
3) 内外层的查询表不能相同。
4) 作为关联条件的anken_m表不需要在内层查询FROM后添加。
5) my_list_temp_m.sales_code=anken_m.sales_code条件的左右顺序不影响查询结果。
3 综合运用
UPDATE anken_m
SET( plan_type_code, branch_name, business_type_code)
=(SELECT anken.plan_type_code,anken.branch_name,anken.business_type_code
FROM anken
WHERE anken.sales_code=anken_m.sales_code)
WHERE EXISTS (
SELECT anken.sales_code
FROM anken,my_list_temp_m
WHERE my_list_temp_m.sales_code=anken.sales_code
AND anken.sales_code=anken_m.sales_code
)
说明:
1) 用一个表的记录数据更新另一个表的记录数据。
2) 用一个SQL语句进行批量更新。
2) sales_code是anken,anken_m的主键,my_list_temp_m的外键。
注意:
1) set 语句中的要被更新字段必须跟数据源字段一一对应,另外数据源查询中的条件必须限定一条记录。 也就是根据sales_code可以唯一确定anken的一条记录,和anken_m的一条记录,这样才能保证要被更新的记录和数据源记录的主键是相同的。
2) 根据WHERE EXISTS语句可以确定数据源记录的范围,也就是可以用anken表中哪些记录更新anken_m表。所以anken_m不需要在WHERE EXISTS语句中的FROM后添加。
实际生产中的例子:
insert tbl_Log select * from tbl_log_Temp
where not exists(
select * from tbl_Log
where tbl_Log.exch_id = tbl_log_Temp.exch_id AND
tbl_Log.iCurID = tbl_log_Temp.iCurID AND
tbl_Log.iFlag = tbl_log_Temp.iFlag AND
tbl_Log.iIdenty = tbl_log_Temp.iIdenty AND
tbl_Log.sOperatorName = tbl_log_Temp.sOperatorName AND
tbl_Log.iConnectStyle = tbl_log_Temp.iConnectStyle AND
tbl_Log.sIpAddress = tbl_log_Temp.sIpAddress AND
tbl_Log.iCommPortNo = tbl_log_Temp.iCommPortNo AND
tbl_Log.iCmdCode = tbl_log_Temp.iCmdCode AND
tbl_Log.sOpCmd = tbl_log_Temp.sOpCmd AND
tbl_Log.sOpTime = tbl_log_Temp.sOpTime AND
tbl_Log.iFinished = tbl_log_Temp.iFinished AND
tbl_Log.iErrorCode = tbl_log_Temp.iErrorCode
)
exists,not exists总结
SQL查询速度测试及Not Exists
SQL中IN,NOT IN,EXISTS,NOT EXISTS的用法和差别
sql的not exists随笔 - J2ME - New - JavaEye论坛
oracle里not exists和not in 性能测试_sailorhu的记事本
水果 DO NOT
Do not wait...
Life Is Not Perfect
not …because…
止步 or not
True or not true
womanity, not just female
【总结】:
总结!
Society must not shun philosophers
How Not to Lead Geeks
Mobile Web Not Very Sticky
Wired but not Web 2.0?
Cut and paste ‘not plagiarism‘
named as omelet not amulet
Society must not shun philosophers
autocheck program not found解决方法
《最佳学习方法手册》(not bad !)
is not in sudoer file