2.子查询可分为三类:子查询是指出现在查询内部的查询
子查询的外层可以是: select insert update set 等
子查询返回结果: 可以是标量,一行,一列,子查询
(1)由比较运算符引发的子查询:=、>、<、>=、<=、!=、<=>
/*语法结构:operand comparison_operator subquery
当父语句使用比较运算符作为条件语句,且子查询的结果多余一条时,需要使用 ANY、SOME 或 ALL来修饰父语句的比较运算符
语法结构:
operand comparison_operator ANY (subquery)
operand comparison_operator SOME (subquery)
operand comparison_operator ALL (subquery)
![4.mysql子查询和链接,多表的删除和查询 - 眷恋天空的驴 - Web---我要做一个好孩子,从明天起。 4.mysql子查询和链接,多表的删除和查询 - 眷恋天空的驴 - Web---我要做一个好孩子,从明天起。](http://img2.ph.126.net/MvFtRbIbN8Zy8XIsqzozHA==/6630910535536433930.png)
Eg:
SELECT * FROM table_name WHERE column_name > {ANY|SOME|ALL} (SELECT column_name2 FROM table_name2 WHERE where_condition);
第一个子查询例子:
SELECT goods_id,goods_name,goods_price FROM tdb_goods WHERE goods_price>=(SELECT ROUND(AVG(goods_price),2) FROM tdb_goods);
/*
2.使用 [NOT] IN 的子查询
语法结构:operand comparison_operator [NOT] IN (subquery)
= ANY 运算符等价于 IN
!= ALL 或 <> ALL 等价于 NOT IN
3.使用 [NOT] EXISTS 的子查询(较少用)
若子查询返回任何行,EXISTS 将返回 TRUE,否则返回 FALSE;
*/
INSERT ... SET ...可以使用子查询
INSERT [INTO] tbl_name [(col_name,...)] SELECT ...将查询结果写入数据表
Eg:
INSERT INTO table_name [(column_name)] SELECT column_name2 FROM table_name2 GROUP BY column_name3;
UPDATE tb_name(更新表名) INNER JOIN(内连接) td_name(连接表名) ON (连接条件) SET 赋值/更新内容
多表更新:UPDATA table_references SET column_name1 = {expr|DEFAULT} [,column_name2 = {expr|DEFAULT}] ... [WHERE where_condition];
/**
table_references:表的参照关系
语法结构:
table_name {[INNER|CROSS] JOIN | {LEFT|RIGHT} [OUTER] JOIN } table_name ON condition_expr
condition_expr:表的参照条件
*/
/**
连接类型:
INNER JOIN 内连接
在MySQL中, JOIN, CROSS JOIN和INNER JOIN是等价的.
LEFT [OUTER] JOIN, 左外连接
RIGHT [OUTER] JOIN, 右外连接
*/
Eg:UPDATE products INNER JOIN products_cate ON goods_cate = cate_name SET goods_cate = cate_id;
多表更新之一步到位:
创建数据表并将查询结果写入数据表:
CREATE TABLE [IF NOT EXISTS] table_name [(create_definition,...)] select_statement;
Eg:
CREATE TABLE IF NOT EXISTS products_brand(
brand_id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
brand_name VARCHAR(40) NOT NULL
)ENGINE = InnoDB AUTO_INCREMENT=24 DEFAULT CHARSET=utf8
SELECT brand_name FROM products GROUP BY brand_name;
/**
连接条件:
使用 ON 关键字来设定连接条件,也可以使用 WHERE 来代替。
通常使用 ON 关键字来设定连接条件
使用 WHERE 关键字进行结果集记录的过滤
内连接:返回左表及右表符合连接条件的记录(即两表的交集部分)
*/