📜  结构化查询语言 (SQL)

📅  最后修改于: 2021-09-08 16:23:02             🧑  作者: Mango

结构化查询语言是一种标准的数据库语言,用于创建、维护和检索关系数据库。以下是一些关于 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_NONAMEADDRESSPHONEAGE

    学生

    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

    处理关系数据库的查询可以分为以下几类:

    数据定义语言:用于定义数据库的结构。例如;创建表、添加列、删除列等。

    数据操作语言:用于操作关系中的数据。例如;插入、删除、更新等。

    数据查询语言:用于从关系中提取数据。例如;选择

    所以首先我们将考虑数据查询语言。从关系数据库中检索的通用查询是:

    1. SELECT [ DISTINCT ] Attribute_List FROM R1,R2….RM
    2. [ WHERE条件]
    3. [ GROUP BY (属性)[ HAVING条件]]
    4. [ ORDER BY (属性)[ DESC ]];

    如果您想从关系数据库中检索,则语句 1 表示的部分查询是强制性的。写在 [] 中的语句是可选的。我们将查看表 1 中显示的关系的可能查询组合。

    案例 1:如果我们要检索所有学生的属性ROLL_NONAME ,查询将是:

    SELECT ROLL_NO, NAME FROM STUDENT;
    ROLL_NO NAME
    1 RAM
    2 RAMESH
    3 SUJIT
    4 SURESH

    案例2:如果我们要检索ROLL_NO大于2的学生的ROLL_NONAME ,查询将是:

    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 测验