sql高级技巧几个有用的Sql语句

1、例如:有两个表a(字段1,字段2,字段3)、b(字段2,字段3),其中存储数据如下所示

表a

字段1 字段2 字段3
1 <null> 地段内容1
1 <null> 地段内容1
2 <null> 地段内容2
2 <null>

地段内容2

3 <null> 地段内容3
4 <null> 地段内容4
5 <null> 地段内容5
5 <null> 地段内容5
5 <null> 地段内容5
6 <null> 地段内容6
7 <null> 地段内容7
8 <null> 地段内容8
8 <null> 地段内容8
8 <null> 地段内容8
8 <null> 地段内容8

表b

字段2 字段3
wdz1 地段内容1
wdz2 地段内容3
wdz3 地段内容5
wdz4 地段内容6
wdz5 地段内容7
wdz6 地段内容8


使用下面的sql语句(可以达到将表a中字段3与表b中字段3相同的数据字段2填充到表a中的字段2)
update 表1 set 字段1 = (select 字段1 from 表2 where 表1.字段3=表2.字段3)
结果如下表所示

表a结果

字段1 字段2 字段3
1 wdz1 地段内容1
1 wdz1 地段内容1
2 <null> 地段内容2
2 <null>

地段内容2

3 wdz2 地段内容3
4 <null> 地段内容4
5 wdz3 地段内容5
5 wdz3 地段内容5
5 wdz3 地段内容5
6 wdz4 地段内容6
7 wdz5 地段内容7
8 wdz6 地段内容8
8 wdz6 地段内容8
8 wdz6 地段内容8
8 wdz6 地段内容8


下面是本条sql语句的网友意见
一、“江千帆”


update 表1 set 字段1 = (select 字段1 from 表2 where 表1.字段3=表2.字段3)
的效率很低,如果有x条记录,会导致子查询执行x次.
如果我们这样写,就可以充分利用索引(如果两表在字段3上面都建立了索引),并且避免不必要的多次执行。
update 表1 set 表1.字段2 =表2.字段2 from 表1 inner join 表2 on 表1.字段3=表2.字段3

网友意见归纳结束。


2、例如:如第1点中的表a相同,需要查询出表a的重复数据的sql语句如下


select 字段1 from 表a group by 字段1 having count(字段3) > 1

查询结果如下

表a查询结果

字段1
1
2
5
8

3、例如:需要在sql server2000中查询处某固定物理路径的x1.dbf文件,使用的sql语句如下(必须先安装vf驱动才能使用此sql语句)


select * from opendatasource(‘vfpoledb.1′,’user id=;dsn=;collating sequence=machine;data source=c:\dbffiles\x1.dbf;password=;cache authentication=false;mask password=false;mode=share deny none;extended properties=;encrypt password=false’)…x1

注:其他的非vf数据库文件的查询类似,只需要设置opendatasource中的参数即可。参数说明为opendatasource(数据源驱动名,数据源连接字符串)

(0)
上一篇 2022年3月21日
下一篇 2022年3月21日

相关推荐