一、子查询(Subquery)是指出现在其他SQL语句内的select子句
例:select * from t1 where col1 =(selectcol2 from t2);其中select * from t1,称为Quter Query/Outer Statement,select col2 fromt2 ,称为SubQuery。
子查询指:嵌套在查询内部,且必须始终出现在圆括号内。
子查询可以包含多个关键字或条件,
如DISTINCT,group by,orderby,limit,函数等。
子查询的外层查询可以是:select,insert,update,set或do
子查询可以返回标量、一行、一列或子查询
使用比较运算符的子查询
=,>, <,>=, <=, <>, !=, <=>
语法结构
Operand comparison_operatorsubquery
当子查询出的结果为多个时,可以通过any,some,all来修饰比较符。Any为满足任意一个,some为满足某些,all为全满足
Operand comparison_operator{any | some | all}subquery
使用[not] in的子查询
Operand comparison_operator[not] in (subquery)
= Any运算符与In等效。
!= ALL或 <> ALL运符与not In等效。
使用[not] exists的子查询
如果子查询返回任何行,exists将返回true;否则为false。
将查询结果写入数据表
Insert [into]表名 [列名]select …
例:insert tdb_goods_cates(cate_name) select goods_cate fromtdb_goods group by goods_cate;
二、多表更新
Update table_references
Set列名= {expr1 | default} [,…]
[where where_condition]
Table_reference
{[inner | cross] join | {left | right} [outer] join}
Table_reference
On conditional_expr
tdb_goods
例:将表tdb_goods与tdb_goods_cates中的goods_cate和cate_name相同的项链接起来,将表中tdb_goods_cates的cate_id的值赋给tdb_goods中的goods_cate
updatetdb_goods inner join tdb_goods_cates on goods_cate = cate_name
set goods_cate =cate_id;
三、创建数据表并将查询结果写入到数据表
Create table [if not exists] tbl_name [(create_definition…)]
Select_statement
例:
create tabletdb_goods_brands(
brand_id smallint unsigned primary key auto_increment,
brand_namevarchar(40) not null
)
selectbrand_name from tdb_goods group by brand_name;
四、连接
MySQL在select语句、多表更新、多表删除语句中支持join操作
Table_reference
{[inner | cross] join | {left | right} [outer] join}
Table_reference
On conditional_expr
连接方式inner join内连接,在MySQL中join,cross join和innerjoin是等价的
Left [outer] join左外连接 right [outer] join右外连接
内连接:显示两个表中共有的部分
左连接:显示左表中全部和与右表中共有的。
右连接:显示右表的全部和与左表中共有的。
五、无限级分类表
Type_id type_name parent_id;
通过自身连接实现