MySQL 子查询和连接

来源:互联网 发布:关于网络诈骗的小品 编辑:程序博客网 时间:2024/06/08 07:47

1. 子查询

嵌套在查询内部,且在圆括号内。
子查询可以包含多个关键字或条件,如 DISTINCT, GROUP BY, ORDER BY, LIMIT 等。

子查询的外层语句可以是:SELECT, INSERT, UPDATE, SET 或 DO

1.1 比较运算符引发的子查询

例如,平均值:mysql> SELECT AVG(goods_price) FROM tdb_goods;
1

四舍五入保留两位小数:mysql> SELECT ROUND(AVG(goods_price),2) FROM tdb_goods;
2

mysql> SELECT goods_id, goods_name, goods_price FROM tdb_goods WHERE goods_price >= (SELECT ROUND(AVG(goods_price),2) FROM tdb_goods);
3

子查询返回多个结果时,可以用ANY, SOME 或 ALL 在前面修饰:
4

[NOT]IN 引发的子查询:
[NOT]EXISTS 用的比较少

先看下表的结构:DESC tdb_goods_cates;
5
这种方法也能查看表的结构。

mysql> INSERT tdb_goods_cates (cate_name) SELECT goods_cate FROM tdb_goods GROUP BY goods_cate;

查看结果:
7

2. 连接

使用关键字 ON 设定连接条件,也可用 WHERE 替代。通常用 ON 关键字设定链接条件,用 WHERE 关键字过滤结果。

连接类型有3种:内连接、左外连接和右外链接。

2.1 内连接

内连接 INNER JOIN,显示左表和右表都符合的条件,相当于数学中的交集,如下所示:
10
MySQL 中,JOIN, CROSS JOIN 和 INNER JOIN 是等价的。

例如:

mysql> UPDATE tdb_goods INNER JOIN tdb_goods_cates ON goods_cate = cate_name SET goods_cate = cate_id;

更新前:
8

更新后效果(这里只截取一个,其他类似):
9
这样可以有效减少所占空间。

2.2 左外连接

左外连接 LEFT [OUTER] JOIN,显示左表的全部和右表中符合连接条件的记录,如下所示:
11

2.3 右外连接

有外链接 RIGHT [OUTER] JOIN,跟左外连接相反,即显示右表的全部和左表中符合连接条件的记录,如下所示:
12

慕课网 MySQL 学习笔记

0 0
原创粉丝点击