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)或复合查询

原文地址:https://www.cnblogs.com/qev211/p/14442175.html