• MySQL教程(十三)—— 子查询


    1  准备工作

    建立数据库,按照附件中的指令,先建立表,再插入数据:

    更改编码:

    (以显示gbk编码格式,只能生效一次)

    查询数据:

    (‘G’是按照表格的形式输出)

    2  子查询(Subquery)概念

    2.1  子查询

    定义:子查询是指在另一个查询语句中的SELECT子句。

    1 SELECT * FROM t1 WHERE column1 = (SELECT column1 FROM t2);

    备注:

    1. SELECT * FROM t1 ...称为Outer Query[外查询](或者Outer Statement)。
    2. SELECT column1 FROM t2 称为Sub Query[子查询]。
    3. 子查询是嵌套在外查询内部。
    4. 事实上它有可能在子查询内部再嵌套子查询。
    5. 子查询必须出现在圆括号内。
    6. 子查询可以包含多个关键字或条件,如DISTINCT、GROUP BY、ORDER BY、LIMIT、函数等。
    7. 子查询的外层查询可以是:SELECT、INSERT、UPDATE、SET或DO。
    8. 子查询返回结果可以是标量、一行、一列或子查询。

    2.2  行级子查询

    1 SELECT * FROM t1 WHERE (col1,col2) = (SELECT col3, col4 FROM t2 WHERE id = 10);
    2 SELECT * FROM t1 WHERE ROW(col1,col2) = (SELECT col3, col4 FROM t2 WHERE id = 10);

    备注:

    1. 行级子查询的返回结果最多为一行。
    2. 优化子查询。

    3  使用比较运算符的子查询

    比较运算符:=、<、>、<=、>=、<>、!=、<=>等。

    语法结构:operand comparison_operator subquery

    (求所有商品的平均价格,AVG为聚合函数(MAX、MIN、COUNT、SUM))

    (同上,但是只保留两位小数)

    (查询所有价格大于平均价格的商品,并且按价格降序排序,但是平均价格是一个数)

    (与上述功能相同,但是将上面两条语句联合起来,组合成一条子查询语句)

    (查询类型为“超级本”的商品价格)

    (使用子查询语句,查询价格大于或等于"超级本"价格的商品,并且按价格降序排列)

    注意:如果子查询在返回多个结果时,可以使用ANY、SOME、ALL来做修饰。ANY=SOME,指只要符合其中的一个就行,而ALL要符合全部。如上例,若不加ANY则会出现错误。

    4  使用[ NOT ] IN 的子查询

    4.1  使用[ NOT ] IN 的子查询

    语法结构:

    • operand comparison_operator [ NOT ] IN (subquery)
    • IN 与 = ANY 等效,注意是与“=ANY”等效。
    • != ALL或<>ALL运算符与NOT IN等效。

    (与上述例子相同,只不过用IN代替=ANY)

    4.2  使用[ NOT ] EXISTS 的子查询

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

    5  使用INSERT...SELECT插入记录

    (创建一张商品分类表,注意与普通表的不同)

    (查看机型的分类)

    (将分组结果写入到tdb_goods_cates数据表)

    (查看商品分类表)

    6  多表更新

    作用:参照另外的表,来更新本表内的数据。

    1 UPDATE table_references
    2 SET col_name1={expr1 | DEFAULT}
    3 [,col_name2={expr2 | DEFAULT}]...
    4 [WHERE where_condition]

    语法结构:

    1 table_references
    2 {[INNER | CROSS]JOIN | {LEFT | RIGHT} [OUTER] JOIN}
    3 table_reference
    4 ON conditional_expr

    连接类型:

    • INNER JOIN,内连接
    • 在MySQL中,JOIN,CROSS JOIN和INNER JOIN是等价的。
    • LEFT [OUTER] JOIN,左外连接
    • RIGHT [OUTER] JOIN,右外连接

    (通过tdb_goods_cates数据表来更新tdb_goods表)

    (更新后查看,确实被更改)

    7  多表更新之一步到位

    CREATE...SELECT语句:

    1 //创建表的同时,将查询结果写入到数据表中
    2 CREATE TABLE [IF NOT EXISTS] tbl_name
    3 [(create_definition,...)]
    4 select_statement

    (查看品牌的分类)

    (通过CREATE...SELECT来创建数据表并且同时写入记录)

    (查看新表数据)

    (按照正常语法,会提示错误,说是字段模糊,这种情况下只能给表起别名)

    (利用AS语句给表起别名)

    (查看表结构)

    (通过ALTER TABLE语句修改数据表结构)

    (再次查看表结构,发现数据类型以改变)

    (分别在tdb_goods_cates和tdb_goods_brands表插入记录)

    (在tdb_goods数据表写入任意记录)

  • 相关阅读:
    深度学习网络调试技巧
    深度学习网络调参技巧
    用深度学习解决大规模文本分类问题
    [译] 理解 LSTM 网络
    一文学会用 Tensorflow 搭建神经网络
    tensorflow实现基于LSTM的文本分类方法
    用keras实现lstm 利用Keras下的LSTM进行情感分析
    TensorFlow练习7: 基于RNN生成古诗词
    【深度学习】文本生成
    Leetcode--easy系列5
  • 原文地址:https://www.cnblogs.com/qijunhui/p/8454347.html
Copyright © 2020-2023  润新知