3.4 数据查询

news2024/10/5 5:31:21

 

思维导图:

 

前言:

---

### 概述
- 数据查询是数据库操作的核心,主要通过SQL中的`SELECT`语句来实现。
- `SELECT`语句提供了非常丰富的查询功能,包括单表查询、多表连接查询和嵌套查询等。

### SELECT语句的基本格式

SELECT [ALL|DISTINCT] <目标列表达式>[, <目标列表达式>...]
FROM <表名或视图名>[, <表名或视图名>...]
[WHERE <条件表达式>]
[GROUP BY <列名1> [HAVING <条件表达式>]]
[ORDER BY <列名2> [ASC|DESC]];

### 主要组成部分

1. **SELECT子句**
    - 用于指定要返回的列。可选择所有列(`*`)或指定的列。
    - `ALL`(默认)返回所有匹配的记录,而`DISTINCT`返回唯一的记录。

2. **FROM子句**
    - 指定查询来源的基本表、视图或派生表。
    - 可包含多个表或视图,之间用逗号分隔。

3. **WHERE子句**
    - 定义查询的筛选条件,只有满足条件的记录才会被返回。

4. **GROUP BY子句**
    - 用于将结果按指定的列值分组,该列值相同的记录被视为一个组。
    - 通常与聚合函数(如SUM, AVG等)结合使用。

5. **HAVING子句**
    - 对GROUP BY分组后的组进行筛选,只返回满足条件的组。

6. **ORDER BY子句**
    - 对查询结果进行排序。默认为升序(ASC),也可选择降序(DESC)。

### 注意事项
- `GROUP BY`和`HAVING`通常结合使用,但`HAVING`必须在`GROUP BY`之后。
- `ORDER BY`子句始终放在SELECT语句的最后。

### 实例分析
以学生-课程数据库为例,可以进行各种查询,如简单的单表查询、多表连接查询以及更复杂的嵌套查询。

---

**结论**:`SELECT`语句是SQL中的核心,其功能丰富而灵活,能满足各种复杂的查询需求。掌握其使用方法和注意事项是进行有效数据查询的关键。

 3.4.1 单表查询

**3.4.1 单表查询**

---

### 概述
- 单表查询只涉及一个表的查询操作。
- 它可以通过选择表中的全部或部分列来实现。

### 查询内容

1. **选择指定的列**
    - 如果用户只对某几列感兴趣,可以在SELECT子句的<目标列表达式>中指定要查询的列。
    - 示例:
   

        SELECT Sno, Sname FROM Student;


        从`Student`表中选择学号与姓名。

2. **选择所有列**
    - 查询表的所有列可以简单地用`*`来表示。
    - 示例:
 

     SELECT * FROM Student;


        与
   

    SELECT Sno, Sname, Ssex, Sage, Sdept FROM Student;


        这两条语句是等价的,都查询学生表的所有信息。

3. **查询计算值**
    - <目标列表达式>可以是表达式,如算术表达式、函数等。
    - 示例:
     

      SELECT Sname, 2014 - Sage FROM Student;


        查询学生的姓名和出生年份。

       

      SELECT Sname, 'Year of Birth:', 2014 - Sage, LOWER(Sdept) FROM Student;


        这里不仅用了算术表达式,还转换了系名为小写形式。

4. **指定列的别名**
    - 为查询的列指定别名可以使查询结果更具可读性。
    - 对于包含计算、函数等的列尤为有用。
    - 示例:
     

        SELECT Sname AS NAME, 'Year of Birth:' AS BIRTH, 2014 - Sage AS BIRTHDAY, LOWER(Sdept) AS DEPARTMENT FROM Student;

### 要点总结
- 单表查询通常是数据库查询的基础,可以选择表的部分列或所有列。
- 通过算术运算、函数和字符串操作,可以在查询中实现丰富的数据处理功能。
- 为查询结果指定列的别名可以增加结果的可读性。

---

**结论**:单表查询虽然简单,但它是数据库查询的基础。掌握这一部分的知识,对于进行更复杂的查询至关重要。

**第3章 关系数据库标准语言SQL**
---

**3.4.2 选择表中的若干元组**

---

 ### ②确定范围
