首页 > 代码库 > sql查询学习和实践点滴积累
sql查询学习和实践点滴积累
SQL是关系数据库中非常基础同时也是非常重要的知识,虽然比如类似Laravel的后端开发类库提供了ORM抽象数据类封装掉了一部分简单的sql查询,因此很多时候我们无需关系sql的具体细节,便能非常快速地开发出自己的后端应用来,但是一旦涉及到相对比较复杂的关系时我们还是不得不再去求助于sql。本博作为鸡年新年刚过,起个开端,不断记录积累本人在sql学习中觉得重要的点点滴滴,学习资源,备忘的同时,也希望给有缘人以帮助
SQL Subselect and correlated subquery
subquery就是一个被潜入另外一个SQL语句中括号内的select statement.在大多数情况下,我们可以非常轻松地以JOIN语句来完全实现一个子select语句的功能(或者相反)。但是很多时候,和join方法相比,subquery来得更加通俗易懂,符合逻辑。比如像IN, ANY这些关键字的使用就往往使得语句更易理解和容易被分解。作为一个例子,我们来看下面问题的query语句:
" 列出所有在NJ州的客人名单"
select Name from Customers where CustomerID = ANY ( select CustomerID from AddressBook where state = ‘NJ‘)
在这个例子中,括号中的黑体部分就是一个subquery.
这个subquery被我们称做"Non-correlated" subquery,原因是你可以单独执行这条select语句来得到一个合乎逻辑的正确的结果集.在这个例子中,隔离的subquery可以产生一个来自NJ州的客户名单列表。
然而,相对于这种Non-correlated就有一种Correlated subquery,这种子查询包含着outer query的value的引用,因此无法脱离outer query而单独执行
我们举一个典型的查询例子:
select * from t1 where column1 = ANY ( SELECT column1 from t2 where t2.column2 = t1.column2)
注意在这个例子中,t1表虽然并未在subquery的from clause所指出但是却被subquery中的where clause所引用,t1表只存在于outer query语句中,如果你直接执行这个隔离的subquery,你将由于无法找到t1表而出错。
sql查询学习和实践点滴积累