文章目录
MySQL开发技巧(一)
常用的SQL语句类型:
- DDL 数据定义语言
- TPL 事务处理语言
- DCL 数据控制语言
- DML 数据操作语言
正确使用SQL的重要性:
- 增加数据库处理效率,减少应用相应时间
- 减少数据库服务器负载,增加服务器稳定性
- 减少服务器间通讯的网络流量
join类型
- 内连接(INNER)
- 全外连接(FULL OUTER)
- 左外连接(LEFT OUTER)
- 右外连接(RIGHT OUTER)
- 交叉连接(CROSS)
join从句 – 内连接 (INNER)
西天取经四人组
| id | user_name | over |
|---|---|---|
| 1 | 唐僧 | 旃檀功德佛 |
| 2 | 孙悟空 | 斗战神佛 |
| 3 | 猪八戒 | 净坛使者 |
| 4 | 沙僧 | 金身罗汉 |
悟空的朋友们
| id | user_name | over |
|---|---|---|
| 1 | 孙悟空 | 成佛 |
| 2 | 牛魔王 | 被降服 |
| 3 | 蛟魔王 | 被降服 |
| 4 | 鹏魔王 | 被降服 |
| 5 | 狮驼王 | 被降服 |
内连接
内连接Inner join基于连接谓词将两张表(如A和B)的列组合在一起,产生新的结果表。可以用来交集。
SELECT a.user_name,a.over,b.over FROM user1 a INNER JOIN user2 b ON a.username=b.user_name;
结果:
左外连接(LEFT OUTER)
左外连接有两种形式
一种是包含所有A表中的数据
select a.id,a.user_name, a.over, b.id, b.user_name, b.over
from user1 a
left join user2 b
on a.user_name = b.user_name
结果:
一种是通过左外连接查询出只存在于A表中,不存在与B表中的数据
select a.id,a.user_name, a.over, b.id, b.user_name, b.over
from user1 a
left join user2 b
on a.user_name = b.user_name
where b.user_name is null;
结果:
右外连接(RIGHT OUTER)
以右表为基础,查询结果会包好右表中所有的记录。
在悟空朋友中有谁参与的取经:
select b.user_name,b.over,a.over
from user1 a
Right JOIN user2 b
on a.user_name = b.user_name
where a.user_name is not null;
join从句—全连接(Full-Join)
全连接可以查询所有存在于A表和B表中的数据
或者查询只存在A表或B表中的数据
MySQL不支持全连接,可以使用union all来实现
select a.id,a.user_name, a.over, b.id, b.user_name, b.over
from user1 a
left join user2 b
on a.user_name = b.user_name
union all
select a.id,a.user_name, a.over, b.id, b.user_name, b.over
from user1 a
right join user2 b
on a.user_name = b.user_name;
结果:
join从句—交叉连接(cross join)
交叉连接(cross join),又称笛卡尔连接(cartesian join)或叉乘,如果A和B是连个集合,他们的交叉连接即为AXB
不需要提供连接关键词从句