• [mysql]子查询与连接


    1,子查询(Subquery)是指出现在其他 SQL 语句内的select子句

    例如:

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

    其中 select * from t1, 称为Outer Query/Outer Statement

    select col2 from t2 ,称为 SubQuery.

    2,子查询指嵌套在查询内部,并且始终出现在圆括号内

    子查询有多个关键字或条件,如 distinct , group by, order by, limit, 函数等

    子查询的外层查询可以是 : select, insert, update, set 或 do。

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

    4,由比较运算符(=,>,<,>=,<=,<>,!=,<=>)引发的子查询

    语法结构 : operand comparison_operator subquery

    子查询实例

    求所有商品的平均价格

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

    列出所有商品价格在平均价格之上的商品

    select goods_id,goods_name,goods_price from tdb_goods

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

    用 SOME(任意一个),ANY(任意一个),ALL(所有的) 修饰比较运算符

    5,由 [NOT] IN 、[NOT] EXISTS引发的查询

    = ANY运算符 与IN 等效,!=ALL或<>ALL与NOT IN 等效;

    如果子查询返回任何行,EXIST将返回TRUE,否则返回false;

    6,使用 INSERT…SELECT 插入记录(便于使用外键实现)

    在一个数据表的分类中,可能存在大量重复的数据,这时候可以奖建立两个数据表关联,提高查询效率。

    实例

    将查询结果写入数据表

    Insert tdb_goods_cates(cate_name) select goods_cate from tdb_goods group by goods_cate;

    7,多表更新

    多表的更新基本上与单表更新相似。

    连接类型

    INNER JOIN(与JOIN,CROSS JOIN等价) 内连接,

    LEFT[OUTER] JOIN 左外连接

    RIGHT[OUTER] JOIN 右外连接

    SQL语句实例

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

    8,多表更新之一步到位 – CREATE … SELECT

    SQL语句实例

    (1)

    create table tdb_goods_brands
    
    (
    
    brand_id smallint unsigned primary key auto_increment,
    
    brand_name varchar(40) not null
    
    )

    select brand_name from tdb_goods group by brand_name;

    (2) 当两个表的字段名相同时,可以为两个表分别起一个别名,例如下面的g和b:

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

    (3)修改表的结构

    alter table tdb_goods change goods_cate cate_id smallint unsigned not null,change brand_name brand_id smallint unsigned not null;

    9,连接的语法结构

    10,内连接 INNER JOIN

    通常使用 ON 关键字来设定连接条件,使用WHERE关键字进行结果集记录的过滤。

    内连接:显示左表及右表符合条件的记录(交集)。

    SQL语句实例

    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;

    11,外连接 OUTER JOIN

    (1) 左外连接: 显示左表中的全部和右表中符合条件的部分。

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

    (2) 右外连接: 显示右表中的全部和左表中符合条件的部分。

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

    12,多表连接

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

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

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

  • 相关阅读:
    2020暑假项目-车辆派遣管理系统需求
    2020暑假项目-车辆派遣管理系统
    关于页面刷新或者调用方法事获取不到元素信息或者出现缺少对象错误的换位思考setTimeout的使用
    JSON 传值 textarea中虚拟换行功能
    我的MYSQL学习心得(十) 自定义存储过程和函数
    我的MYSQL学习心得(九) 索引
    我的MYSQL学习心得(八) 插入 更新 删除
    我的MYSQL学习心得(六) 函数
    我的MYSQL学习心得(七) 查询
    我的MYSQL学习心得(四) 数据类型
  • 原文地址:https://www.cnblogs.com/zhongshanblog/p/4658880.html
Copyright © 2020-2023  润新知