0.本篇博客核心内容
提供了几种常用的SQL查询模板: 单表, 多表, 自连接
1. 普通条件查询
假设我们有一张商品表
SELECT * # 你想查找商品表的什么字段? * 代表所有字段
FROM goods # 你想查找哪一张表的数据? 这里是商品表
WHERE type = 'iPhone 11' AND price < 6000 # 你想筛选出什么数据用什么筛选条件 ?
2. 子查询
利用内层查询返回的结果进行二次查询就叫子查询
SELECT name , price #查找价格的大于平均值的商品
FROM goods
WHERE price > (
SELECT AVG( price )
FROM goods
)
3. 内连接查询
假设我们有商品表 ( goods ) 和商品类型表 ( type )
SELECT *
FROM goods gs INNER JOIN type tp ON gs.type_id = tp.id
WHERE gs.enable = 1
含义: 查找商品详情( 基础详情 + 类型详情 )
INNER JOIN 连接两张表; ON表示连接条件; WHERE 代表筛选条件, 筛选上架的商品
4. 外连接查询
4.1 左外连接查询
SELECT *
FROM goods gs LEFT OUTER JOIN type tp ON gs.type_id = tp.id
查找所有与左表连接条件的数据, 找不到连接条件则为右表数据为 null
4.2 右外连接查询
右外连接与左外连接相反
SELECT *
FROM goods gs RIGHT OUTER JOIN type tp ON gs.type_id = tp.id
查找所有与右表连接条件的数据, 找不到连接条件则为左表数据为 null
5. 自身连接查询
假设有一个菜单表
CREATE TABLE `menu` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`type` CHAR(50) NOT NULL COLLATE 'utf8_general_ci',
`parent_id` INT(11) NOT NULL DEFAULT '0' COMMENT '父节点id,0表示顶层菜单',
PRIMARY KEY (`id`) USING BTREE
)
COMMENT='商品菜单表'
COLLATE='utf8_general_ci'
ENGINE=InnoDB
;
ps: 0 代表没有父级元素;
SELECT f.id, f.type, s.id AS child_id, s.type AS child_type
FROM menu f LEFT OUTER JOIN menu s
ON f.id = s.parent_id
将同一张表看成两张表进行左外连接, 就是自身连接查询
题外话: 听说这样的表能够设计一个无限级菜单, 但是我现在还不会, 学会了再补充上去吧.
2020年7月20日21:17:44 – 广州黄埔
以上就是我学习SQL语言提取出来的几种常用查询案例代码, 希望能够熟练掌握SQL 语言吧, 因为即使是在JPA , MyBatis等ROM框架大行其道的时代,原汁原味的SQL在复杂的多表关联需求下依然有着大用处
如果有小伙伴看到这里, 我想分析一个理念,共同勉励.
少既是多, 慢既是块, 理解的多了记忆的就少了