MySQL数据库高级查询语句

1.子查询: 一个查询语句中嵌套另一个查询
例如:–查询金额超过平均值的订单
select * from orders where amt>(select avg(atm) from orders)
–查询所有名字以D开头的所有用户下的订单
select * from orders where cust_id in (select distinct(cust_id) from customer
where cust_name like ‘D%’);

  1. 联合查询
    1)什么是联合查询:也叫连接查询,将多个表中的
    数据进行连接,得到一个查询结果集
    2)什么情况下使用联合查询:当从一个表无法查询
    到所有想要的数据时,使用联合查询
    前提:联合的表之间一定要有逻辑上的关联性

SELECT a.order_id, a.amt,
b.cust_name, b.tel_no
FROM orders a, customer b
WHERE a.cust_id = b.cust_id;

3)笛卡尔积(联合查询的理论依据)

  • 什么是笛卡尔积:两个集合的乘积,产生一个
    新的集合。表示两个集合所有的可能的组合情况
  • 笛卡尔积和关系:笛卡尔积中,去掉没有意义
    或不存在的组合,就是关系(规范的二维表)

4)连接查询

  • 内连接(INNER Join):没有关联到的数据不显示
    示例:查询订单编号、金额、客户名称、客户电话
    – 方式一:where进行条件关联
    SELECT a.order_id, a.amt,
    b.cust_name, b.tel_no
    FROM orders a, customer b
    WHERE a.cust_id = b.cust_id;

– 方式二:利用Inner join关键字
SELECT a.order_id, a.amt,
b.cust_name, b.tel_no
FROM orders a INNER JOIN customer b
ON a.cust_id = b.cust_id;

  • 外连接(OUTER Join):没有关联到的数据也要
    显示到结果集
    左连接:以左边为基准,右表的数据进行关联
    左表数据全部显示,右表中的字段
    如果没有关联到,则显示NULL
    LEFT JOIN 实现
    SELECT a.order_id, a.amt,
    b.cust_name, b.tel_no
    FROM orders a LEFT JOIN customer b
    ON a.cust_id = b.cust_id;

右连接:以右边为基准,左表的数据进行关联
右表数据全部显示,左表中的字段
如果没有关联到,则显示NULL
right JOIN 实现
SELECT a.order_id, a.amt,
b.cust_name, b.tel_no
FROM orders a right JOIN customer b
ON a.cust_id = b.cust_id
注意:内连接的特点是没有关联到的数据不显示
外连接分为左连接和右连接,左连接指以左表作为基准,右表进行关联,
左表数据全部显示,右表中的字段如果没有关联到则显示为NULL;
右连接指以右表作为基准,左表进行关联,右表数据全部显示,左表中的字段如 果没有关 联到则显示为NULL

你可能感兴趣的:(MySQL数据库高级查询语句)