当前位置:数据库 > SQLServer >>

几个实用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《电脑教程》栏目

Oracle
MySQL
Access
SQLServer
DB2
Excel
SQLite
SYBASE
Postgres
如果你遇到数据库难题:
请访问www.zzzyk.com 试试
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,