sql必知必会11-使用子查询

作者: liluchang 分类: 数据库 发布时间: 2018-04-14 18:10

查询(query)

任何sql语句都是查询,但是此术语一般指select语句。

子查询(subquery)

sql还允许创建子查询(subquery),即嵌套在其它查询中的查询。先来个例子

select cust_id from orders where order_num in (
       select order_num from orderitems where prod_id = 'RGAN01');

在select语句中,子查询总是从内向外处理,在处理上面的select语句时,DBMS实际中执行了两个操作。

包含子查询的语句总是难以阅读和调试,他们在较为复杂时,更是如此。所示,把子查询语句多行并且适当缩进,能极大地简化子查询的使用。

作为子查询的select语句只能检索单个列,如果企图检索多个列,会返回错误。

来个三层的

我上面的写法并没有缩进,懒了,见谅。

能嵌套的子查询的数目并没有限制,但是为了性能考虑,我们最好不要嵌套太多层的子查询。

子查询作为计算字段

例如,我们需要查询1,查询customers中的顾客信息,2并且查出每个顾客在orders表中的凑买数量。

select cust_name,cust_state,(
     select count(*) from orders where customers.cust_id = orders.cust_id)
 as orders from customers order by cust_id;

这样就可以把orders中的数量给查询出来并且作为计算数据跟customers中的数据放在一起。

我们在上面使用了完全限定列名,即customers.cust_id这种形式。用一个句点分隔表名和列名。在有可能混淆列名时,必须使用这种语法。不然DBMS可能会查询不是你需要的表中的列。

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

标签云