sql:内链接,外链节,嵌套查询,子查询说明
2016-10-12 15:28
260 查看
1 常用Sql查询
表A和表B要做关联查询:表A当成主查询表:查询记录主体从主查询表出
表B关联表
1.1 内链接关联查询:
如果表A和表B有一个外键关联 ,可以通过外键进行内链接查询select dictinfo.*,dicttype.typename
from dictinfo, dicttype
where dictinfo.typecode = dicttype.typecode
--不通过外键,通过groupid查询用户类型的代码结果集,只能查询出一条记录,可以使用内链接
selectsysuser.*, dictinfo.info
from sysuser,
(select dictcode, typecode, infofrom dictinfo
where typecode =
's01') dictinfo
where sysuser.groupid = dictinfo.dictcode
小结:如果主查询表字段从关联表只查询出一条记录,这个字段就可以作为内链接关联字段
--内链接的错误的例子,通过关联查询出重复记录
--使用groupid从select dictcode, typecode, info fromdictinfo可以找到多个记录,不能使用内链接,可能会出现重复记录
selectsysuser.*
from sysuser, (select dictcode, typecode, infofrom
dictinfo) dictinfo
where sysuser.groupid = dictinfo.dictcode
注意:如果使用内链接查询出现重复记录,首先去思考是否是sql写错了,不能直接去使用distinct去除重复记录。
有一些特殊情况下还是需要使用distinct去除重复记录,比如复杂的统计分析sql。
1.2 外链接关联查询:
表A,表B中只有一部分数据和表A匹配,不能使用内链接。主查询是表A,只能使用外链接。
--查询用户所属单位,sysid对应三张表的id
selectsysuser.*,useryy.mcfrom sysuser
leftjoin useryyon sysuser.sysid =useryy.id
select *from useryy
rightjoin sysuseron sysuser.sysid =useryy.id
--以上的需要不能使用内链接
selectsysuser.*,useryy.mcfrom sysuser,useryywhere sysuser.sysid
= useryy.id
小结:
表A中从表B中只能关联查询一部分数据,只能使用外链接
1.3 子查询
selectsysuser.*,(select * from useryywhereid = sysuser.sysid)
from sysuser
子查询只能返回一列,否则:报值过多
子查询只允许返回一行,否则:返回一行对应多行
正确的sql:
--子查询
--根据sysid取出单位名称
--根据groupid查询用户类型代码对应的名称
selectsysuser.*,
(select mcfrom useryy
whereid = sysuser.sysid)sysmc,
(select infofrom dictinfo
where dictcode = sysuser.groupidand typecode =
's01')groupname
from sysuser
1.4 嵌套表
可以将一个sql查询结果组成一个虚表,查询方式和查询一个实体表相同的。组成的虚拟表字段是不允许重复的,否则:未明确定义列
相关文章推荐
- 链接多个sql服务器, 完成跨服务器的sql联接查询
- 用sql-server进行分布式查询(链接服务器)(转)
- sql语句查询表的字段类型长度和表说明
- 关于SQL链接查询的几种方式
- sql的多表链接查询中
- 获取oracle中某一用户某一表空间下的表、列注释说明的SQL查询语句
- Linq to SQL实现链接加条件查询
- [代码]有链接表的LINQ查询(LINQ to SQL)
- 用sql 查询分析器查询表的字段类型长度和表说明(备注)
- SQL分布式查询链接方式
- 使用sql-server进行分布式查询(链接服务器)
- 分布式查询之链接服务器-SQL Server/Access
- T-SQL查询语句(二):嵌套查询
- T-SQL中的子查询,一步步详细说明
- 一个sql提问,引起的研究。关于union all 中,嵌套查询和直接查询的效率比较。
- T-SQL查询语句(二):嵌套查询
- SQL 查询合计方法及相应函数使用说明
- SQL2005 查询表字段信息(是否标示列 字段名 主键 字段类型 长度 小数位 允许空 默认值 说明)
- Informix数据表结构分析资料整理之字段类型说明和查询SQL语句
- 利用SQL语句查询出指定表的所有扩展属性(列说明)