### 经典SQL语句详解
#### 一、基础操作
**1. 创建数据库**
- **语法**: `CREATE DATABASE database-name;`
- **说明**: 此命令用于在数据库管理系统中创建一个新的数据库。`database-name`应替换为所要创建数据库的实际名称。
**2. 删除数据库**
- **语法**: `DROP DATABASE dbname;`
- **说明**: 此命令用于删除一个现有的数据库。`dbname`应替换为待删除数据库的名称。执行此操作前需确保没有正在运行的事务或连接到该数据库。
**3. 备份SQL Server**
- **创建备份设备**:
- **语法**: 使用`sp_addumpdevice`存储过程。
- **示例**: `USE master EXEC sp_addumpdevice 'disk', 'testBack', 'c:\mssql7backup\MyNwind_1.dat';`
- **说明**: 上述命令创建了一个名为`testBack`的备份设备,其物理位置在`c:\mssql7backup\MyNwind_1.dat`。
- **开始备份**:
- **语法**: 使用`BACKUP DATABASE`语句。
- **示例**: `BACKUP DATABASE pubs TO testBack;`
- **说明**: 将`pubs`数据库的数据备份到之前创建的`testBack`设备上。
**4. 创建新表**
- **语法**: `CREATE TABLE tabname (col1 type1 [NOT NULL][PRIMARY KEY], col2 type2 [NOT NULL], ...);`
- **说明**: 用于定义一个新的数据库表结构。`tabname`为表名,`col1`, `col2`, ...为列名,`type1`, `type2`, ...分别为各列的数据类型。
**5. 删除表**
- **语法**: `DROP TABLE tabname;`
- **说明**: 用于删除指定的表。`tabname`应替换为待删除表的名称。
**6. 增加一个列**
- **语法**: `ALTER TABLE tabname ADD COLUMN col type;`
- **说明**: 在现有表中添加新的列。需要注意的是,在某些数据库系统中,如DB2,列一旦添加便无法删除,且数据类型通常也不可更改,除非重建整个表。
**7. 添加/删除主键**
- **添加主键**:
- **语法**: `ALTER TABLE tabname ADD PRIMARY KEY (col);`
- **说明**: 将指定列设置为主键。
- **删除主键**:
- **语法**: `ALTER TABLE tabname DROP PRIMARY KEY (col);`
- **说明**: 移除指定列上的主键约束。
**8. 创建/删除索引**
- **创建索引**:
- **语法**: `CREATE [UNIQUE] INDEX idxname ON tabname (col,...);`
- **说明**: 索引用于加速数据检索速度。`UNIQUE`关键字表示索引值必须唯一。
- **删除索引**:
- **语法**: `DROP INDEX idxname;`
- **说明**: 索引一旦创建,若需更改则需先删除再重建。
**9. 创建/删除视图**
- **创建视图**:
- **语法**: `CREATE VIEW viewname AS SELECT statement;`
- **说明**: 视图是一种虚拟表,基于SELECT语句的结果集。
- **删除视图**:
- **语法**: `DROP VIEW viewname;`
- **说明**: 用于移除已创建的视图。
#### 二、基本SQL语句
**10. 基本SQL语句**
- **选择**:
- **语法**: `SELECT * FROM table1 WHERE 范围;`
- **说明**: 从指定表中选择满足条件的记录。
- **插入**:
- **语法**: `INSERT INTO table1 (field1, field2) VALUES (value1, value2);`
- **说明**: 向指定表中插入一条新记录。
- **删除**:
- **语法**: `DELETE FROM table1 WHERE 范围;`
- **说明**: 从指定表中删除满足条件的记录。
- **更新**:
- **语法**: `UPDATE table1 SET field1 = value1 WHERE 范围;`
- **说明**: 更新指定表中满足条件的记录字段。
- **查找**:
- **语法**: `SELECT * FROM table1 WHERE field1 LIKE '%value1%';`
- **说明**: 搜索包含特定模式的记录。
- **排序**:
- **语法**: `SELECT * FROM table1 ORDER BY field1, field2 [DESC];`
- **说明**: 对查询结果进行排序。
- **聚合函数**
- **总数**: `SELECT COUNT(*) as total_count FROM table1;`
- **求和**: `SELECT SUM(field1) as sum_value FROM table1;`
- **平均**: `SELECT AVG(field1) as avg_value FROM table1;`
- **最大值**: `SELECT MAX(field1) as max_value FROM table1;`
- **最小值**: `SELECT MIN(field1) as min_value FROM table1;`
#### 三、高级查询运算词
**11. 高级查询运算词**
- **UNION运算符**: 结合两个结果集,自动去除重复行。
- **EXCEPT运算符**: 返回第一个集合中存在而第二个集合中不存在的行。
- **INTERSECT运算符**: 返回两个集合中都存在的行。
**12. 使用外连接**
- **左外连接(Left Outer Join)**: 结果集中包括左表所有记录以及右表中与左表匹配的记录。
- **右外连接(Right Outer Join)**: 结果集中包括右表所有记录以及左表中与右表匹配的记录。
- **全外连接(Full/Cross Outer Join)**: 包含左表和右表中的所有记录。
#### 四、分组: Group by
- **语法**: `GROUP BY`子句用于对数据进行分组,常与聚合函数如COUNT(), SUM(), AVG(), MAX(), MIN()结合使用,以提供分组后的统计数据。
- **说明**: 分组后,查询结果只显示每组的相关信息,而非每个单独的记录。