[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_id\G;
[mysql]子查询与连接的更多相关文章
- MYSQL子查询与连接
37:子查询与连接SET 列名 gbk;//改变客户端数据表的编码类型. 子查询子查询(Subquery)是指出现在其他SQL语句内的SELECT子句例如SELECT * FROM t1 WHERE ...
- MySQL 子查询与连接操作笔记
SQL语句之间是可以进行连接操作的,在一些复杂的数据操作中必须用到连接操作.简单的说就是一个SQL语句的结果可以作为相连接的SQL操作的一部分.SQL结构化查询语句,子查询是指的所有的SQL操作,并非 ...
- mysql子查询与连接查询
表结构以及数据: CREATE TABLE `student` ( `id` ) NOT NULL AUTO_INCREMENT, `name` ) CHARACTER SET utf8 COLLAT ...
- mysql的查询、子查询及连接查询
>>>>>>>>>> 一.mysql查询的五种子句 where(条件查询).having(筛选).group by(分组). ...
- 从项目上一个子查询扩展学习开来:mysql的查询、子查询及连接查询
上面这样的数据,想要的结果是:如果matchResult为2的话,代表是黑名单.同一个softId,version,pcInfoId的代表是同一个软件,需要去重:同时,如果相同软件里面只要有一个mat ...
- [转]mysql的查询、子查询及连接查询
转自:http://www.cnblogs.com/rollenholt/archive/2012/05/15/2502551.html 一.mysql查询的五种子句 where(条件 ...
- mysql查询、子查询、连接查询
mysql查询.子查询.连接查询 一.mysql查询的五种子句 where子句(条件查询):按照“条件表达式”指定的条件进行查询. group by子句(分组):按照“属性名”指定的字段进行分组.gr ...
- mysql 子句、子查询、连接查询
一.mysql查询的五种子句 where子句(条件查询):按照“条件表达式”指定的条件进行查询. group by子句(分组):按照“属性名”指定的字段进行分组.group by子句通常和count( ...
- MySQL 子查询(四)子查询的优化、将子查询重写为连接
MySQL 5.7 ref ——13.2.10.10优化子查询 十.子查询的优化 开发正在进行中,因此从长远来看,没有什么优化建议是可靠的.以下列表提供了一些您可能想要使用的有趣技巧.See also ...
随机推荐
- 投资新兴市场和细分市场 good
新兴市场对程序员来说,就是一种新的语言.一个新的平台.一套新的框架.新兴市场因为刚刚兴起,所以几乎所有人都在同一个起跑线,特别适合后进者.我认识从一个2011年开始学习iOS开发的同学,他能能力中等, ...
- .NET(C#):使用XPath查询带有命名空间(有xmlns)的XML
原文http://www.cnblogs.com/mgen/archive/2011/05/24/2056025.html 众所周知,XmlDocument可以进行XPath查询,但实际上这里所说的X ...
- jquery submit()不能提交表单的解决方法
<form id="form" method="get"> <input type="text" name="q ...
- windows 下面的内存泄漏排查.
内存泄漏排查 一下本人只是简单的介绍一个实用, 如果读者很感兴趣, 可以查阅msdn自己去深入调查相关的API和原理. API 介绍 1. 马上打印泄漏信息:_CrtDumpMemoryLeaks() ...
- 查GDI对象泄露的利器:GDIView
查GDI对象泄露的利器:GDIView可以很详细的查到进程的GDI对象的总个数,详细的GDI对象的个数,以及其增减数量.其GDI对象类型也可以很详细的得知,以及其内存地址,句柄.实在是好使! 下载地址 ...
- node.weiChat
微信的朋友圈分享是现在流行的推广模式,最近两天尝试了一下使用微信进行商品的分享,分享结束后我可以在自己的数据库中查询到用户是否分享成功,包括用户使用微信进行支付时的成功验证.个人觉得微信上的教程有些绕 ...
- POJ 2823 Sliding Window 【单调队列】
题目链接:http://poj.org/problem?id=2823 题目大意:给出一组数,一个固定大小的窗体在这个数组上滑动,要求出每次滑动该窗体内的最大值和最小值. 这就是典型的单调队列,单调队 ...
- Css Rest 方法
在当今网页设计/开发实践中,使用CSS来为语义化的(X)HTML标记添加样式风格是 重要的关键.在设计师们的梦想中都存在着这样的一个完美世界:所有的浏览器都能够理解和适用多有CSS规则,并且呈现相同的 ...
- IronJs 无相关源?
在工作中用到了IronJs 一切正常 就是 在启动项目的时候 报错说无相关源,将取消引用之后 就可以正常运行 如果不取消引用需要重新启动~ 是这个样子滴~ 说明: 在编译向该请求提供服务所需资源的过 ...
- POST 方式上传图片
Post 方式 模仿 form表单 上传 图片 设置enctype = multipart/form-data <form enctype="multipart/form-data&q ...