MySQL进阶(二)——子查询

子查询


子查询Subquery)是指出现在其他SQL语句内的SELECT子句。

       例如:

              SELECT * FROM t1 WHERE col1=(SELECT col2 FROM t2);

              其中,SELECT * FROM t1,称为Outer Query/Outer Statement

                         SELECT col2 FROM t2,称为SubQuery

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

            子查询可以包含多个关键字或条件,如DISTINCTGROUP BYORDER BYLIMIT,函数等。

            子查询的外层查询可以是:SELECT,INSERT,UPDATE,SETDO

            子查询可以返回标量、一行、一列或子查询。


使用比较运算符的子查询

       =<>>=<=<>!=<=>

      语法结构

             operand comparison_operator subquery

      例子:

            SELECT goods_id,goods_name,goods_price FROM goods WHERE goods_price >= (SELECT ROUND(AVG(goods_price),2) FROM goods);

       用ANYSOMEALL修饰比较运算符

             operand comparison_operator ANY (subquery)

             operand comparison_operator SOME (subquery)

             operand comparison_operator ALL (subquery)

 

        如果子查询返回多个结果,需要使用上面三个关键字。

        例子:

               SELECT goods_id,goods_name,goods_price FROM tdb_goods WHERE goods_price > ANY (SELECT goods_price FROM tdb_goods WHERE goods_cate=’超极本’);

 

使用[NOT] IN 的子查询

       语法结构

       operand comparison_operator [NOT] IN (subquery)

             =ANY 运算符与IN等效

             !=ALL<>ALL运算符与NOT IN 等效

        例子:

               SELECT goods_id,goods_name,goods_price FROM tdb_goods WHERE goods_price IN  (SELECT goods_price FROM tdb_goods WHERE goods_cate=’超极本’);

 

使用[NOT] EXISTS的子查询

        如果子查询返回任何行,EXISTS将返回TRUE;否则为FALSE


INSERT...SELECT

        将查询结果写入数据表

        INSERT [INTO] tbl_name [(col_name,...)] SELECT ...

        例子:

              CREATE TABLE IF NOT EXISTS goods_cates(

                      cate_id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,

                      cate_name VARCHAR(40)

              );

              INSERT goods_cates(cate_name) SELECT goods_cate FROM goods GROUP BY good_cate;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值