### 经典SQL语句详解
#### 一、基础操作
**1. 创建数据库**
- **语法**: `CREATE DATABASE database-name;`
- **说明**: 此命令用于创建一个新的数据库实例。`database-name`应替换为实际数据库名称。
**2. 删除数据库**
- **语法**: `DROP DATABASE dbname;`
- **说明**: 该命令用于删除指定的数据库。注意,在执行此操作前应确保不再需要该数据库中的数据,因为删除操作通常是不可逆的。
**3. 备份 SQL Server 数据库**
- **步骤1**: 创建备份设备
- **语法**: 使用存储过程 `sp_addumpdevice` 创建备份设备。
```sql
USE master;
EXEC sp_addumpdevice 'disk', 'testBack', 'c:\mssql7backup\MyNwind_1.dat';
```
- **说明**: 这里创建了一个名为 `testBack` 的备份设备,并指定了备份文件的位置。
- **步骤2**: 执行备份
- **语法**: 使用 `BACKUP DATABASE` 命令进行备份。
```sql
BACKUP DATABASE pubs TO testBack;
```
- **说明**: 将 `pubs` 数据库备份到之前创建的备份设备 `testBack`。
**4. 创建新表**
- **语法**:
```sql
CREATE TABLE tabname (
col1 type1 [NOT NULL] [PRIMARY KEY],
col2 type2 [NOT NULL],
...
);
```
- **说明**: 该命令用于创建新表。可以指定列名(`col1`, `col2`等)、数据类型(`type1`, `type2`等)以及约束条件如 `NOT NULL` 和 `PRIMARY KEY`。
- **通过已有表创建新表**
- **方法A**: 使用 `LIKE` 关键字
```sql
CREATE TABLE tab_new LIKE tab_old;
```
- **方法B**: 使用 `SELECT` 语句定义新表结构
```sql
CREATE TABLE tab_new AS SELECT col1, col2... FROM tab_old DEFINITION ONLY;
```
**5. 删除表**
- **语法**: `DROP TABLE tabname;`
- **说明**: 该命令用于删除指定的表。
**6. 修改表**
- **添加列**
- **语法**: `ALTER TABLE tabname ADD COLUMN col type;`
- **说明**: 向现有表中添加新的列。
- **添加主键**
- **语法**: `ALTER TABLE tabname ADD PRIMARY KEY (col);`
- **说明**: 为表添加主键约束。
- **删除主键**
- **语法**: `ALTER TABLE tabname DROP PRIMARY KEY;`
- **说明**: 移除表上的主键约束。
**7. 索引管理**
- **创建索引**
- **语法**: `CREATE [UNIQUE] INDEX idxname ON tabname (col...);`
- **说明**: 用于提高查询性能。`UNIQUE` 表示索引值唯一。
- **删除索引**
- **语法**: `DROP INDEX idxname;`
- **说明**: 用于移除现有的索引。
**8. 视图管理**
- **创建视图**
- **语法**: `CREATE VIEW viewname AS SELECT statement;`
- **说明**: 用于创建基于一个或多个表的虚拟表。
- **删除视图**
- **语法**: `DROP VIEW viewname;`
- **说明**: 用于移除视图。
**9. 基本 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;`
**10. 高级查询运算符**
- **UNION 运算符**
- **语法**: `SELECT ... FROM table1 UNION SELECT ... FROM table2;`
- **说明**: 返回两个查询结果的并集,并自动去除重复行。若要保留所有行,可使用 `UNION ALL`。
- **EXCEPT 运算符**
- **语法**: `SELECT ... FROM table1 EXCEPT SELECT ... FROM table2;`
- **说明**: 返回在第一个查询结果中存在但在第二个查询结果中不存在的行。若要保留所有行,可使用 `EXCEPT ALL`。
- **INTERSECT 运算符**
- **语法**: `SELECT ... FROM table1 INTERSECT SELECT ... FROM table2;`
- **说明**: 返回两个查询结果中的交集。若要保留所有行,可使用 `INTERSECT ALL`。
**11. 外连接**
- **LEFT JOIN**
- **语法**: `SELECT a.*, b.* FROM a LEFT OUTER JOIN b ON a.a = b.c;`
- **说明**: 返回左表中所有的行和右表中与之匹配的行。如果右表中没有匹配,则用 `NULL` 填充。
- **RIGHT JOIN**
- **语法**: `SELECT a.*, b.* FROM a RIGHT OUTER JOIN b ON a.a = b.c;`
- **说明**: 返回右表中所有的行和左表中与之匹配的行。如果左表中没有匹配,则用 `NULL` 填充。
- **FULL JOIN**
- **语法**: `SELECT a.*, b.* FROM a FULL OUTER JOIN b ON a.a = b.c;`
- **说明**: 返回两个表中所有匹配的行以及所有不匹配的行。
**12. 分组**
- **语法**: `SELECT col1, COUNT(col2) AS count_col2 FROM table GROUP BY col1;`
- **说明**: 对表中的数据进行分组,并对每组进行统计计算。可以结合聚合函数使用。
以上是关于经典SQL语句的详细介绍。这些语句是数据库管理的基础,掌握它们对于进行高效的数据管理和分析至关重要。通过这些语句,你可以轻松地创建、查询、修改和管理数据库中的数据。