SQL必知必会 | 4

一、SQL99是如何使用连接的,与SQL92的区别是什么?

交叉连接:实际就是笛卡尔乘积,我们采用CROSS JOIN。

得到player和team两张表的笛卡尔积:
SELECT * FROM player CROSS JOIN team

多表交叉连接:
SELECT * FROM table1 CROSS JOIN table2 CROSS JOIN table3


自然连接:自动查询两张连接表中所有相同的字段,然后进行等值连接。
SELECT colName1, colName2 FROM player NATURAL JOIN team


ON连接:用来指定我们想要的连接条件。
SELECT 列列表 FROM 表1 JOIN 表2 ON 连接条件


USING连接:可以指定数据表里的同名字段进行等值连接。
SELECT 列列表 FROM 表1 JOIN 表2 USING (共同列)


外连接:一般省略OUTER不写。
左外连接:LEFT JOIN或LEFT OUTER JOIN
SELECT * FROM player LEFT JOIN team ON player.team_id = team.team_id
右外连接:RIGHT JOIN或RIGHT OUTER JOIN
SELECT * FROM player RIGHT JOIN team ON player.team_id = team.team_id
全外连接:FULL JOIN或FULL OUTER JOIN
SELECT * FROM player FULL JOIN team ON player.team_id = team.team_id
ps:MySQL不支持全外连接。全外连接的结果=左右表匹配的数据+左表没有匹配到的数据+右表没有匹配到的数据。


自连接:将一个表看作两个不同实例,从而进行更复杂的数据分析或查询。
SELECT 列列表 FROM 表别名1, 表别名2 WHERE 连接条件


名称 作用
内连接 多个表之间满足连接条件的数据行查询出来。包括:等值连接、非等值连接、自连接。
外连接 返回一个表中的所有记录,以及另一个表中匹配的行。包括:左外连接、右外连接、全连接。
交叉连接 返回左表中每一行与右表中每一行的组合。

在这里插入图片描述

二、试图在SQL中的作用是什么,它是怎样工作的?

视图:虚拟表,本身不具有数据。视图一方面可以帮我们使用表的一部分而不是所有的表,另一方面也可以针对不同的用户制定不同的查询视图。

视图作为一张虚拟表,封装了底层和数据表的接口,相当于一张或多张表的数据结果集。

创建视图:
CREATE VIEW view_name AS
SELECT colName1, colName2
FROM table
WHERE condition

嵌套视图:
CREATE VIEW player_above_above_avg_height AS
SELECT player_id, height
FROM player
WHERE height > (SELECT AVG(height) FROM player_above_avg_height)

修改视图:
ALTER VIEW view_name AS
SELECT colName1, colName2
FROM table
WHERE condition

删除视图:
DROP VIEW view_name

使用视图简化SQL操作:

  • 完成复杂的连接
  • 对数据进行格式化
  • 使用视图与计算字段

在这里插入图片描述

三、什么是存储过程,在实际项目中用得多么?

视图时虚拟表,通常不对底层数据表直接操作,而存储过程时程序化的SQL,可以直接操作底层数据表。存储过程可以说是SQL语句和流控制语句构成的语句集合。

定义一个存储过程:

CREATE PROCEDURE 存储过程名称([参数列表])
BEGIN
		需要执行的语句
END

删除存储过程:DRPO PROCEDURE 存储过程名称
更新存储过程:ALTER PROCEDURE 存储过程名称

参数类型 是否返回 作用
IN 向存储过程传入参数,存储过程中修改该参数的值,不能被返回。
OUT 把存储过程计算的结果放到该参数中,调用者可以得到返回值。
INOUT IN和OUT的结合,既用于存储过程的传入参数,同时又可以把计算结果放到参数中,调用者可以得到返回值。

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/itsxwz/article/details/132670830