数据库子查询/链接/多表删除/多表更新:

子查询:mysql

子查询是指出如今其余sql语句内的select子句。sql

select * from t1 where col1=(select col2 from t2);函数

select * from t1  称外层查询spa

select col2 from t2 称为子查询blog

子查询指嵌套在查询内部,且必须始终出如今圆括号内。it

子查询能够包含多个关键字或条件:distinct、group by、order by 、limit等。table

子查询能够返回标量、一行、一列、或子查询。class

 

使用比较运算符的子查询:date

AVG:是聚合函数select

select avg(goods_priece) from tdb_goods;

select round(avg(goods_priece) ,2) from tdb_goods;

select goods_id,gods_name,goods_price from tdb_goods where goods_price>=5636.36;

合并:

select goods_id,gods_name,goods_price from tdb_goods where goods_price>=(select round(avg(goods_priece) ,2) from tdb_goods);

select goods_price from tdb_goods where  goods_cate='超级本';

用any、some、all修饰的比较运算符:

any、some:符合其中的一个就行

all:符合里面的所有

 

由not in /exists引起的子查询:

=any  与 in等效

!=all 与 not in等效

若是子查询返回任何行,exists将返回true,不然为false。(用得较少)

 

 

tdb_goods_cates 分类表

select goods_cate from tdb_goods group by goods_cate;//商品表分了7类

insert...select 将查询结果写入数据表

insert tdb_goods_cates(cate_name) select good_cate from tdb_goods group by goods_cate;

 

多表的更新(重点):

inner join 内链接

left join    左链接

right join  右链接

update tdb_goods  inner join tdb_goods_cates on goods_cate =cate_name set goods_cate=cate_id;

 

建立数据表同时将查询结果写入到数据表

select brand_name from tdb_goods group by brand_name;

select brand_name from tdb_goods group by brand_name;

 

update tdb_goods g inner join tdb_goods_brands b on g.brand_name =b.brand_name set brand_name =brand_id set g.brand_name =b.brand_id;

 

alter table tdb_goods change goods_cate cate_id smallint unsigned not null,

                                  change brand_name brand_id smallint unsigned not null;

 

链接的语法结构:

内链接(在mysql中,inner join、cross join、join是等价的):

left 【outer】join:左外链接

right 【outer】join:右外链接

使用on关键字来设定链接条件,也能够使用where来代替

一般使用on关键字来设定链接条件,使用where关键字来进行结果集记录的过滤。

 

内链接:(显示2张表公共的部分)--用得比较多一些

 

select goods_id,goods_name,cate_name from tdb_goods inner join tdb_goods_cates on tdb_goods.cate_id=tdb_goods_cates.cate_id;

 

外链接:

 

多表链接(重点):

select goods_id,goods_name,cate_name,brand_name,goods_price from tdb_goods g

           inner join tdb_goods_cates c on g.cate_id =c.cate_id

           inner join  tdb_goods_brands b on g.brand_id=b.brand_id;