zoukankan      html  css  js  c++  java
  • mysql 子查询 联结 组合查询

    子查询

    SELECT cust_id FROM orders WHERE order_num IN (SELECT order_num FROM orderitems WHERE prod_id='TN2');
    

    联结

    在一条select语句中关联表。

    1. 等值联结(内部联结)
      基于两个表之间的相等测试。
    # 首先列出表,然后定义表之间的关系
    # 需求: 查询供应商供应的商品名与商品价格
    # 方式一
    SELECT vend_name, prod_name, prod_price 
    FROM vendors, products 
    WHERE vendors.vend_id = products.vend_id 
    ORDER BY vend_name, prod_name;
    
    # 方式二 (推荐)
    SELECT vend_name, prod_name, prod_price
    FROM vendors INNER JOIN products
    ON vendors.vend_id = products.id
    ORDER BY vend_name, prod_name;
    
    1. 自联结
      在一条SELECT语句中多次引用同一个表,通过起别名方式实现
    # 需求:查询表products中'wahaha'的供应商,供应的其商品
    SELECT p1.prod_id, p1.prod_name
    FROM products AS p1, products AS p2
    WHERE p1.vend_id = p2.vend_id AND p2.prod_id = 'wahaha';
    
    1. 外部联结
      联结包含了在相关表中没有关联行的行,称为外联结。
      比如,列出检索客户下了多少订单,也把没下订单的客户检索出来
    SELECT customers.cust_id, orders.order_num 
    FROM customers LEFT OUTER JOIN orders
    ON customers.cust_id = orders.cust_id
    
    

    必须使用LEFT或RIGHT指定 包括所有行的表,LEFT指定的是OUT JOIN左边的表,RIGHT指定的是OUT JOIN右边的表,在上面的例子中,指定的是customers表

    带有聚集函数的联结

    # 检索所有客户及其所下的订单数
    SELECT customers.cust_name, customers.cust_id, COUNT(orders.order_num) AS num_ord
    FROM customers INNER JOIN orders
    ON customers.cust_id = orders.cust_id
    GROUP BY customers.cust_id
    

    mysql 主键从1开始递增,且外键存在

    1.取消外键约束 SET foreign_key_checks = 0
    2.使用truncate清空全部数据主键自增长是从1开始 truncate table "表名字"
    3.启动外键约束 SET foreign_key_checks = 1

    组合查询

    多数SQL查询只包含从一个或多个表中返回数据的单条SELECT语句,MYSQL也允许执行多个select语句查询,并将结果作为单个结果集返回,称为并(UNION)或复合查询

  • 相关阅读:
    移动桌面文件
    软件项目经理素质能力的必备要求
    如何管理时间
    《明日歌》
    浏览网页出现iexplore.exe应用程序错误为:"0x03e620b0"指令引用的"0x00000000"内存.该内存不能为"read"?
    css网站布局学习笔记
    因为爱,人生除了理智,还有情感!
    35岁之前成功的12条黄金法则
    VS2005中没有DataGrid控件的解决方案
    先装VS2005再装IIS,出现访问IIS元数据库失败解决方案
  • 原文地址:https://www.cnblogs.com/qev211/p/14442175.html
Copyright © 2011-2022 走看看