Mysql04——进阶


增强查询

  • where子句

日期数据类型可以直接比较大小

SELECT * FROM `time` WHERE birthday > "2000-01-01"

判断是否为空要用 IS(NOT) NULL 而不是用等号=

  • like自子句(模糊查询)

 注意这里O前面是两个下划线_ 表示两个任意字符

  • 查询表结构

DESC 表名
  • order by子句

  • group by子句

distinct去重

  •   分页查询

 顺序

 

 注意:顺序不对会报错

 

多表查询

  • 默认情况

 因此我们多表查询的问题就是写出正确的条件过滤语句(where)来过滤笛卡尔集

 注意:多表查询的条件不能少于 表的数量-1,否则会出现笛卡尔集(3张表至少2个条件,5张表至少4个条件)

  • 自连接

  自连接:指在同一张表的连接查询(将一张表看成两张表)

 原表:

 自连接查询结果:

 总结:

  •  子查询

 单行子查询:

 多行子查询:

这里注意相同的job需要去重所以加上了DISTINCT

 多行子查询中使用all操作符:

 any则是比最低的高就行,可以使用MIN:

  •  子查询当作临时表

查询每种商品类别里价格最高的商品并显示商品名字、价格、id

SELECT goods_id , temp.cat_id(注意指明是哪个cat_id 不然会报错) , name , price  // Column 'cat_id' in field list is ambiguous
FROM (SELECT cat_id, MAX( price ) AS max 
     FROM goods
     GROUP BY cat_id //注意这里不要加;
) temp , goods
WHERE temp.cat_id = goods.cat_id 
AND temp.max = goods.price;

-- SELECT
--     cat_id,MAX(price) AS max 
-- FROM goods 
-- GROUP BY cat_id; 把这个当作临时表
  • 多列子查询

 (名字不重要,看意思)

  • 小练习

 

  • 自我复制(蠕虫复制)

 

 表去重:

 合并查询