SQL语法基础篇 —— 常用的SQL标准

本文介绍了SQL92的基础知识,包括其与SQL99的区别,以及SQL92中的五种连接方式:笛卡尔积、等值连接、非等值连接、左外连接、右外连接,并通过实例详细解释了每种连接的用法和效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

常用的SQL标准


SQL有两个主要的标准,分别是SQL92和SQL99。92和99代表了标准提出的时间,SQL92就是92年提出的标准规范。除了SQL92和SQL99以外,还有其他的标准。

最重要的SQL标准就是SQL92和SQL99。一般来说SQL92的形式更简单,但是写的SQL语句会比较常,可读性较差。而SQL99相比于SQL92来说,语法更加复杂,但可读性高。

在SQL92中式如何使用连接的

相比于SQL99,SQL92规则更简单,更适合入门。

陈旸老师创建的NBA球员和球队两张表,SQL文件可以从GitHub上下载。

player表为球员表,一共有37个球员
在这里插入图片描述
team表为球队表,一共有3支球队
在这里插入图片描述

SQL92中的5中连接方式

a.笛卡尔积
b.等值连接
c.非等值连接
d.外连接(左连接、右连接)
e.自连接

笛卡尔积

实例:

-- 假定player表的数据是集合X,进行SQL查询
SELECT * FROM play;
-- 假定team表的数据为集合Y,进行SQL查询
SELECT * FROM team;

两张表的笛卡尔积的结果

SELECT * FROM play, team;

查询结果(111条记录)
在这里插入图片描述
笛卡尔积也称为交叉连接,英文是CROSS JOIN,它的作用就是可以把任意表进行连接,即使这两张表不相关。

等值连接

两张表的等值连接就是用两张表中都存在的列进行连接。

实例:

  • 针对player表和team表都存在team_id这一列
SELECT player_id, player.team_id, player_name, height, team_name FROM player, team WHERE player.team_id = team.team_id;

查询结果
在这里插入图片描述
进行等值连接的时候,可以使用表的别名,这样会让SQL语句更简洁。

SELECT player_id, a.team_id, player_name, height, team_name FROM player AS a, team AS b
WHERE a.team_id = b.team_id;

注:如果使用了表的别名,在查询字段中就只能使用别名进行代替,不能使用原有的表名。

非等值连接

进行多表查询的时候,如果连接多个表的条件是等号时,就是等值连接,其他的运算符连接就是非等值查询。

创建一个身高级别表height_grades
在这里插入图片描述
player表中有身高height字段,如果想要每个球员的身高的级别,可以采用非等值连接查询。

SELECT p.player_name, p.height, h.height_level
FROM play AS p, height_grades AS h
WHERE p.height BETWEEN h.height_lowest AND h.height_highest;

查询结果
在这里插入图片描述

外连接

除了查询满足条件的记录以外,外连接还可以查询某一方不满足条件的记录。两张表的外连接,会有一张是主表,另一张是从表。

在SQL92中采用(+)代表从表所在的位置,而且在SQL92中,只有左外连接和右外连接,没有全外连接。

-- 左连接,就是左边的表是主表,而右侧的表是从表,(+)表示哪个是从表
SELECT * FROM player, team 
WHERE player.team_id = team.team_id(+);

相当于SQL99中的

SELECT * FROM player LEFT JOIN team on player.team_id = team.team_id;

右外连接

SELECT * FROM player, team
WHERE player.team_id(+) = team.team_id;

相当于SQL99中的

SELECT * FROM player RIGHT JOIN team
on player.team_id = team.team_id;

注:LEFT JOIN和RIGHT JOIN只存在于SQL99及以后的标准中,在SQL92中不存在,只能用(+)表示。

自连接

自连接可以对多个表进行操作,也可以对用一个表进行操作。也就是查询条件使用了当前的字段。

实例:

  • 查看比布雷克·格里芬高的球员都有谁,以及他们的对应身高:
SELECT b.player_name, b.height FROM player as a, player as b
WHERE a.player_name = '布雷克-格里芬' and a.height < b.height;

查询结果(6条记录)
在这里插入图片描述
如果不用自连接的话,需要采用两次SQL查询。

首先需要查询布雷克·格里芬的身高

SELECT height FROM player
WHERE player_name = '布雷克-格里芬';

查询结果:2.08

然后再查询比2.08高的球员都有谁,以及他们的对应身高

SELECT player_name, height FROM player
WHERE height > 2.08;

查询结果和自连接的结果一致

小结

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值