Mysql04——进阶
增强查询
-
where子句
日期数据类型可以直接比较大小
SELECT * FROM `time` WHERE birthday > "2000-01-01"
判断是否为空要用 IS(NOT) NULL 而不是用等号=
-
like自子句(模糊查询)
注意这里O前面是两个下划线_ 表示两个任意字符
-
查询表结构
DESC 表名
-
order by子句
-
group by子句
distinct去重
- 分页查询(limit)
LIMIT n 等价于 LIMIT 0,n。 limit 1 等价于 limit 0,1
顺序
注意:顺序不对会报错
多表查询
-
默认情况
因此我们多表查询的问题就是写出正确的条件过滤语句(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; 把这个当作临时表
-
多列子查询
(名字不重要,看意思)
- 小练习
-
自我复制(蠕虫复制)
表去重:
合并查询
外连接
实际情况大部分还是使用前面的内连接
左外连接:左边的表即使和右侧的表没有匹配项,也会完全显示
右外连接:把LEFT改成RIGHT就行了
本文来自博客园,作者:紫英626,转载请注明原文链接:https://www.cnblogs.com/recorderM/p/15885299.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南