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

article/2025/11/6 0:37:30

常用的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;

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

小结

在这里插入图片描述


http://chatgpt.dhexx.cn/article/Mjqg4vYG.shtml

相关文章

mysql多表查询(一口气解决掉:自连接 左右连接 满连接等)

多表查询&#xff0c;也称为关联查询&#xff0c;指两个或更多个表一起完成查询操作。 前提条件&#xff1a;这些一起查询的表之间是有关系的&#xff08;一对一、一对多&#xff09;&#xff0c;它们之间一定是有关联字段&#xff0c;这个关联字段可能建立了外键&#xff0c;…

【第一章】SQL基础知识

目录 ​编辑 1. 认识SQL 1.1 SQL的标准 1.2 SQL的种类 1.3 SQL的功能 2. 常量 2.1 数字常量 2.2 字符串常量 2.3 日期和时间常量 2.4 符号常量 3. 变量 3.1 局部变量 3.2 全局变量 4. 运算符 4.1 算术运算符 4.2 比较运算符 4.3 逻辑运算符 4.4 按位运算符 …

C# WinForm中NotifyICon控件的用法【1】

任务栏中的图标是一些进程的快捷方式&#xff0c;这些进程在计算机后台运行&#xff0c;如防病毒程序或音量控制。 平时我们在使用QQ的时候&#xff0c;QQ主界面隐藏到系统托盘里&#xff0c;需要调用的时候在点击出来&#xff0c;很好很强大。 那么我们在C#中如何实现呢。本…

notify() notifyAll() 区别

notify 参考&#xff1a;https://blog.csdn.net/weixin_44121696/article/details/109306019 public class ObjectTest {public static void main(String[] args) {Object objectLock new Object();new Thread(() -> {synchronized (objectLock) {System.out.println(Thre…

NotifyIcon的属性、事件、方法

参考文章: NotifyIcon控件的使用. 属性 属性名操作博主翻译ContextMenuStrip可绑定ContextMenuStrip控件当用户右击该图标&#xff0c;显示的快捷菜单Icon必须选择一个ico格式的图片&#xff0c;否则右下角任务栏不会出现对象的可见性级别。所有属性都适用 事件 1.鼠标双击…

notify和notifyAll

