美文网首页
《SQL必知必会》—— 检索2

《SQL必知必会》—— 检索2

作者: u14e | 来源:发表于2017-11-17 14:33 被阅读14次

子查询

-- 列出订购RGAN01物品的所有顾客
SELECT order_num FROM orderitems WHERE prod_id = 'RGAN01';      -- 1. 检索包含RGAN01物品的所有订单编号
SELECT cust_id FROM orders WHERE order_num IN (20007, 20008);   -- 2. 检索订单编号的所有顾客ID
SELECT cust_name FROM customers WHERE cust_id IN (1000000004, 1000000005);      -- 3. 检索所有顾客ID的顾客信息
-- 等价于
SELECT cust_name FROM customers WHERE cust_id IN (
        SELECT cust_id FROM orders WHERE order_num IN (
                SELECT order_num FROM orderitems WHERE prod_id = 'RGAN01'
        )
);
-- 等价于(联结表)
SELECT cust_name 
FROM customers, orders, orderitems 
WHERE customers.cust_id = orders.cust_id AND orders.order_num = orderitems.order_num
    AND prod_id = 'RGAN01';

-- 显示customers表中每个顾客的订单总数
SELECT cust_name, 
        cust_state, 
        (SELECT COUNT(*) FROM orders WHERE orders.cust_id = customers.cust_id) AS orders 
FROM customers;

联结表

SELECT vend_name, prod_name, prod_price 
FROM vendors, products WHERE vendors.vend_id = products.vend_id;        -- 等值联结

SELECT vend_name, prod_name, prod_price 
FROM vendors INNER JOIN products ON vendors.vend_id = products.vend_id;      -- 内联结

SELECT prod_name, vend_name, prod_price, quantity                      -- 联结多个值 
FROM products, vendors, orderitems
WHERE products.vend_id = vendors.vend_id AND products.prod_id = orderitems.prod_id
    AND order_num = 20007;  

-- 选择与'Jim Jones'同一cust_name的所有cust_contact
SELECT cust_id, cust_name, cust_contact
FROM customers
WHERE cust_name = (
    SELECT cust_name FROM customers WHERE cust_contact = 'Jim Jones'
);
-- 等价于(自联结)
SELECT c1.cust_id, c1.cust_name, c1.cust_contact
FROM customers AS c1, customers AS c2
WHERE c1.cust_name = c2.cust_name AND c2.cust_contact = 'Jim Jones';

-- 检索有订单的所有顾客(内联结)
SELECT customers.cust_id, order_num
FROM customers INNER JOIN orders ON customers.cust_id = orders.cust_id;
-- 检索包含没有订单的所有顾客(左外联结)
SELECT customers.cust_id, order_num
FROM customers LEFT OUTER JOIN orders ON customers.cust_id = orders.cust_id;
-- 外联结:包含了那些在相关表中没有关联行的行
-- LEFT OUTER JOIN 指定包含所有行的表在左边
-- RIGHT OUTER JOIN 指定包含所有行的表在右边

-- 检索所有顾客及每个顾客所下的订单(带聚集函数的联结)
SELECT customers.cust_id, cust_name, COUNT(order_num) AS num_ord
FROM customers INNER JOIN orders ON customers.cust_id = orders.cust_id
GROUP BY customers.cust_id; 

组合查询

SELECT cust_name, cust_contact, cust_email 
FROM customers WHERE cust_state IN ('IL', 'IN', 'MI')
UNION                   -- UNION ALL包含重复行
SELECT cust_name, cust_contact, cust_email
FROM customers WHERE cust_name = 'Fun4All'
ORDER BY cust_name, cust_contact;       -- 对返回的所有结果排序
-- 等价于
SELECT cust_name, cust_contact, cust_email 
FROM customers WHERE cust_state IN ('IL', 'IN', 'MI') OR cust_name = 'Fun4All'
ORDER BY cust_name, cust_contact;

相关文章

  • 《SQL必知必会》—— 检索2

    子查询 联结表 组合查询

  • SQL 学习笔记

    SQL基础 参考书籍: 《SQL必知必会》 检索数据 过滤数据 函数 分组数据 子查询 简单联结 法一: 法二: ...

  • 《SQL必知必会》—— 检索1

    普通检索 排序检索 过滤数据 通配符过滤(只能用于文本字段(字符串)) 计算字段 函数 汇总数据(不需要检索实际数...

  • SQL必知必会(检索数据)

    SELECT 查询的基础语法 创建了一个王者荣耀英雄数据表,这张表里一共有 69 个英雄,23 个属性值(不包括英...

  • SQL必知必会

    《SQL必知必会》SQL是使用 广泛的数据库语言,几乎所有重要的DBMS都支持SQL。《SQL必知必会(第4版)》...

  • 《SQL必知必会》第2课 检索数据

    2.1 SELECT 语句 关键字(keyword)作为SQL 组成部分的保留字。关键字不能用作表或列的名字。附录...

  • SQL必知必会----第四版(一)

    记录自己学习这本书的过程此篇文章包括检索、排序检索数据和过滤数据 通往其他文章的入口:SQL必知必会----第四版...

  • SQL必知必会(2)

    将之前学习的数据库知识在整理下,主要是看的《SQL必知必会》。这本书不愧是经典,入门数据库真的完全足够啦! ima...

  • 《SQL必知必会 第4版》PDF高清完整版-免费下载

    《SQL必知必会 第4版》PDF高清完整版-免费下载 《SQL必知必会 第4版》PDF高清完整版-免费下载 下载地...

  • 第二周学习总结

    本周继续学习了SQL必知必会这本书,从第2科开始,已学到第7课。本周主要学习了数据的检索和过滤。主要有如下收获: ...

网友评论

      本文标题:《SQL必知必会》—— 检索2

      本文链接:https://www.haomeiwen.com/subject/jhrjvxtx.html