1. 子查询
嵌套在查询内部,且在圆括号内。
子查询可以包含多个关键字或条件,如 DISTINCT, GROUP BY, ORDER BY, LIMIT 等。
子查询的外层语句可以是:SELECT, INSERT, UPDATE, SET 或 DO
1.1 比较运算符引发的子查询
例如,平均值:mysql> SELECT AVG(goods_price) FROM tdb_goods;
四舍五入保留两位小数:mysql> SELECT ROUND(AVG(goods_price),2) FROM tdb_goods;
mysql> SELECT goods_id, goods_name, goods_price FROM tdb_goods WHERE goods_price >= (SELECT ROUND(AVG(goods_price),2) FROM tdb_goods);
子查询返回多个结果时,可以用ANY, SOME 或 ALL 在前面修饰:
[NOT]IN 引发的子查询:
[NOT]EXISTS 用的比较少
先看下表的结构:DESC tdb_goods_cates;
这种方法也能查看表的结构。
mysql> INSERT tdb_goods_cates (cate_name) SELECT goods_cate FROM tdb_goods GROUP BY goods_cate;
查看结果:
2. 连接
使用关键字 ON 设定连接条件,也可用 WHERE 替代。通常用 ON 关键字设定链接条件,用 WHERE 关键字过滤结果。
连接类型有3种:内连接、左外连接和右外链接。
2.1 内连接
内连接 INNER JOIN,显示左表和右表都符合的条件,相当于数学中的交集,如下所示:
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;
更新前:
更新后效果(这里只截取一个,其他类似):
这样可以有效减少所占空间。
2.2 左外连接
左外连接 LEFT [OUTER] JOIN,显示左表的全部和右表中符合连接条件的记录,如下所示:
2.3 右外连接
有外链接 RIGHT [OUTER] JOIN,跟左外连接相反,即显示右表的全部和左表中符合连接条件的记录,如下所示:
慕课网 MySQL 学习笔记