几个实用SQL语句查询实例分享
案例一,问题描述:
假设有两张数据表
表A,tablea(id,name)
数据如下
1,张
2,李
3,陈
4,黄
表B,tableb(aid,bid,cid,did)
数据如下
1,2,3,4
其中表B中id均与表A一一对应
请问如何 查询给定 aid=1 下 表B对应的所有 名称
即要求查询结果
张,李,陈,黄问题补充:
要求结果1
aid bid cid did
张 李 陈 黄
要求结果2
aid 张
bid 李
cid 陈
did 黄
用mysql和oracle分别如何编写sql查询
问题答案:
对于结果一:
select a.name aid,b.name bid,c.name cid,d.name did from tableb
left join tablea a on a.id=tableb.aid
left join tablea b on b.id=tableb.bid
left join tablea c on c.id=tableb.cid
left join tablea d on d.id=tableb.did
where tableb.id=1
对于结果二:
与结果一相似,只是用union就行了
这些都是基本语法,mysql和oracle都支持,我目前没有mysql环境,我用的是oracle的语法,但mysql应该也是可以用的,只是有些细节方面可能不太一样,这个你自己找个环境一
运行就知道了。
案例二,问题描述:
表A中字段aid是整数型,表B中字段aidstr是字符型,aidstr是有aid组成的字符串(用逗号分隔),例如:
A.aid为1、2、3、4
B.aidstr为
张三 1,2
李四 1,3,4
王五 2,4
现在的问题是查出B.aidstr中包含A.aid的记录,比如查出包含1的所有记录,则返回张三和李四这两条记录。
问题答案:
(MSSQL)严谨一点的话,应该是前后增加逗号去比对,否则如果是1,会把所有带1的都查询出来,比如"11,21,31"等,如果仅仅是查询B表,则可以:
select * from B where charindex(',1,',','+b.aidstr+',')>0
---关联查询可以这样
select A.*,B.* from B,A where charindex(','+CAST(A.aid as varchar)+',',','+b.aidstr+',')>0
---也可以用like语句实现:
select * from B where ','+b.aidstr+',' like '%,1,%','
select A.*,B.* from B,A where ','+b.aidstr+',' like '%,'+cast(A.aid as varchar)+',%','
--以上前提均是ID直接除了逗号没有空格。
案例三,问题描述:
限定条件为x在x1和x2,y在y1和y2之间,decode这个函数是Orcale里面才有的吧?可我的数据库是sqlsever
问题答案:
select * from table
where x>decode(sign(x1-x2),1,x2,x1)
x<decode(sign(x1-x2),1,x1,x2)
y>decode(sign(y1-y2),1,y2,y1)
y<decode(sign(y1-y2),1,y1,y2);
学习电脑编程语言,请点 www.zzzyk.com《电脑教程》栏目