notify: notify只会唤醒众多等待线程中的其中一个线程 用包子铺案例来演示一下 package com.thread;/*** author 邓亚非*/ public class TestNotify {private static Object objectnew Object();public static void main(String[] args) {// 顾客1线程new Thread(new …

notify和notifyall的区别

文章目录 场景分析例子经典java线程状态流转图 场景 调用wait的线程的唤醒&#xff0c;一般通过notify和notifyAll,但是两者之间有什么区别呢&#xff1f; 分析 线程调用synchronized方法或者synchronized代码块需要获取对象锁&#xff0c;如果没有获取则进入锁池线程调用wa…

Winform从入门到精通(14)——NotifyIcon(史上最全)

文章目录 前言:一、属性1、BalloonTipIcon1.1 ToolTipIcon.Error1.2 ToolTipIcon.Info1.3 ToolTipIcon.Warning1.4 ToolTipIcon.None2、BalloonTipText3、BalloonTipTitle4、Icon4.1 界面设置icon属性4.2 代码设置Icon属性5、Tag6、Text7、Visible

WPF利用NotifyIcon创建任务栏图标(菜鸟教程)

学习目标&#xff1a; 记录从WPF应用创建开始&#xff0c;一步步到任务栏图标创建的全过程。 流程&#xff1a; 1、环境&#xff1a;Win10 VS2017 打开VS2017&#xff0c;选择文件 -> 新建 -> 项目 -> Visual C# -> Windows桌面 ->WPF应用 -> 更改项目名为…

Notify

1 有什么用 作用 &#xff1a; 解耦&#xff0c;异步&#xff0c;并行 举个栗子 假设我们有这么一个应用场景&#xff0c;为了完成一个用户注册淘宝的操作&#xff0c;可能需要将用户信息写入到用户库中&#xff0c;然后通知给红包中心给用户发新手红包&#xff0c;然后还需…

NotifyICon使用

2010-04-11 15:47 by Ju2ender, 1438 visits, 网摘, 收藏, 编辑 最常见使用NotifyIcon的程序就是QQ了&#xff0c;当初我很好奇这通知区域的小企鹅是如何随着QQ的运行放上去的&#xff0c;这的确是个有趣的技巧。 要是用到自己的程序上的确显得很专业&#xff01;我们来为自己的…

notifyIcon 用法

BalloonTipIcon —— 气泡提示的类型&#xff0c;有None&#xff08;无&#xff09;、Info&#xff08;蓝色感叹号&#xff09;、Warnning&#xff08;黄色感叹号&#xff09;、Error&#xff08;小红叉&#xff09; BalloonTipText —— 气泡提示的内容&#xff0c;如上图的N…

C#如何使用NotifyIcon实现任务栏托盘菜单及气泡提示

以软件【银行业会计人员技能训练系统】为例&#xff0c;如何使用NotifyIcon实现任务栏托盘菜单及气泡提示&#xff1f; 实现系统托盘方法如下&#xff1a; 1、向窗体中添加NotifyIcon控件和ContextMenuStrip控件&#xff1b; 2、为ContextMenuStrip控件添加子项&#xff1b; 3…

C#——NotifyICON的使用

1、作用&#xff08;给程序增加下方提示图标&#xff09; 2、实现方式 1&#xff09;添加NotifyIcon控件&#xff0c;属性中Visible设为true 2)选择要显示的图标(icon格式)&#xff0c;此时已经可以显示小图标&#xff0c;但右击不会显示小菜单栏. 3、添加ContextMenuStrip控…

【学习笔记】C# 动态系统托盘图标的实现 - NotifyIcon控件

操作步骤&#xff1a; 1、创建一个C# Windows窗体应用项目&#xff0c;命名为“IconTwinkle”&#xff1a; 2、双击解决方案中的“Resources.resx”&#xff0c;点击“添加资源”&#xff0c;选择图标并导入&#xff1a; 3、可见选定的图标已导入项目中&#xff1a; 4、双击右…

Android开发之PreferenceActivity和PreferenceFragment

在PreferenceActivity中&#xff0c;给我们提供了四个选项集成控件&#xff1a;ListPreference&#xff0c;EditTextPreference&#xff0c;CheckBoxPreference和RingtonePreference。 注意&#xff1a; 通过PreferenceActivity生成的XML文件&#xff0c;命名方式是定死了的&…

设置PreferenceFragment主题

整个项目主题颜色暗色&#xff0c;在使用PreferenceFragmentCompat文字也是黑色的导致看不清楚&#xff0c;采取更改PreferenceFragmentCompat主题实现&#xff0c;效果如下&#xff1a; 查看PreferenceFragmentCompat源码看到onCreate开始设置Theme&#xff0c;先获取preferen…

PreferenceFragment和PreferenceActivity

提要&#xff1a;PreferenceFragment展示中设置的值可以通过PreferenceManager.getDefaultSharedPreferences(context).来实现 【正文】 一、PreferenceFragment的引入&#xff1a; PreferenceActivity是一个非常有用的基类&#xff0c;当我们开发Android项目时避免不了选项设置…

彻底变换PreferenceFragment样式和全局设置字体样式的解决方案

一、PreferenceFragment样式修改 新样式 直接上图&#xff0c;原样式为白色样式&#xff0c;即为PreferenceFragment的默认样式&#xff1a; ① 白底黑字&#xff1b;② SwitchPreference开关默认为蓝色&#xff1b; ③ ListPreference列表默认为白色&#xff0c;选中状…

Android之PreferenceFragment详解

【正文】 一、PreferenceFragment的引入&#xff1a; PreferenceActivity是一个非常有用的基类&#xff0c;当我们开发Android项目时避免不了选项设置&#xff0c;这些设置习惯用Preference来保存。Android专门为这种Activity提供了便捷的基类PreferenceActivity。如果继承自Pr…