子查询:又分为where型子查询,from型子查询,exists型子查询这三类。

where型子查询:指把内层查询的结果作为外层查询的比较条件:

举个例子:

我们想查出goods_id最大的商品,要求不能用排序:

select goods_id,goods_name,cat_id,shop_price from goods where goods_id=(select max(goods_id)from goods);

我们还想查出每个栏目下goods_id最大的商品,要求使用where型子查询:

select goods_id,goods_name,cat_id,shop_price from goods where goods_id in (select max(goods_id)from goods group by cat_id);

from型子查询:

内层sql的查询结果当成一张临时表,供外层sql再次查询

举个例子,我们想查询上面那张表中shop_price在20到100之间的商品:

select t1.goods_id,t1.goods_name,t1.cat_id,t1.shop_price 

from(select goods_id,goods_name,cat_id,shop_price from goods where goods_id in (select max(goods_id)from goods group by cat_id)) 

as t1 where t1.shop_price between 20 and 100;

exists 型子查询:

把外层的查询结果拿到内层进行测试,如果内层存在,则输出外层

我们还有一张category表:

我们现在想取出category栏目下有商品的栏目:

select * from category
where exists (select * from goods where category.cat_id=goods.cat_id);

对null的理解:

建表时列后面not null default ''/not null default 0 是什么意思?

答:就是让这个列的值不为nul,就算某个列确实没有填值,也不让它为null

为什么?

答:null是空,它的比较要用到特殊的比较符is null,is not null ,效率不高而且会影响索引效果

左连接:

假设A表在左,不动,有一张B表在A右边滑动,A表与B表之间通过一个关系来筛选B表的行。

A left join B on 条件。 条件为真,则B表中对应的行被取出。

上面的category表有一列cat_name,我们把它跟goods表左连接看看效果:

select goods_id,goods_name,shop_price,goods.cat_id,cat_name
from goods left join category on goods.cat_id=category.cat_id;

我们可以看到category表中的cat_name列与goods表连接在了一起

右连接也是类似,不过处于移植性和兼容性方面考虑,我们通常使用左连接。

我们有两个表t,m:

我们想把它显示为以下的效果:

该怎么做?提示:使用两次左连接

select t1.tname,mres,t2.tname,matime
from m left join t as t1 on t1.tid=m.hid
left join t as t2 on t2.tid=m.gid
where matime between '2006-06-01' and '2006-07-01';

union:

合并两条或多条sql语句的结果

语法:sqlA union sqlB

要求查询价格低于100元和价格高于4000元的商品(不能用or):

(select goods_id,goods_name,cat_id,shop_price from goods where shop_price<100)
union
(select goods_id,goods_name,cat_id,shop_price from goods where shop_price>4000);

使用union时默认去重,如果不想去掉重复数据可以用union all

