MySQL学习笔记(六)

学习地址 p23-p27

子查询

where型子查询

把内层的查询结果作为外层查询的比较条件

  1. 查出本网站最新的(goods_id最大的)一条商品
    • 思路:按goods_id desc排序,再取第一行
    • select goods_id,goods_name,from goods order by goods_id desc limit 1;
  2. 查出本网站最新的(goods_id最大的)一条商品,要求不用排序
    • 思路:拆两步走,先查出goods_id最大的,然后再根据结果查出goods_name。
    • select max(goods_id) from goods; + select goods_id,goods_name from goods where goods_id=?
    • 两条语句合并就是子查询了:select goods_id,goods_name from goods where goods_id=(select max(goods_id) from goods);
from型子查询

内层sql的查询结果当作一张临时表,这张表只是各种运算出来的结果看不出原数据表的结构,而这张临时表供外层sql再次查询。

exists型子查询

把外层sql的结果拿到内层sql去测试,如果内层sql成立,则该行取出

  • 查出有商品的栏目
  • 思考:什么样的表叫做下面有商品
  • 答:select * from goods where cat_id=X能取出数据
关于NULL

建表时列后面not null default ‘’/0 表示让这个列不允许为null,如果这个列没有填值,也有默认值,也不为null
null是一种类型,null的比较需要用特殊的运算符,is nullis not null