欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-06-29 14:30:32
1、例如:有两个表a(字段1,字段2,字段3)、b(字段2,字段3),其中存储数据如下所示表a 字段1 字段2 字段3 1
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(数据源驱动名,数据源连接字符串)