关系数据库标准语言SQL(11,12)

news/2024/10/4 7:43:05/

目录

带有EXISTS谓词的子查询

exists谓词

例子

not exists谓词

例子

不同形式的查询间的替换

用EXISTS/NOT EXISTS实现全称量词

用EXISTS/NOT EXISTS:实现逻辑蕴涵

集合查询

并操作UNION

交操作INTERSECT

差操作EXCEPT

基于派生表的查询

select语句的基本格式


带有EXISTS谓词的子查询

exists谓词

EXISTS谓词代表存在量词,带有EXISTS谓词的子查询只返回逻辑真值“true”或逻辑假值“false'”

例子

【例】查询所有选修了1号课程的学生姓名。

SELECT Sname FROM Student  WHERE EXISTS(SELECT FROM SC WHERE Sno=Student.Sno AND Cno=1')

将student表里的数据一条一条带入到子查询中,看是不是选修了课程号1的。

使用存在量词EX1STS后,若内层查询结果非空,)则外层的WHERE子句返回真值;否则返回假值。

not exists谓词

若内层查询结果非空,则外层的WHERE子句返回假值,若内层查询结果空则外层的WHERE子句返回真值

例子

查询没有选修1号课程的学生姓名。

SELECT Sname FROM Student WHERE NOT EXISTS(SELECT FROM SC WHERE Sno Student.Sno AND Cno =1')

不同形式的查询间的替换

一些带EXISTS或NOT EXISTS谓词的子查询不能被其他形式的子查询等价替换;

所有带IN谓词、比较运算符、 ANY和ALL谓词的子查询都能完成对EXISTS谓词的子查询等价替换。

用EXISTS/NOT EXISTS实现全称量词

SQL语言中没有全称量词(For all)。可以把带有全称量词的谓词转换为等价的带有存在量词的谓词

用EXISTS/NOT EXISTS:实现逻辑蕴涵

SQL语言中没有蕴涵(Implication)逻辑运算,可以利用谓词演算将逻辑蕴涵谓词等价转换

p推出q,q推不出p。

集合查询

并操作UNION

SELECT * FROM Student WHERE Sdept='CS UNION SELECT FROM Student WHERE Sage≤=19

UNION:将多个查询结果合并起来,系统自动去掉重复元组

UNION ALL:将多个查询结果合并起来时,保留重复元组。

交操作INTERSECT

查询计算机科学系的学生氖年龄不大于19岁的学生的交集。

SELECT FROM Student WHERE Sdept='CS' INTERSECT SELECT FROM Student WHERE Sage<=19

差操作EXCEPT

【例】查询计算机科学系的学生与年龄不大于19岁的学生的差集。

SELECT FROM Student WHERE Sdept='CS'; EXCEPT SELECT FROM Student WHERE Sage<=19;

查询的结果在前面的集合里但不在后面的集合里。

基于派生表的查询

        子查询不仅可以出现在WHERE子句中,还可以出现在FROM子句中,这时子查询生成的临时派生表(derived table)成为主查询的查询对象。

        如果子查询中没有聚集函数,派生表可以不指定属性列,子查询SELECT子句后面的列名为其默认属性。

select语句的基本格式

SELECT [ALL / DISTINCTI<目标列表达式>[别名][<目标列表达式>[别名]

FROM<表名或视图名>[别名] <表名或视图名>[别名

WHERE<条件表达式>

[GROUP BY<列名>

[HAVING<条件表达式>

[ORDER BY<列名2>[ASC / DESC]


http://www.ppmy.cn/news/1534294.html

相关文章

C(十)for循环 --- 黑神话情景

前言&#xff1a; "踏过三界宝刹&#xff0c;阅过四洲繁华。笑过五蕴痴缠&#xff0c;舍过六根牵挂。怕什么欲念不休&#xff0c;怕什么浪迹天涯。步履不停&#xff0c;便是得救之法。" 国际惯例&#xff0c;开篇先喝碗鸡汤。 今天&#xff0c;杰哥写的 for 循环相…

【Android 13源码分析】Activity生命周期之onCreate,onStart,onResume-1

忽然有一天&#xff0c;我想要做一件事&#xff1a;去代码中去验证那些曾经被“灌输”的理论。                                                                                  – 服装…

LeetCode hot100---双指针专题(C++语言)

双指针 (1)快慢双指针 适用于使用双指针进行元素移动&#xff0c;覆盖(2)首尾双指针 计算区域面积&#xff0c;三数之和1、移动0 &#xff08;1&#xff09;题目描述以及输入输出 (1)题目描述: 给定一个数组 nums&#xff0c;编写一个函数将所有 0 移动到数组的末尾&#…

opencv实战项目(三十):使用傅里叶变换进行图像边缘检测

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 一&#xff0c;什么是傅立叶变换&#xff1f;二&#xff0c;图像处理中的傅立叶变换&#xff1a;三&#xff0c;傅里叶变换进行边缘检测&#xff1a; 一&#xff0c…

JavaScript 数组方法

数组(array)是按次序排列的一组值。每个值的位置都有编号(从0开始)&#xff0c;整个数组用方括号表示。两端的方括号是数组的标志。 var a["a","b","c"]; 除了在定义时赋值&#xff0c;数组也可以先定义后赋值。 var arr[];arr[1]"a"…

分治算法:谈一谈大规模计算框架 MapReduce 中的分治思想

分治算法:谈一谈大规模计算框架 MapReduce 中的分治思想 在当今大数据时代,处理大规模数据的需求日益增长。MapReduce 作为一种广泛应用的大规模计算框架,其核心思想正是分治算法。本文将深入探讨 MapReduce 中的分治思想,并通过具体案例进行说明。 一、分治算法概述 分…

【JavaScript】数组函数汇总

JavaScript数组函数是处理和操作数据的基础&#xff0c;对于JavaScript开发至关重要。函数式编程方法&#xff0c;如map()、filter()和reduce()&#xff0c;能够提高代码的简洁性和功能性。数据不可变性是现代JavaScript开发中的一个重要概念&#xff0c;函数如concat()和slice…

C语言 | Leetcode C语言题解之第454题四数相加II

题目&#xff1a; 题解&#xff1a; struct hashTable {int key;int val;UT_hash_handle hh; };int fourSumCount(int* A, int ASize, int* B, int BSize, int* C, int CSize, int* D, int DSize) {struct hashTable* hashtable NULL;for (int i 0; i < ASize; i) {for (…