关于sql的链接查询
2009-10-30 15:30
316 查看
首先给出两张测试表
a(aid int, adata varchar(20)) b(bid int, bdata varchar(20))
1.join 与 inner join
执行如下语句:
select * from a join b on a.aid = b.bid;
我们会得到如下的结果:
AID ADATA BID BDATA
---------- ---------------------------------------- ---------- ----------------------------------------
1 a1 1 b1
2 a2 2 b2
我们在执行:select * from a inner join b on a.aid = b.bid;
这时会发现执行的结果和上面一样,于是我在这里认为,单写一个join的语句,默认使用inner形式连接查询。这时我也会想到用标准的多表查询去实现,如:select * from a, b where a.aid = b.bid。
上面这些都是在oracle和mysql中测试过的,当然下面所提到的也会做同样的测试。
2.left join 与 left outer join
执行如下语句:
select * from a left join b on a.aid = b.bid;
得到的结果如下:
AID ADATA BID BDATA
---------- ---------------------------------------- ---------- ----------------------------------------
1 a1 1 b1
2 a2 2 b2
3 a3
我们在执行:select * from a left outer join b on a.aid = b.bid;
会发现得到了和不加outer关键字同样的结果。于是认为left outer join简写为left join。
可以尝试一下把上面的outer变成inner。可一执行,就会发现,你的语法错误,oracle,和mysql都会提示你。对应这两张表,情况确实会这样。
3. right join 与 right outer join
right join的情况类似,如执行:select * from a right join b on a.aid = b.bid; 结果如下
AID ADATA BID BDATA
---------- ---------------------------------------- ---------- ----------------------------------------
1 a1 1 b1
2 a2 2 b2
4 b4
而且也默认为right outer join 的简写是 right join
总结:1)inner jion 是内联接,会返回同时符合条件的两个表的记录。
2)outer join 是外连接,会返回left(right后面表)前面表的所有记录,若(前面)后面表没有符合的相应记录,则显示为NULL。
a(aid int, adata varchar(20)) b(bid int, bdata varchar(20))
1.join 与 inner join
执行如下语句:
select * from a join b on a.aid = b.bid;
我们会得到如下的结果:
AID ADATA BID BDATA
---------- ---------------------------------------- ---------- ----------------------------------------
1 a1 1 b1
2 a2 2 b2
我们在执行:select * from a inner join b on a.aid = b.bid;
这时会发现执行的结果和上面一样,于是我在这里认为,单写一个join的语句,默认使用inner形式连接查询。这时我也会想到用标准的多表查询去实现,如:select * from a, b where a.aid = b.bid。
上面这些都是在oracle和mysql中测试过的,当然下面所提到的也会做同样的测试。
2.left join 与 left outer join
执行如下语句:
select * from a left join b on a.aid = b.bid;
得到的结果如下:
AID ADATA BID BDATA
---------- ---------------------------------------- ---------- ----------------------------------------
1 a1 1 b1
2 a2 2 b2
3 a3
我们在执行:select * from a left outer join b on a.aid = b.bid;
会发现得到了和不加outer关键字同样的结果。于是认为left outer join简写为left join。
可以尝试一下把上面的outer变成inner。可一执行,就会发现,你的语法错误,oracle,和mysql都会提示你。对应这两张表,情况确实会这样。
3. right join 与 right outer join
right join的情况类似,如执行:select * from a right join b on a.aid = b.bid; 结果如下
AID ADATA BID BDATA
---------- ---------------------------------------- ---------- ----------------------------------------
1 a1 1 b1
2 a2 2 b2
4 b4
而且也默认为right outer join 的简写是 right join
总结:1)inner jion 是内联接,会返回同时符合条件的两个表的记录。
2)outer join 是外连接,会返回left(right后面表)前面表的所有记录,若(前面)后面表没有符合的相应记录,则显示为NULL。
相关文章推荐
- 关于SQL链接查询的几种方式
- 关于SQL链接查询的几种方式
- 关于SQL链接查询的几种方式
- 一道关于比赛胜负的Sql查询题目
- 关于SQL时间类型的模糊查询
- 关于SQL的左右连接查询
- 动态SQL— —模糊查询语句(存储过程)中关于百分号%的处理
- 关于postgres一条sql语句中子查询的返回值不止一个,且拼接成相关规则的字符串
- 关于int型数据的SQL模糊查询猜想
- 关于SQL 分页的查询
- 关于CTASI中的SQL查询
- 关于日期条件查询的sql 代码
- ORACLE关于锁表查询的部分SQL
- pl/sql developer遇到关于查询显示的问题
- 关于mybatis中批量插入和批量查询的sql语句查询
- 关于linq to sql调用存储过程,出现"无法枚举查询结果多次"的问题
- sql链接查询
- mybatis 动态sql里面关于时间区间查询的表示方式
- 子查询返回的值不止一个。当子查询跟随在 =、!=、<、<=、>、>= 之后,关于触发器SQL语句,完美解决
- 关于同时查询父子名称的SQL查询语句的写法 id name parentId parentName