以下为个人作为初学者的自己看书总结,访客看到有不足或差错之处,欢迎交流指正。
day7 2020/10/21
目录
10.1 显示多个表的记录10.1.1 显示多条提取结果10.1.2 使用 UNION 合并 3 个以上表10.1.3 按条件合并多条提取结果并显示10.1.4 合并显示多条提取结果(允许重复)
10.2 内连接 (类似于求交)10.2.1 连接两个表10.2.2 选择列进行显示,USING 使 ON 后更容易阅读10.2.3 通过 WHERE 设置条件从连接表中提取记录
10.3 外连接 (类似于求并)10.4 自连接10.5 子查询 (从 SELECT 的记录中 SELECT )10.5.1 显示最大值10.5.2 提取大于等于平均值的记录10.5.3 使用 IN10.5.4 EXISTS / NOT EXISTS
10.1 显示多个表的记录
UNION
10.1.1 显示多条提取结果
SELECT 列名1 FROM 表1 UNION 列名2 FROM 表2
; 加括号更易理解
如:
(SELECT * FROM tb1
)
UNION
(SELECT * FROM tb2
)
;
10.1.2 使用 UNION 合并 3 个以上表
如:
(SELECT * FROM tb WHERE empid
='A102')
UNION
(SELECT * FROM tb WHERE empid
='A103')
UNION
(SELECT * FROM tb WHERE empid
='A104')
UNION
(SELECT * FROM tb WHERE empid
='A107')
;
等价于
SELECT *
FROM tb
WHERE empid
IN
('A102',
'A103',
'A104',
'A107');
10.1.3 按条件合并多条提取结果并显示
使用 UNION 合并提取多条记录时,在各个命令最后加上
"WHERE 条件"
如:
(SELECT empid FROM tb WHERE sales
>=200
)
UNION
(SELECT empid FROM tb1 WHERE age
>=30
);
10.1.4 合并显示多条提取结果(允许重复)
UNION ALL
10.2 内连接 (类似于求交)
JOIN
10.2.1 连接两个表
SELECT 列名 FROM 表1
JOIN 要连接的表2
ON 表1的列
= 表2的列
;
如:SELECT *
FROM tb
JOIN tb1
ON tb.empid
= tb1.empid
;
10.2.2 选择列进行显示,USING 使 ON 后更容易阅读
如:
SELECT tb.empid, tb1.name, tb.sales
FROM tb
JOIN tb1
ON USING
(empid
);
10.2.3 通过 WHERE 设置条件从连接表中提取记录
使用了别名,两个表选择列合并,USING,WHERE设置条件选择
如:
SELECT x.empid AS 员工号, y.name AS 姓名, x.sales AS 销售额
FROM tb AS x
JOIN tb1 AS y
USING
(empid
)
WHERE x.sales
>=100
;
10.3 外连接 (类似于求并)
LEFT (OUTER) JOIN RIGHT (OUTER) JOIN
具体使用和内连接一致, LEFT JOIN
; RIGHT JOIN 替换 JOIN
10.4 自连接
自连接的典型示例—排序
10.5 子查询 (从 SELECT 的记录中 SELECT )
10.5.1 显示最大值
如:
SELECT * FROM tb WHERE sales IN
(SELECT MAX
(sales
) FROM tb
);
10.5.2 提取大于等于平均值的记录
如:
SELECT *
FROM tb1
WHERE age
>= (SELECT AVG
(age
) FROM tb1
);
10.5.3 使用 IN
SELECT 显示的列 FROM 表名
WHERE 列名 IN
(通过子查询 SELECT 语句提取的列
);
如:
SELECT * FROM tb1
WHERE empid
IN
(SELECT empid FROM tb WHERE sales
>=200
);
10.5.4 EXISTS / NOT EXISTS
接下来一系列会每天记录《MySQL基础教程》的学习总结。挑战半个月看书,动手,写博客