上篇文章总结的select语句基本应用,非常简单(给自己的暗示)。现在总结下select语句的复杂应用(连接查询和嵌套查询),这个相对前面简单系数稍微低一些,所有用形容词“较简单”。
select的简单应用大部分都是针对当个表的处理,只有INTO和UNION子句涉及到两个表。可能是因为DBA发现对两个或两个以上的处理时单单这两个语句不够用法,所以向上司反应在select基本应用的基础上有添加新的功能。这便有了select语句的复杂应用,复杂应用重点是对两个或两个以上的表的数据进行处理。
复杂应用中包括连接查询和嵌套查询。
1、连接查询:更具两个表的连接逻辑关系可以分为—内、外、交叉。
(1)内连接: (默认连接)
表达式:数据表1 inter join 数据表2 on 连接表达式
例如:select * from SellCard_info
inter join
ExitCard_info
on CellCrad_info.cardID = ExitCard_info.cardID 号记录。
解释:上面select语句便从售卡表 和 退卡表中找 出相同卡
(2)外连接:更具查询的侧重方向,分为左、右、 完整。
<1>左向外连接:
表达式:把内连接的 inter 改为left。
例如:select * from SellCard_info
left join
ExitCard_info
on CellCrad_info.cardID = ExitCard_info.cardID
解释:结果集中的内容
a、两个表的所有属性(列)
b、左表(售卡表)的所有记录
c、右表(退卡表)中卡号与售卡表相同的记录。
d、右表(退卡表)区域 可能会有Nul
ps:说道左向外连接让我想到数据库原理第四章关系代数中的左外连
接。不过必看一字之差(向),效果是截然 不同的。
a、所在模型不同。
左外连接是对关系模式中数据的操纵属于逻辑模型阶段;
左向外连接是对数据库模式中的数据进行操纵属于物理模型
阶段。
b、返回的结果集不同。
左外连接 消去相同属性(列)
左向外连接 返回所有属性 (列)
<2>右向外连接
跟左相反
<3>完整外连接
左右的结合。
现象:左右表的区域都有可能有Null.
(3)交叉连接
个人理解 :返回两个表笛卡儿积。
例如:假设 售卡表有3条记录、退卡表有4条记录
执行代码 select * from SellCard_info
cross join
ExitCard_info
返回 12条记录。
ps: 和数据库原理中迪卡儿积运算效果相同。
总结:连接查询肯定是两个表的连接,
2、嵌套查询:
嵌套查询就是两个select查询语句,子查询的查询结果作为主查询的
查询条件。只要灵活运用select语句的基本操作,嵌套查询没有问题。
嵌套查询按照分类的依据不同可以分为 单值和多值、存在和不存在。
单值:主要运用一些运算法——< > = <= >= <>
多值:all 加运算符
存在:Exists
不存在: not Exists
总结:嵌套查询对表的数量没有限制,但是最少是两个select语句
全文总结:高级应用是在基本应用的基础上扩展过来的,而且它们的语法都是通的,在用的时候要灵活,要学会举一反三。会用select以后其实update、insert、delete 也就会了。