zoukankan      html  css  js  c++  java
  • 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数据表写入任意记录)

  • 相关阅读:
    How to function call using 'this' inside forEach loop
    jquery.validate.unobtrusive not working with dynamic injected elements
    Difference between jQuery.extend and jQuery.fn.extend?
    Methods, Computed, and Watchers in Vue.js
    Caution using watchers for objects in Vue
    How to Watch Deep Data Structures in Vue (Arrays and Objects)
    Page: DOMContentLoaded, load, beforeunload, unload
    linux bridge
    linux bridge
    EVE-NG网卡桥接
  • 原文地址:https://www.cnblogs.com/qijunhui/p/8454347.html
Copyright © 2011-2022 走看看