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_id\G;

[mysql]子查询与连接的更多相关文章

  1. MYSQL子查询与连接

    37:子查询与连接SET 列名 gbk;//改变客户端数据表的编码类型. 子查询子查询(Subquery)是指出现在其他SQL语句内的SELECT子句例如SELECT * FROM t1 WHERE ...

  2. MySQL 子查询与连接操作笔记

    SQL语句之间是可以进行连接操作的,在一些复杂的数据操作中必须用到连接操作.简单的说就是一个SQL语句的结果可以作为相连接的SQL操作的一部分.SQL结构化查询语句,子查询是指的所有的SQL操作,并非 ...

  3. mysql子查询与连接查询

    表结构以及数据: CREATE TABLE `student` ( `id` ) NOT NULL AUTO_INCREMENT, `name` ) CHARACTER SET utf8 COLLAT ...

  4. mysql的查询、子查询及连接查询

    >>>>>>>>>> 一.mysql查询的五种子句         where(条件查询).having(筛选).group by(分组). ...

  5. 从项目上一个子查询扩展学习开来:mysql的查询、子查询及连接查询

    上面这样的数据,想要的结果是:如果matchResult为2的话,代表是黑名单.同一个softId,version,pcInfoId的代表是同一个软件,需要去重:同时,如果相同软件里面只要有一个mat ...

  6. [转]mysql的查询、子查询及连接查询

    转自:http://www.cnblogs.com/rollenholt/archive/2012/05/15/2502551.html 一.mysql查询的五种子句         where(条件 ...

  7. mysql查询、子查询、连接查询

    mysql查询.子查询.连接查询 一.mysql查询的五种子句 where子句(条件查询):按照“条件表达式”指定的条件进行查询. group by子句(分组):按照“属性名”指定的字段进行分组.gr ...

  8. mysql 子句、子查询、连接查询

    一.mysql查询的五种子句 where子句(条件查询):按照“条件表达式”指定的条件进行查询. group by子句(分组):按照“属性名”指定的字段进行分组.group by子句通常和count( ...

  9. MySQL 子查询(四)子查询的优化、将子查询重写为连接

    MySQL 5.7 ref ——13.2.10.10优化子查询 十.子查询的优化 开发正在进行中,因此从长远来看,没有什么优化建议是可靠的.以下列表提供了一些您可能想要使用的有趣技巧.See also ...

随机推荐

  1. QT5.4 计算器程序 打包&发布,解决dll的最新解决方案(图文并茂,很清楚)

    QT写界面还是很不错,就是打包会比较麻烦,折腾了一天总算是打包完成了. QT软件的打包发布一个难点是必备dll文件的识别,现在高版本QT自带了一个windeployqt工具,直接会把需要的dll生成一 ...

  2. QT实现appendSheet(QAxObject的一种Add + Move的方法)

    一般地,熟悉VB.VC的同学都知道,要将新增的excel表单添加到表单的末尾,是很简单的事情,直接调用Add函数,传入对应的函数形参,就能实现将新增表单插入到末尾,但是通过QT的QAxObject实现 ...

  3. Java泛型的一点用法(转)

    1.一个优秀的泛型,建议不要这样写public static <K, V> Map<K, V> getMap(String source, String firstSplit, ...

  4. java类的封装、继承、多态

    一.封装(encapsulation) 封装性就是把类(对象)的属性和行为结合成一个独立的相同单位,并尽可能隐蔽类(对象)的内部细节,对外形成一个边界,只保留有限的对外接口使之与外部发生联系.封装的特 ...

  5. Sharpui企业版-简单介绍【01】 【QQ群:206378966】

    1. 什么是Sharpui         Sharpui是居于DUI思想的一套界面引擎,採用纯c++开发,实现完整的消息处理机制.渲染引擎分离以及灵活的控件扩展,是一款c++真正意义上的界面和业务逻 ...

  6. openstack 源码分析

    Nova对于底层Hypervisor(如KVM/QEMU等)的调用与管理主要通过LibvirtDriver类,nova/virt/libvirt/driver.py Libvirt对Hyperviso ...

  7. SMACSS:一个关于CSS的最佳实践-2.Base Rules

    回顾 在上一篇SMACSS:一个关于CSS的最佳实践-Overview中,讲到SMACSS将CSS Rules分为5个Categories: Base Layout Module State Them ...

  8. DevExpress ASP.NET 使用经验谈(1)-XPO模型的创建

    这个系列通过一些简单例子循序渐进,介绍DevExpress ASP.NET控件的使用.先来介绍一下XPO的使用,安装的DevExpress版本为DXperienceUniversal-12.2.4,使 ...

  9. (转)openURL的使用方法

    view plaincopy to clipboardprint? [[UIApplication sharedApplication] openURL:[NSURL URLWithString:ap ...

  10. codeforces 609E. Minimum spanning tree for each edge 树链剖分

    题目链接 给一个n个节点m条边的树, 每条边有权值, 输出m个数, 每个数代表包含这条边的最小生成树的值. 先将最小生成树求出来, 把树边都标记. 然后对标记的边的两个端点, 我们add(u, v), ...