mysql学习之基础篇06的更多相关文章

  1. mysql学习之基础篇01

    大概在一周前看了燕十八老师讲解的mysql数据库视频,也跟着学了一周,我就想把我这一周所学的知识跟大家分享一下:因为是第一次写博客,所以可能会写的很烂,请大家多多包涵.文章中有不对的地方还请大家指出来 ...

  2. mysql学习之基础篇08 UTF8编码

    这次我们来说一下在Mysql中的编码问题: 我们知道应用于计算机的最早的字符集是ASCII,它所组成的编码是ASCII编码:由于对于其他国家来说它所容纳的字符个数比较少,后来就出现了ANSI字符集,它 ...

  3. mysql学习之基础篇05

    mysql中的统计函数: 1. 查询商品价格中最高的价格: select max(shop_price) from goods; 2. 查询商品价格中最低的价格: select min(shop_pr ...

  4. mysql学习之基础篇04

    五种基本子句查询 查询是mysql中最重要的一环,我们今天就来说一下select的五种子句中的where条件查询: 首先我们先建立一张商品表:goods 由于商品数目太多,我就不一一列举了. 在这里我 ...

  5. mysql学习之基础篇03

    我们今天来进行建表的基本操作: 首先要建表就要了解列类型,因为建表就是声明列的过程,列声明完成了,表也就建好了. mysql中列分为三大类: 一.数值型 数值型又分为整型和浮点型两种. 先来看整型: ...

  6. MySQL学习之基础篇09-事务

    我们在建表的时候通常会在最后声明引擎类型,这次我们就来看看存储引擎都有哪些: 举个例子: --------------------------- 银行转账: 张三想给李四转500元钱: 张三-500 ...

  7. mysql学习之基础篇07

    视图:view 在查询的时候我们经常把查询到的结果当成一张临时表来看,其实view就可以看成一张虚拟表,是表通过某种运算得到的投影 那么如何创建视图?创建视图需要指定视图的列名和列类型吗? 答:不用, ...

  8. mysql学习之基础篇02

    我们来说一下表的增删改查的基本语法: 首先建立一个简单的薪资表: create table salary(id int primary key auto_increment,sname varchar ...

  9. iOS系列 基础篇 06 标签和按钮 (Label & Button)

    iOS系列 基础篇 06 标签和按钮 (Label & Button) 目录: 标签控件 按钮控件 小结 标签和按钮是两个常用的控件,下面咱们逐一学习. 1. 标签控件 使用Single Vi ...

随机推荐

  1. 数据分析入门——pandas数据处理

    1,处理重复数据 使用duplicated检测重复的行,返回一个series,如果不是第一次出现,也就是有重复行的时候,则为True: 对应的,可以使用drop_duplicates来删除重复的行: ...

  2. Shell获取字符串长度的多种方法总结

    摘自:https://www.jb51.net/article/121290.htm 前言 我们在日常工作中,对于求字符串操作在shell脚本中很常用,实现的方法有很多种,下面就来给大家归纳.汇总了求 ...

  3. php中heredoc与nowdoc的使用方法、定界符<<<的使用方法

    一.heredoc结构及用法 Heredoc 结构就象是没有使用双引号的双引号字符串,这就是说在 heredoc 结构中单引号不用被转义.其结构中的变量将被替换,但在 heredoc 结构中含有复杂的 ...

  4. 全基因组关联分析(GWAS)的计算原理

    前言 关于全基因组关联分析(GWAS)原理的资料,网上有很多. 这也是我写了这么多GWAS的软件教程,却从来没有写过GWAS计算原理的原因. 恰巧之前微博上某位小可爱提问能否写一下GWAS的计算原理. ...

  5. 有相关性就有因果关系吗,教你玩转孟德尔随机化分析(mendelian randomization )

    流行病学研究常见的分析就是相关性分析了. 相关性分析某种程度上可以为我们提供一些研究思路,比如缺乏元素A与某种癌症相关,那么我们可以通过补充元素A来减少患癌率.这个结论的大前提是缺乏元素A会导致这种癌 ...

  6. django安装使用xadmin

    Xadmin介绍 直接替换掉Django自带的admin系统,并提供了很多有用的东西:完全的可扩展的插件支持,基于Twitter Bootstrap的漂亮UI. 完全替代Django admin 支持 ...

  7. EasyDSS高性能RTMP、HLS(m3u8)、HTTP-FLV、RTSP流媒体服务器前端源码重构(六)- webpack-dev-server 自适应支持手机端访问

    关于EasyDSS EasyDSS商用流媒体服务器解决方案是一套集流媒体点播.转码与管理.直播.录像.检索.时移回看于一体的一套完整的商用流媒体服务器解决方案,EasyDSS高性能RTMP流媒体服务器 ...

  8. [LeetCode] 297. Serialize and Deserialize Binary Tree 二叉树的序列化和反序列化

    Serialization is the process of converting a data structure or object into a sequence of bits so tha ...

  9. [LeetCode] 454. 4Sum II 四数之和II

    Given four lists A, B, C, D of integer values, compute how many tuples (i, j, k, l) there are such t ...

  10. IFC文件介绍

    IFC是一个数据交换标准, 用于不同系统交换和共享数据. IFC是采用EXPRESS语言定义的实体关系模型,由几百个实体对象组成.实体对象包括建筑要素如IfcWall,几何元素如IfcExtruded ...