表singer:
singerID,singerName
1,刘德华
2,张学友
3,郭富城
4,黎明表song:
songID,songName,singerID
1,忘情水,1
2,中国人,1
3,吻别,2
4,对你爱不完,3
5,今夜你会不会来,4我想查找刘德华的歌曲,有两种sql语句:
1.两表连接select song.songName
from song,singer
where song.singerID = singer.singerID
and singer.singerName = '刘德华'
2.嵌套select songName
from song
where singerID = (select singerID from singer where singerName = '刘德华')在数据量很大的情况是,是连接表更快还是嵌套更快?
谢谢!
singerID,singerName
1,刘德华
2,张学友
3,郭富城
4,黎明表song:
songID,songName,singerID
1,忘情水,1
2,中国人,1
3,吻别,2
4,对你爱不完,3
5,今夜你会不会来,4我想查找刘德华的歌曲,有两种sql语句:
1.两表连接select song.songName
from song,singer
where song.singerID = singer.singerID
and singer.singerName = '刘德华'
2.嵌套select songName
from song
where singerID = (select singerID from singer where singerName = '刘德华')在数据量很大的情况是,是连接表更快还是嵌套更快?
谢谢!
解决方案 »
- 在linux操作系统中装oracle11gxe数据库,默认建立的oracle用户的密码是什么?
- oracle 9i 批量执行sql语句,如何操作?
- 游标与update问题~在线等
- ubuntu11.10安装oracle11gR2有问题
- unix下两个oracle数据库同步问题
- 求SQL
- ORACLE登陆时的一个问题
- 请教一条SQL语句!!!
- 导入数据库的中文都变成了???,应该是字符集的问题,请问如何更改字符集?
- 在drop tablespace tablespace_name INCLUDING CONTENTS时报:必须使用 DBMS_AQADM.DROP_QUEUE_TABLE 删除队列表
- sqlserver存储过程改oracle
- 请教VC使用ADO连接oracle数据库问题
from song a
where exists (
select 1 from singer where singerName = '刘德华'
and singerID=a.singerID)
这个快
from song,singer
where song.singerID = singer.singerID
and singer.singerName = '刘德华'这个是最快的了,在大数据情况下比楼上的应该还要快点。
from song
where singerID = (select singerID from singer where singerName = '刘德华')嵌套更快
与select song.songName
from song,singer
where song.singerID = singer.singerID
and singer.singerName = '刘德华',有区别吗
测试一下就清楚了哈!
而两表连接,是将两个表的数据笛卡尔之后再按连接条件进行过滤,所以在大数据量的时候,需要的时间也比较长,但相对嵌套来说,它更倾向于数据库底层的操作,所以需要的时间比嵌套应该要短,这个是经验的问题,不好说明,我觉得这样会不会更好一点:
select song.songName
from song,
(select singerID from singer where singerName = '刘德华') singer
where song.singerID = singer.singerID
from song,singer
where song.singerID = singer.singerID
and singer.singerName = '刘德华'这种效率应该高一点
一般情况下,能用表连接方式则不用exists;能用exists则不用in!