结构化查询语言是一种标准的数据库语言,用于创建、维护和检索关系数据库。以下是一些关于 SQL 的有趣事实。
- SQL 不区分大小写。但推荐的做法是使用大写字母的关键字(如 SELECT、UPDATE、CREATE 等)并使用小写字母的用户定义的东西(喜欢的表名、列名等)。
- 我们可以在任何行的开头使用“-”(双连字符)在 SQL 中编写注释。
- SQL 是关系数据库(如下所述)的编程语言,如 MySQL、Oracle、Sybase、SQL Server、Postgre 等。其他非关系数据库(也称为 NoSQL)数据库如 MongoDB、DynamoDB 等不使用 SQL
- 尽管 SQL 有 ISO 标准,但大多数实现在语法上略有不同。因此,我们可能会遇到在 SQL Server 中有效但在 MySQL 中无效的查询。
.
什么是关系数据库?
关系数据库意味着数据以关系(表)的形式存储和检索。表 1 显示了只有一个名为STUDENT的关系数据库,该关系存储学生的ROLL_NO 、 NAME 、 ADDRESS 、 PHONE和AGE 。
学生
ROLL_NO NAME ADDRESS PHONE AGE 1 RAM DELHI 9455123451 18 2 RAMESH GURGAON 9652431543 18 3 SUJIT ROHTAK 9156253131 20 4 SURESH DELHI 9156768971 18 表格1
这些是在关系方面使用的一些重要术语。
属性:属性是定义关系的属性。例如; ROLL_NO , NAME等
元组:关系中的每一行都称为元组。上述关系包含 4 个元组,其中之一如下所示:
1 RAM DELHI 9455123451 18 学位:属性的关系的数字是被称为关系的程度。上面定义的STUDENT关系的度数为 5。
基数:关系中元组的数量称为基数。上面定义的STUDENT关系的基数为 4。
列:列表示特定属性的值集。 ROLL_NO列是从关系 STUDENT 中提取的。
ROLL_NO 1 2 3 4 处理关系数据库的查询可以分为以下几类:
数据定义语言:用于定义数据库的结构。例如;创建表、添加列、删除列等。
数据操作语言:用于操作关系中的数据。例如;插入、删除、更新等。
数据查询语言:用于从关系中提取数据。例如;选择
所以首先我们将考虑数据查询语言。从关系数据库中检索的通用查询是:
- SELECT [ DISTINCT ] Attribute_List FROM R1,R2….RM
- [ WHERE条件]
- [ GROUP BY (属性)[ HAVING条件]]
- [ ORDER BY (属性)[ DESC ]];
如果您想从关系数据库中检索,则语句 1 表示的部分查询是强制性的。写在 [] 中的语句是可选的。我们将查看表 1 中显示的关系的可能查询组合。
案例 1:如果我们要检索所有学生的属性ROLL_NO和NAME ,查询将是:
SELECT ROLL_NO, NAME FROM STUDENT;
ROLL_NO NAME 1 RAM 2 RAMESH 3 SUJIT 4 SURESH 案例2:如果我们要检索ROLL_NO大于2的学生的ROLL_NO和NAME ,查询将是:
SELECT ROLL_NO, NAME FROM STUDENT WHERE ROLL_NO>2;
ROLL_NO NAME 3 SUJIT 4 SURESH CASE 3:如果我们想检索学生的所有属性,我们可以写 * 代替写所有属性:
SELECT * FROM STUDENT WHERE ROLL_NO>2;
ROLL_NO NAME ADDRESS PHONE AGE 3 SUJIT ROHTAK 9156253131 20 4 SURESH DELHI 9156768971 18 CASE 4:如果我们想用AGE以升序表示关系,我们可以使用 ORDER BY 子句:
SELECT * FROM STUDENT ORDER BY AGE;
ROLL_NO NAME ADDRESS PHONE AGE 1 RAM DELHI 9455123451 18 2 RAMESH GURGAON 9652431543 18 4 SURESH DELHI 9156768971 18 3 SUJIT ROHTAK 9156253131 20 注意: ORDER BY AGE等价于 ORDER BY AGE ASC。如果我们想按AGE 的降序检索结果,我们可以使用 ORDER BY AGE DESC。
案例 5:如果我们想检索一个属性或一组属性的不同值,则使用 DISTINCT 如下:
SELECT DISTINCT ADDRESS FROM STUDENT;
ADDRESS DELHI GURGAON ROHTAK 如果未使用 DISTINCT,则 DELHI 将在结果集中重复两次。在了解 GROUP BY 和 HAVING 之前,我们需要了解 SQL 中的聚合函数。
聚合函数:聚合函数用于对关系的数据值执行数学运算。 SQL 中使用的一些常见聚合函数是:
- COUNT: Count函数用于计算关系中的行数。例如;
SELECT COUNT (PHONE) FROM STUDENT;
COUNT(PHONE) 4 - SUM: SUM函数用于在关系中添加属性的值。例如;
从学生中选择总和(年龄);
SUM(AGE) 74 同样,可以使用 MIN、MAX 和 AVG。正如我们在上面看到的,所有聚合函数只返回 1 行。
AVERAGE:它给出了元组的平均值。它也被定义为总和除以计数值。
语法:AVG(属性名)
或者
语法:SUM(attributename)/COUNT(attributename)
上述语法还检索元组的平均值。MAXIMUM:提取元组集合中的最大值。
语法:MAX(属性名)MINIMUM:它从所有元组的集合中提取最小值。
语法:MIN(属性名)GROUP BY: Group by 用于根据属性或属性组对关系的元组进行分组。它总是与在组上计算的聚合函数相结合。例如;
SELECT ADDRESS, SUM(AGE) FROM STUDENT GROUP BY (ADDRESS);
在此查询中,将计算 SUM( AGE ) 但不是针对整个表而是针对每个地址。 IE;地址 DELHI(18+18=36) 的 AGE 总和,其他地址也类似。输出是:
ADDRESS SUM(AGE) DELHI 36 GURGAON 18 ROHTAK 20 如果我们尝试执行下面给出的查询,它将导致错误,因为尽管我们已经为每个地址计算了 SUM(AGE),但对于我们分组的每个地址,都有超过 1 个 ROLL_NO。所以它不能显示在结果集中。每当我们使用 GROUP BY 时,我们都需要在 SELECT 语句之后的列上使用聚合函数来理解结果集。
SELECT ROLL_NO, ADDRESS, SUM(AGE) FROM STUDENT GROUP BY (ADDRESS);
注意:不属于 GROUP BY 子句的属性不能用于选择。任何属于 GROUP BY CLAUSE 的属性都可以用于选择,但它不是强制性的。但是我们可以在聚合函数使用不属于 GROUP BY 子句的属性。
SQL 测验