- 使用`BETWEEN...AND...`与`NOT BETWEEN...AND...`来筛选属性值在指定范围内或外的元组。
    - 示例:
     

   SELECT Sname, Sdept, Sage FROM Student WHERE Sage BETWEEN 20 AND 23;
        SELECT Sname, Sdept, Sage FROM Student WHERE Sage NOT BETWEEN 20 AND 23;

### ③确定集合
- 使用`IN`与`NOT IN`谓词来筛选属性值在指定集合内或外的元组。
    - 示例:
     

        SELECT Sname, Ssex FROM Student WHERE Sdept IN ('CS', 'MA', 'IS');
        SELECT Sname, Ssex FROM Student WHERE Sdept NOT IN ('CS', 'MA', 'IS');

### ④字符匹配
- 使用`LIKE`谓词进行字符串匹配。
    - `%`代表任意长度的字符串。
    - `_`代表任意单个字符。
    - 示例:
     

     SELECT * FROM Student WHERE Sno LIKE '201215121'; //等同于 SELECT * FROM Student WHERE Sno = '201215121';
        SELECT Sname, Sno, Ssex FROM Student WHERE Sname LIKE '刘%';
        SELECT Sname FROM Student WHERE Sname LIKE '欧阳_'; //注意字符集。
        SELECT Sname, Sno FROM Student WHERE Sname LIKE '_阳%';
        SELECT Sname, Sno, Ssex FROM Student WHERE Sname NOT LIKE '刘%';


    - 如果匹配字符串包含`%`或`_`,使用`ESCAPE`进行转义。
    - 示例:
   

   SELECT Cno, Ccredit FROM Course WHERE Cname LIKE 'DB\_Design' ESCAPE '\';

---

**结论**:SQL提供了多种查询方法,使我们能够根据不同的标准筛选数据。无论是按范围、集合还是字符串模式进行选择,SQL都为我们提供了灵活且强大的筛选工具。

1. **区别化查询**
   - 使用DISTINCT短语进行区别化查询。

2. **确定范围查询**
   - 谓词`BETWEEN...AND...`和`NOT BETWEEN...AND...`用于范围内或范围外的属性值查找。

3. **确定集合查询**
   - 谓词`IN`和`NOT IN`用于查找属性值是否属于指定集合。

4. **字符匹配**
   - 谓词`LIKE`用于字符串匹配,支持通配符%和_。使用`ESCAPE`进行转义。

5. **涉及空值查询**
   - `IS NULL`和`IS NOT NULL`用于查找空或非空的属性值。

6. **多重条件查询**
   - 逻辑运算符`AND`和`OR`连接多个查询条件。

7. **排序查询结果**
   - `ORDER BY`子句用于按属性列的升序(ASC)或降序(DESC)排列查询结果。

8. **聚集函数**
   - SQL提供了一系列的聚集函数,如`COUNT()`, `SUM()`, `AVG()`, `MAX()`, `MIN()`等。
   - 可以使用`DISTINCT`短语来排除重复值。

9. **分组查询**
   - `GROUP BY`子句按某一列或多列的值分组查询结果。
   - `HAVING`短语指定筛选条件对分组后的组进行筛选。

**重点示例笔记:**

- 查询年龄在20~23岁的学生信息:

  SELECT Sname, Sdept, Sage FROM Student WHERE Sage BETWEEN 20 AND 23;

- 查询计算机科学系、数学系和信息系学生的姓名和性别:
 

  SELECT Sname, Ssex FROM Student WHERE Sdept IN ('CS', 'MA', 'IS');

- 使用`LIKE`进行模糊查询姓刘的学生:

 SELECT Sname, Sno, Ssex FROM Student WHERE Sname LIKE '刘%';

- 聚集函数示例:查询学生总人数:
 

  SELECT COUNT(*) FROM Student;

- 分组查询示例:求各个课程号及相应的选课人数:

 SELECT Cno, COUNT(Sno) FROM SC GROUP BY Cno;

- 使用`HAVING`进行筛选: 查询选修了三门以上课程的学生学号:

  SELECT Sno FROM SC HAVING COUNT(Cno) > 3;

通过这章节的学习,应掌握SQL中的基础查询技巧,如范围、集合、模糊查询等,并了解如何使用聚集函数与分组来处理数据。

 
****GROUP BY与HAVING的使用**

**5. 分组查询** 

- 使用`GROUP BY`子句可以按一个或多个属性列的值对查询结果进行分组。

- 使用`HAVING`子句对分组后的数据进行筛选。

**重点示例笔记:**

- 查询选修了三门以上课程的学生学号:
 

  SELECT Sno FROM SC GROUP BY Sno HAVING COUNT(*) > 3;


  说明:此查询首先使用`GROUP BY`子句按学生编号`Sno`对记录进行分组。然后,通过`HAVING`子句筛选出元组数量大于3的组,这意味着一个学生选择了超过三个课程。

- `WHERE`子句与`HAVING`子句的区别:
  - `WHERE`子句用于筛选基表或视图中的元组。
  - `HAVING`子句用于筛选通过`GROUP BY`子句产生的分组。

- 误用`WHERE`子句查询平均成绩为90的学生学号(不正确的方法):
 

 SELECT Sno, AVG(Grade) FROM SC WHERE AVG(Grade) = 90 GROUP BY Sno;


  说明:这是一个错误的示例,因为`WHERE`子句中不能使用聚集函数作为条件表达式。

- 正确查询平均成绩大于等于90的学生学号及其平均成绩:
 

 SELECT Sno, AVG(Grade) FROM SC GROUP BY Sno HAVING AVG(Grade) >= 90;


  说明:这是一个正确的查询,首先使用`GROUP BY`子句按学生编号`Sno`对记录进行分组,然后通过`HAVING`子句筛选出平均成绩大于或等于90的组。

通过本部分的学习,应加深对SQL中`GROUP BY`和`HAVING`子句的理解,知道如何正确地使用它们进行分组和筛选操作,并注意避免在`WHERE`子句中误用聚集函数。

 3.4.2 连接查询

**第3章 关系数据库标准语言SQL**

**3.4.2 连接查询**

连接查询用于从两个或更多的表中选择信息。这些查询类型包括等值连接、非等值连接、自然连接、自身连接、外连接和复合条件连接。

**1. 等值与非等值连接查询**

- 连接查询的`WHERE`子句中的条件称为**连接条件**或**连接谓词**。
  
  格式:
 

 [<表名1>.]<列名1><比较运算符>[<表名2>.]<列名2>

  其中比较运算符可以是`=、>、<、>=、<=、!=`。如果运算符为`=`,则称为等值连接。其他运算符为非等值连接。

  连接条件中的列称为**连接字段**。这些字段的类型必须是可以比较的,但名称可以不同。

- **例3.49**:查询学生及其选修的课程。

  SELECT Student.*, SC.*
  FROM Student, SC
  WHERE Student.Sno = SC.Sno;

  在此查询中,两个表通过学号(Sno)属性连接。输出结果将展示学生的全部信息和他们选修的课程。

  连接操作的执行方式是:逐一遍历`Student`表中的每个元组,然后从`SC`表中找到所有与当前`Student`元组有相同Sno的元组,并将它们合并。这个基本方法称为嵌套循环连接算法。

  如有索引,查询效率会提高,因为不需要完全扫描`SC`表。可以通过索引直接找到匹配的`SC`元组。

  自然连接是等值连接的一个特例,其中结果中删除了重复的列。

- **例3.50**:使用自然连接查询学生及其选修的课程。

  SELECT Student.Sno, Sname, Ssex, Sage, Sdept, Cno, Grade
  FROM Student, SC
  WHERE Student.Sno = SC.Sno;

  在此查询中,只选择了一次学号(Sno)。

- SQL允许在一条语句中同时执行选择和连接查询。`WHERE`子句可以由连接谓词和选择谓词组合而成。

- **例3.51**:查询选修了2号课程并且成绩超过90分的学生的学号和姓名。

  SELECT Student.Sno, Sname
  FROM Student, SC
  WHERE Student.Sno = SC.Sno 
  AND SC.Cno = '2' 
  AND SC.Grade > 90;

  优化这种查询的一种方法是首先从`SC`表中选择满足条件的元组,然后再与`Student`表中的元组连接。

**总结**:
连接查询是关系数据库中的核心查询之一,允许我们从多个表中获取信息并将它们组合在一起。正确地使用连接查询,特别是当涉及大数据集时,对于查询性能至关重要。

**3.4.2 连接查询笔记摘要**

**总述**: 
连接查询允许我们从两个或多个表中同时检索数据。这是关系数据库中非常常见和重要的查询。

**主要连接查询类型**:
- 等值连接
- 非等值连接
- 自然连接
- 自身连接
- 外连接

1. **等值与非等值连接查询**
    - 用于连接两个表的条件称为连接条件或连接谓词。
    - 等值连接使用=作为比较运算符,而非等值连接使用其他比较运算符。

2. **自身连接**
    - 表可以与其自身进行连接。
    - 主要用于查找与表中相同的属性关联的数据。
    
3. **外连接**
    - 当不满足连接条件的元组时,外连接允许结果仍然包括它们。
    - 左外连接:包含左侧表中的所有元组。
    - 右外连接:包含右侧表中的所有元组。
    
**示例与解释**:
1. 通过Student和SC两个表的连接查询,通过学生编号(Sno)连接两个表并选择相关信息。
2. 自身连接的例子是从Course表中找出间接先修课,这需要将Course表与其自身连接。
3. 使用外连接,我们可以从主表(如Student)检索所有学生的数据,即使其中一些学生在另一个表(如SC)中没有对应的数据。

**注意**:
1. 在进行连接查询时,为了避免混淆,最好为属性名添加表名前缀。
2. 为了提高查询性能,可以为表上的关键列建立索引。

这种笔记结构首先提供了一个简短的总述,然后详细描述了主要的连接类型和示例。这有助于读者快速理解主题并提供了详细的解释和示例来增强理解。

**定义**:
- **多表连接**,如其名所示,涉及两个以上的表进行连接。
- 连接操作不限于两表连接或自身连接,可以扩展到多个表。

**关键点**:
1. 当执行多表连接时,查询的效率和性能可能会受到影响。因此,设计合适的连接策略和优化技巧很重要。
2. 通常情况下,关系数据库管理系统首先进行两个表的连接,然后将结果与第三个(或更多)表进行连接。这样的策略是基于优化连接操作的效率。

**示例**:
- 为了查询每个学生的学号、姓名、选修的课程名及成绩,需要连接三个表:Student、SC和Course。示例查询如下:
```sql
SELECT Student.Sno, Sname, Cname, Grade
FROM Student, SC, Course
WHERE Student.Sno = SC.Sno AND SC.Cno = Course.Cno;
```
  - 此查询首先基于学生编号(Sno)连接Student和SC表,然后使用课程编号(Cno)连接SC和Course表。
  
**实践建议**:
1. 当涉及多表连接时,确保连接条件清晰且明确,以避免产生笛卡尔乘积。
2. 尽量使用合适的索引和优化策略,以提高查询性能。
3. 在设计数据库时,确保表之间的关系设计得当,以便进行高效的多表连接。

总结:多表连接是数据库查询中的常见操作,尤其在复杂的业务逻辑中。理解其工作原理及如何优化其性能是关系数据库管理的核心组成部分。

 3.4.3 嵌套查询

**3.4.3 嵌套查询笔记摘要**

**定义**:
- **嵌套查询 (Nested Query)**:在SQL中,当一个查询块(SELECT-FROM-WHERE语句)被嵌入另一个查询块的WHERE子句或HAVING子句中时,被称为嵌套查询。
- 查询块分为:外层查询(父查询)和内层查询(子查询)。
  
**基本概念**:
1. **子查询**:在主查询内部的查询。其结果可以为单个值或值的集合。
2. **不相关子查询**:子查询的查询条件不依赖于父查询。
3. **相关子查询**:子查询的查询条件依赖于父查询。

**关键点**:
1. SQL语言允许多层嵌套查询,但子查询中不能使用ORDER BY子句。
2. 嵌套查询增强了SQL的查询能力,允许用户通过结构化方式构造复杂的查询。
3. IN谓词是嵌套查询中经常使用的,因为子查询的结果往往是一个集合。
  
**示例**:
- **例3.55**:查询与“刘晨”在同一个系学习的学生。
  - 子查询不依赖于父查询,因此先执行子查询,再使用结果构建父查询的查找条件。
  - 可以使用自连接或嵌套查询实现。

- **例3.56**:查询选修了课程名为“信息系统”的学生学号和姓名。
  - 需要连接Student、SC和Course表。
  - 可以使用嵌套查询或连接查询来实现。

**实践建议**:
1. 有些嵌套查询可以通过连接查询替代,但并非所有。
2. 相对于连接运算,当前的关系数据库管理系统对嵌套查询的优化还不够完善。因此,在实际应用中,能用连接运算表示的查询,应优先采用连接运算。
3. 设计数据库查询时,需要考虑查询效率。可能需要数据库编程人员具备一些数据库性能调优技术。

**总结**:嵌套查询为用户提供了构建复杂查询的能力。尽管它们在某些场景中非常有用,但在实际应用中,为了获取更好的性能,可能需要考虑其他查询策略,如连接查询。

 3.4.3 嵌套查询

**第3章 关系数据库标准语言SQL - 嵌套查询笔记**

---

**3.4.3 嵌套查询概述**
- **定义**: 嵌套查询是一个查询块内部还嵌有其他查询块。
    - 外层查询块称为 **父查询**。
    - 内层查询块称为 **子查询**。
- 嵌套查询可以实现多层次的查询逻辑。
- 子查询中不可以使用 **ORDER BY** 子句,只能在最外层使用。
- **结构化**: 通过嵌套查询,SQL 提供了结构化的程序设计。

**1. 带有IN谓词的子查询**
- 使用 **IN** 可以测试某个字段的值是否在一个集合中。
- 子查询如果不依赖父查询称为 **不相关子查询**。
- 示例:
   

    SELECT Sno, Sname, Sdept
    FROM Student
    WHERE Sdept IN (SELECT Sdept FROM Student WHERE Sname='刘晨');

**2. 带有比较运算符的子查询**
- 当子查询返回单值时,可以使用常见的比较运算符。
- 示例:

   SELECT Sno, Sname, Sdept
    FROM Student
    WHERE Sdept = (SELECT Sdept FROM Student WHERE Sname='刘晨');


- **相关子查询**: 当子查询依赖父查询时,称为相关子查询。
    - 示例:

   SELECT Sno, Cno
        FROM SC x
        WHERE Grade >= (SELECT AVG(Grade) FROM SC y WHERE y.Sno=x.Sno);

**3. 带有ANY(SOME)或ALL谓词的子查询**
- 当子查询返回多值时,可以使用 **ANY** 或 **ALL** 进行比较。
- **ANY (SOME)**: 与子查询返回的某个值进行比较。
- **ALL**: 与子查询返回的所有值进行比较。
- 示例 (ANY):
   

  SELECT Sname, Sage
    FROM Student
    WHERE Sage < ANY (SELECT Sage FROM Student WHERE Sdept='CS')
    AND Sdept != 'CS';


- 示例 (ALL):

 SELECT Sname, Sage
    FROM Student
    WHERE Sage < ALL (SELECT Sage FROM Student WHERE Sdept='CS')
    AND Sdept != 'CS';

**建议**: 虽然可以使用嵌套查询来实现多关系的查询,但很多关系数据库优化器对于嵌套查询的优化不够完善。因此,实际应用中应尽量使用连接查询。当然,根据实际情况和数据库的性能,可以选择合适的查询方式。

---

**总结**: 嵌套查询提供了在SQL中实现复杂逻辑的能力,不过需要根据实际情况和查询的复杂性来选择最佳的查询方法,以保证查询性能和结果的准确性。

**第3章 关系数据库标准语言SQL**

---

**3.4 数据查询**

---

**ANY,ALL和IN谓词的等价关系**

- 表3.7展示了ANY(或SOME)、ALL谓词与聚集函数、IN谓词的等价转换关系。
  
  - =ANY 等价于 IN
  - !=ANY 或 ◇ANY 等价于 NOT IN
  - <ANY 等价于 <MAX
  - >ALL 等价于 >MIN
  - ... (类似地对应其他关系)

---

**EXISTS谓词与子查询**

- EXISTS是一个存在量词,用于检查子查询是否有结果返回。它不返回具体的数据,只返回逻辑真值“true”或逻辑假值“false”。
  
  - 例3.60: 查询所有选修了1号课程的学生姓名。
   

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

  - EXISTS引出的子查询通常用*作为目标列,因为只关心是否有返回值。

---

**NOT EXISTS谓词**

与EXISTS相反,当子查询没有返回结果时,NOT EXISTS返回真值。

  - 例3.61: 查询没有选修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的子查询进行等价替换。

  - 例3.62: 查询选修了全部课程的学生姓名。

SELECT Sname
    FROM Student
    WHERE NOT EXISTS
    (SELECT * FROM Course
     WHERE NOT EXISTS
     (SELECT * FROM SC WHERE Sno=Student.Sno AND Cno=Course.Cno));

  - 例3.63: 查询至少选修了学生201215122选修的全部课程的学生号码。
   

 SELECT DISTINCT Sno
    FROM SC SCX
    WHERE NOT EXISTS
    (SELECT * FROM SC SCY
     WHERE SCY.Sno='201215122'
     AND NOT EXISTS
     (SELECT * FROM SC SCZ
      WHERE SCZ.Sno=SCX.Sno AND SCZ.Cno=SCY.Cno));

---

3.4.5 基于派生表的查询

---

当子查询位于FROM子句中,它会生成一个临时的派生表(derived table),而该派生表会作为主查询的查询对象。以下是对基于派生表查询的简明笔记:

1. **派生表的定义**:
    - 当子查询出现在FROM子句中,它创建一个临时的派生表。
    - 这个派生表可以作为主查询的查询对象。

2. **使用场景示例**:
    
    - **例1**:找出每个学生超过他自己选修课程平均成绩的课程号:
   

    SELECT Sno, Cno
        FROM SC, (SELECT Sno, Avg(Grade) FROM SC GROUP BY Sno) AS Avg_sc(avg_sno, avg_grade)
        WHERE SC.Sno = Avg_sc.avg_sno AND SC.Grade >= Avg_sc.avg_grade;


        解释:此查询首先创建一个名为Avg_sc的派生表,该表包含每个学生的学号及其平均成绩。接着,主查询将SC表与Avg_sc表连接起来,筛选出成绩超过平均成绩的课程号。

    - **例2**:查询所有选修了1号课程的学生姓名:
       

SELECT Sname
        FROM Student, (SELECT Sno FROM SC WHERE Cno='1') AS SC1
        WHERE Student.Sno = SC1.Sno;


        解释:这里,子查询为选修了1号课程的学生创建了一个派生表SC1。然后,主查询通过学号将Student表和SC1表连接,从而获取了学生姓名。

3. **命名和别名**:

    - 当通过FROM子句创建派生表时,尽管`AS`关键字可以省略,但派生表必须有一个别名。
    - 对于基本表,使用别名是可选的。

---

3.4.6 SELECT语句的一般格式

---

SELECT语句是SQL中最基础的查询语句,用于从一个或多个表中选择数据。以下是对SELECT语句的一般格式和其组成部分的笔记概述:

### **SELECT语句的基础格式**:

SELECT [ALL|DISTINCT] <目标列表达式> [AS 别名], ...
FROM <表名或视图名> [AS 别名], ... | (<SELECT语句>) [AS 别名]
[WHERE <条件表达式>]
[GROUP BY <列名1> [HAVING <条件表达式>]]
[ORDER BY <列名2> [ASC|DESC]];

---

### **1. 目标列表达式的格式**:

- `*` : 选择所有列。
- `<表名>.*` : 选择指定表中的所有列。
- `COUNT([DISTINCT|ALL] *)` : 计数。
- `[<表名>.]<属性列名表达式>, ...` : 选择指定的列或列的计算结果。
  - 其中,<属性列名表达式>可以是属性列、聚集函数或常量之间的任意算术运算。

### **2. 聚集函数的格式**:

- `函数名([DISTINCT|ALL] <列名>)` : 应用聚集函数到指定列上。

### **3. WHERE子句的条件表达式的格式**:

- `<属性列名> <比较符> <值>` : 基本比较。
- `<属性列名> [ANY|ALL] (SELECT语句)` : 子查询与ANY或ALL结合的比较。
- `<属性列名> [NOT] BETWEEN <值1> AND <值2>` : 范围比较。
- `<属性列名> [NOT] IN (<值列表> 或 SELECT语句)` : 列表比较。
- `<属性列名> [NOT] LIKE <匹配模式>` : 模式匹配。
- `<属性列名> IS [NOT] NULL` : NULL值检查。
- `[NOT] EXISTS (SELECT语句)` : 存在性检查。
- `{<条件表达式>}` : 其他复合条件表达式。

---

这些笔记提供了SELECT语句的一般格式和各个组成部分的详细解释。它们应该帮助你更好地理解和构造SQL SELECT查询。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1085623.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【MySQL】存储引擎简介、存储引擎特点、存储引擎区别

&#x1f40c;个人主页&#xff1a; &#x1f40c; 叶落闲庭 &#x1f4a8;我的专栏&#xff1a;&#x1f4a8; c语言 数据结构 javaEE 操作系统 Redis 石可破也&#xff0c;而不可夺坚&#xff1b;丹可磨也&#xff0c;而不可夺赤。 MySQL 一、MySQL体系结构二、存储引擎简介三…

zookeeper应用场景(一)

一、zookeeper客户端api 1、官方Java客户端api 引入zookeeper client依赖 <dependency><groupId>org.apache.zookeeper</groupId><artifactId>zookeeper</artifactId><version>3.9.0</version> </dependency> 1&#xff09…

解析项目管理任务跟踪器,助力项目进展掌握!

什么是项目管理任务跟踪器&#xff1f;项目管理任务跟踪器是项目经理简化计划、组织和执行项目任务直至完成的重要工具。该工具可帮助他们掌握需要完成的工作、确定收到的工作请求的优先级、完成项目并在预算范围内按时实现目标。 除了布置和跟踪任务之外&#xff0c;项目管理任…

unity2022版本 实现加减进度条

简介 在现代游戏开发中&#xff0c;用户界面 (UI) 扮演着至关重要的角色&#xff0c;它不仅为玩家提供信息&#xff0c;还增强了游戏的可玩性。加减进度条是一种常见的UI元素&#xff0c;它可以用于显示游戏中的进度、倒计时、资源管理和其他关键信息。在这篇博客中&#xff0…

【MySQL入门到精通-黑马程序员】MySQL基础篇-DQL

文章目录 前言一、DQL-介绍二、DQL-语法二、DQL-基本查询三、DQL-条件查询四、DQL-聚合函数五、DQL-分组查询六、DQL-排序查询七、DQL-分页查询八、DQL-执行顺序总结 前言 本专栏文章为观看黑马程序员《MySQL入门到精通》所做笔记&#xff0c;课程地址在这。如有侵权&#xff0…

安全设备和防火墙

文章目录 微步TDP态势感知防火墙防火墙的负载均衡 微步TDP态势感知 安全设备的主要功能在黑名单&#xff0c;只要记住黑名单的功能在哪即可 常用的是威胁选项卡的监控功能&#xff0c;监控模块会把实时的告警列出来&#xff0c;只要列出来就能分析流量是误报还是真实的&#x…

【重拾C语言】九、再论函数(指针、数组、结构体作参数;函数值返回指针、结构体;作用域)

目录 前言 九、再论函数 9.1 参数 9.1.1 参数的传递规则 9.1.2 指针作参数 9.1.3 数组作参数 9.1.4 结构体作参数 a. 直接用结构体变量作函数参数 b. 用指向结构体变量的指针作函数参数 9.2 函数值 9.2.1 返回指针值 9.2.2 返回结构体值 a. 返回结构体值 b. 返回…

高效防汛决策:山海鲸可视化系统助力城市防洪

随着全球气候的变化&#xff0c;自然灾害如洪水、台风等频发&#xff0c;防范洪水成为城市管理者和居民们亟待解决的重要问题。 洪水的威胁 洪水是自然界的杀手之一&#xff0c;不仅会造成大量的财产损失&#xff0c;还可能危害人们的生命安全。因此&#xff0c;预测、监测和有…

自我监督学习日志

学习日志 10.12 一天学不了一分钟&#xff0c;不知道为什么也就是了 今天一定要学一个小时&#xff01; 机器学习就是机器帮我们找一个函数 语音辨识&#xff0c;语音&#xff0c;声音讯号 转化为文字 帮我们找一个人类写不出来的复杂函数 类神经网络 输入 一张图片用一个矩…

2023-10-12 LeetCode每日一题(找出数组的串联值)

2023-10-12每日一题 一、题目编号 2562. 找出数组的串联值二、题目链接 点击跳转到题目位置 三、题目描述 给你一个下标从 0 开始的整数数组 nums 。 现定义两个数字的 串联 是由这两个数值串联起来形成的新数字。 例如&#xff0c;15 和 49 的串联是 1549 。 nums 的 串…

不容易解的题10.10

5.最长回文子串 5. 最长回文子串 - 力扣&#xff08;LeetCode&#xff09;https://leetcode.cn/problems/longest-palindromic-substring/?envTypelist&envIdZCa7r67M给一个字符串&#xff0c;让我们找最长回文子串 这题不用说&#xff0c;回文子串那一定是连续的&#…

【Node.js】路由

基础使用 写法一&#xff1a; // server.js const http require(http); const fs require(fs); const route require(./route) http.createServer(function (req, res) {const myURL new URL(req.url, http://127.0.0.1)route(res, myURL.pathname)res.end() }).listen…

Java从resources文件下载文档,文档没有后缀名

业务场景&#xff1a;因为公司会对excel文档加密&#xff0c;通过svn或者git上传代码也会对文档进行加密&#xff0c;所以这里将文档后缀去了&#xff0c;这样避免文档加密。 实现思路&#xff1a;将文档去掉后缀&#xff0c;放入resources下&#xff0c;获取输入流&#xff0…

12V手电钻保护板如何接线演示

爱做手工的小伙伴们肯定会用到手电钻&#xff0c;那么电池消耗完了&#xff0c;或要换的&#xff0c;或要自己动手做几个备用电源&#xff0c;关键点就是电路保护板的接线。废话不多说&#xff0c;直接上板子看实操。 文章目录 一、线路板图1、输入接线2、输出接线 二、接线方法…

java学习笔记001

java基础 java语言特点 面向对象&#xff0c;强类型&#xff0c;跨平台&#xff0c;解释型 基本概念&#xff08;JVM、JRE、JDK&#xff09; JVM java虚拟机 作用&#xff1a;加载.class文件 JRE Java运行环境 JREJVMJava系统类库 JDK Java开发工具包 JDKJRE编译&a…

英语——方法篇——单词——谐音法+拼音法——50个单词记忆

theatre&#xff0c;剧场&#xff0c;太后th吃eat热re食物&#xff0c;就去剧场了 loud dolphin&#xff0c;做do脸皮厚plh在。。。里 humid&#xff0c;hu湖mi米d的 blender&#xff0c;b爸lend借给er儿。 tragedy&#xff0c;tr土人

笔训【day4】

目录 选择题 1、进制 格式 2、 数组名在&和sizeof后&#xff0c;表数组本身 3、求二维数组某元素地址 ​编辑 ​编辑 4、x x & (x-1) 二进制位1的个数 ​编辑 5、斐波那契递归次数 编程题 1、计算糖果 2、进制转换 选择题 1、进制 格式 十进制转二进制就除…

ARM-day9作业

main.c: #include "uart.h"#include "key_it.h"int main(){char c;char *s;uart4_init(); //串口初始化//中断初始化key_it_config();key3_it_config();//完成GPIO相关初始化all_led_init();//风扇初始化fs_init();//蜂鸣器初始化fmq_init();while(1){…

只有线上出了bug,老板们才知道测试的价值?

有同学说&#xff0c;测试没价值&#xff0c;我们测试团队刚被拆散了。 也有同学说&#xff0c;公司不重视测试&#xff0c;我觉得我们就是测试得太好了。哪天线上出个bug&#xff0c;老板们就知道测试的价值了。 还有人给测试同学规划职业发展路径&#xff0c;就是不做测试&…

C语言 —— 操作符

1. 操作符的分类 算术操作符: - * / % 移位操作符: << >> 位操作符: & | ^ 赋值操作符: - 单目操作符 关系操作符 逻辑操作符 条件操作符 逗号表达式 下标引用、函数调用和结构成员 2. 算术操作符 - * / % 注意 /操作符: 对于整型的除法运算结果依然是整数…