如果查询需要针对两个或者更多个表,则在需要涉及到表的连接操作(join)。

0.笛卡儿积

最简单的连接方式是直接在from子句中加入两个表,并且用join操作符隔开。形式为Table1 join Table2。下面是例子:

select e.fname, e.lname, d.name
from employee e join department d;

产生108行数据,这是因为,对于单纯使用join进行的是笛卡儿积运算。对于两个表,分别由m和n个元组,进行笛卡尔积后将产生mXn个元组。但这个不是我们需要的结果,包含由很多不需要的数据。若要得到正确的结果,则需要内连接。

1.内连接

内连接根据相同属性值进行连接。只需要在上面的表中加上on和所需要相等的属性即可。

select e.fname, e.lname, d.name
from employee e join department d
on e.dept_id = d.dept_id;

结果正是想要的。其实,在join前可加inner这是默认情况。但对于良好习惯,应该加上,以指明这是什么连接,这有助于代码阅读。对于on e.dept_id = d.dept_id可以用using(dept_id)来代替。

以上结果也可以用SQL92的标准进行操作

select e.fname, e.lname, d.name
from employee e, department d
where e.dept_id = d.dept_id;

对于两种标准,选择在于自己,各有优缺点。

2.自连接

不仅在同一查询中多次包含同一个表,还可以对表自身进行连接。只需要取不同别名即可。

总结:对于连接操作方法挺好懂的,比较简单,对于连接3个以上,连接子查询,不等连接等类似。

最新文章

  1. Entity Framework 6 Recipes 2nd Edition(9-4)译->Web API 的客户端实现修改跟踪
  2. jdk顺序表笔记
  3. 基于Spring AOP的JDK动态代理和CGLIB代理
  4. clang: error: linker command failed with exit code 1 (use -v to see invocation)
  5. 大四实习准备6_android服务
  6. Android Fragment 基本介绍[转]
  7. File的文件提取的小练习
  8. Lucene初步搜索
  9. liunx下search文件内容的几种方式
  10. [Oracle Support]PeopleSoft Support中Fixes,Patches,Bundles,Packs?
  11. C++运算符重载(10)
  12. 有关数据传输GET和POST的方法的区别
  13. 认识 Less
  14. Oracle学习笔记三
  15. for循环将字典添加到列表中出现覆盖前面数据的问题
  16. 强化学习策略梯度方法之: REINFORCE 算法(从原理到代码实现)
  17. android websocket
  18. tar命令的实用详解(C参数和排除文件 --exclude)
  19. eclipse开发mapreduce程序时出现的问题
  20. Explaining Delegates in C# - Part 7 (Asynchronous Callback - Way 4)

热门文章

  1. 20155328 《Java程序设计》 实验二(Java面向对象程序设计) 实验报告
  2. Entity Framework中执行Sql语句
  3. Karma与TSLint
  4. phpcms 的模板更换
  5. OpenCL入门:(一:Intel核心显卡OpenCL环境搭建)
  6. 「日常训练」Jongmah(Codeforces-1110D)
  7. linux信号处理相关知识
  8. Jmeter——分布式并发
  9. Unity学习笔记(1)
  10. nginx main函数