4.mysql子查询和链接,多表的删除和查询

                                                              4.子查询和链接,多表的删除和查询


1. SET NAMES gbk;设置客户端的格式,不会影响表中的格式;
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)

*/
 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 关键字进行结果集记录的过滤
 内连接:返回左表及右表符合连接条件的记录(即两表的交集部分)
*/

你可能感兴趣的:(Mysql)