zoukankan      html  css  js  c++  java
  • mysql学习之基础篇06

    子查询:又分为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

  • 相关阅读:
    软件需求,概要设计,详细设计(文档)
    需求文档和设计文档的区别
    Sqlyog和Navicat——mysql数据库图像化管理工具,
    Sqlyog 和Navicat
    端口占用问题
    List集合
    JSON——(JavaScript Object Notation, JS 对象简谱) 数据交换格式。JSON是一个序列化的对象或数组。
    Excel图表导出高清矢量位图片并裁剪的方法
    使用福昕PDF编辑器裁剪PDF页面
    Latex模板默认两栏的分栏的情况下怎么让图片和表格占一栏显示
  • 原文地址:https://www.cnblogs.com/wanghaoyu666/p/11281255.html
Copyright © 2011-2022 走看看