您的位置:首页 > 数据库 > MySQL

MySQL 子查询和连接

2015-07-17 13:52 585 查看

1. 子查询

嵌套在查询内部,且在圆括号内。

子查询可以包含多个关键字或条件,如 DISTINCT, GROUP BY, ORDER BY, LIMIT 等。

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

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

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



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



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



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



[NOT]IN 引发的子查询:

[NOT]EXISTS 用的比较少

先看下表的结构:DESC tdb_goods_cates;




这种方法也能查看表的结构。

[code]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 是等价的。

例如:

[code]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 学习笔记
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: