结构化查询语言(Structured Query Language)简称SQL,是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。
本讲稿简共有15章,内容洁明了,直观易懂,无论作为课程讲稿或是自学参考都有很强的实用性。
本讲稿虽以SQL Server为背景,但SQL作为一种通用语言,对于其他关系型数据库如MySQL也是适用的。
### SQL语言简明讲稿-第二章:约束与排序数据
#### 一、章节概述
在本章中,我们将深入探讨如何使用SQL语言对数据库中的数据进行约束和排序。SQL,即结构化查询语言(Structured Query Language),是一种专门用于管理和查询关系型数据库的标准语言。通过学习本章内容,您将能够掌握以下技能:
- 如何使用`WHERE`子句来限制查询结果中的行;
- 如何对查询结果进行排序。
虽然本讲稿以SQL Server为背景,但所介绍的概念和技术同样适用于其他关系型数据库管理系统(RDBMS),例如MySQL、Oracle等。
#### 二、使用`WHERE`子句限制返回的行
在SQL查询中,`WHERE`子句用于指定条件,以便从表中筛选出符合特定条件的数据行。这对于提高查询效率、减少数据处理量非常关键。
**基本语法**:
```sql
SELECT * | {[DISTINCT] column | expression [alias], ...}
FROM table
[WHERE condition(s)];
```
- `SELECT`子句用于指定查询结果中需要返回的列或表达式。
- `FROM`子句指定查询的数据源表。
- `WHERE`子句则用来设置筛选条件,只有满足这些条件的记录才会被返回。
**示例**:假设我们有一个名为`employee`的表,并希望找到所有job_id为10的员工。
```sql
SELECT *
FROM employee
WHERE job_id = 10;
```
#### 三、字符串和日期的处理
在处理字符串和日期类型的值时,需要注意以下几个方面:
- 字符串值必须用单引号括起来。
- 日期值也应使用单引号括起来,并且遵循特定的格式,通常是`yyyy-mm-dd`。
- SQL支持对日期进行精确到秒的比较,如`'1993-10-09 00:00:00.000'`。
**示例**:查找姓氏为"Cruz"的所有员工及其入职日期。
```sql
SELECT lname, job_id, hire_date
FROM employee
WHERE lname = 'Cruz';
```
**示例**:查找入职日期为1993年10月9日的所有员工。
```sql
SELECT lname, job_id, hire_date
FROM employee
WHERE hire_date = '1993-10-09';
```
#### 四、使用比较条件
在SQL中,可以使用各种比较操作符来进一步细化`WHERE`子句中的条件。
**比较操作符**:
- `=`:等于
- `>`:大于
- `>=`:大于等于
- `<`:小于
- `<=`:小于等于
- `<>` 或 `!=`:不等于
**示例**:查找所有职位等级(job_lvl)小于等于200的员工。
```sql
SELECT lname, job_lvl
FROM employee
WHERE job_lvl <= 200;
```
#### 五、使用BETWEEN...AND...和其他比较条件
除了基本的比较操作符外,SQL还提供了其他几种用于条件判断的构造:
- **BETWEEN...AND...**:用于判断某值是否位于两个给定值之间(包括这两个值本身)。
- **IN**:用于检查某值是否属于一组指定的值。
- **LIKE**:用于模式匹配,常用于字符串的模糊查询。
- **IS NULL**:用于判断某值是否为空。
**示例**:查找所有职位等级介于100至200之间的员工。
```sql
SELECT lname, job_lvl
FROM employee
WHERE job_lvl BETWEEN 100 AND 200;
```
**示例**:查找所有职位等级为100、170或200的员工。
```sql
SELECT emp_id, lname, job_id, job_lvl
FROM employee
WHERE job_lvl IN (100, 170, 200);
```
**示例**:查找所有名字以"M"开头的员工。
```sql
SELECT fname
FROM employee
WHERE fname LIKE 'M%';
```
**示例**:查找所有title_id为空的书籍。
```sql
SELECT title_id, title, type, price
FROM titles
WHERE price IS NULL;
```
#### 六、总结
通过本章的学习,您已经掌握了如何使用`WHERE`子句来限制查询结果中的行,以及如何使用各种比较条件来进一步细化查询条件。此外,还了解了如何处理字符串和日期类型的数据,以及如何使用`BETWEEN...AND...`、`IN`、`LIKE`和`IS NULL`等高级条件。这些技能对于进行复杂的数据分析和管理至关重要。在后续章节中,我们将继续探索更多关于SQL的知识点。