###经典SQL语句大全知识点详解####一、基础操作**1.创建数据库** - **语法**: `CREATE DATABASE database-name;` - **说明**:此命令用于创建一个新的数据库。`database-name`参数是你希望创建的数据库名称。 **2.删除数据库** - **语法**: `DROP DATABASE dbname;` - **说明**:此命令用于删除一个现有的数据库。`dbname`参数是你要删除的数据库名称。 **3.备份SQL Server** - **步骤**: 1. **创建备份设备**:使用`sp_addumpdevice`存储过程来创建备份设备。 - **语法**: `USE master; EXEC sp_addumpdevice 'disk', 'testBack', 'c:mssql7backupMyNwind_1.dat';` - **说明**:这一行代码创建了一个名为`testBack`的备份设备,并指定了备份文件的位置为`c:mssql7backupMyNwind_1.dat`。 2. **执行备份**:使用`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.根据已有表创建新表** - **方法A**: `CREATE TABLE tab_new LIKE tab_old;` - **方法B**: `CREATE TABLE tab_new AS SELECT col1, col2,... FROM tab_old DEFINITION ONLY;` - **说明**:方法A是直接复制一个表的结构到另一个表。方法B则是在创建新表的同时,只复制旧表的定义而不复制数据。 **6.删除表** - **语法**: `DROP TABLE tabname;` - **说明**:该命令用于删除指定的表。 **7.增加一个列** - **语法**: `ALTER TABLE tabname ADD COLUMN col type;` - **说明**:在已存在的表中添加一个新列。需要注意的是,在某些数据库系统中,如DB2,一旦增加了列之后就不能删除该列,而且除了增加`VARCHAR`类型列的长度之外,列的数据类型也无法更改。 **8.添加/删除主键** - **添加主键**: `ALTER TABLE tabname ADD PRIMARY KEY (col);` - **删除主键**: `ALTER TABLE tabname DROP PRIMARY KEY (col);` - **说明**:主键是一个或多个字段的组合,用于唯一标识表中的每一条记录。这些命令分别用于向表中添加或删除主键。 **9.创建/删除索引** - **创建索引**: `CREATE [UNIQUE] INDEX idxname ON tabname (col,...);` - **删除索引**: `DROP INDEX idxname;` - **说明**:索引是用来加快数据检索速度的对象。`UNIQUE`关键字表示索引值必须是唯一的。一旦创建了索引,它就无法修改,只能删除后重新创建。 **10.创建/删除视图** - **创建视图**: `CREATE VIEW viewname AS SELECT statement;` - **删除视图**: `DROP VIEW viewname;` - **说明**:视图是一种虚拟表,其内容由存储在另一张表中的数据组成。视图可以简化复杂的查询操作。 ####二、基本SQL语句**11.基本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;` - **说明**:这些是SQL中最常用的基本操作命令,涵盖了从表中获取数据、插入数据、删除数据、更新数据等操作。 ####三、高级查询运算词**12.高级查询运算词** - **UNION运算符** - **语法**: `SELECT ... FROM table1 UNION [ALL] SELECT ... FROM table2;` - **说明**: `UNION`运算符用于合并两个或多个`SELECT`语句的结果集。默认情况下会自动去除重复的行。如果加上`ALL`关键字,则不会去除重复行。 - **EXCEPT运算符** - **语法**: `SELECT ... FROM table1 EXCEPT [ALL] SELECT ... FROM table2;` - **说明**: `EXCEPT`运算符返回在第一个`SELECT`语句中出现但在第二个`SELECT`语句中没有出现的行。加上`ALL`关键字则不会去除重复行。 - **INTERSECT运算符** - **语法**: `SELECT ... FROM table1 INTERSECT [ALL] SELECT ... FROM table2;` - **说明**: `INTERSECT`运算符返回同时出现在两个`SELECT`语句结果集中的行。加上`ALL`关键字则不会去除重复行。 ####四、使用外连接**13.外连接** - **LEFT (OUTER) JOIN**:左外连接- **语法**: `SELECT a.a, a.b, a.c, b.d, b.f FROM a LEFT OUTER JOIN b ON a.a = b.c;` - **说明**:结果集中包含了左表中的所有行,即使右表中没有与之匹配的行。对于右表中没有匹配的行,结果集中的列显示为`NULL`。 - **RIGHT (OUTER) JOIN**:右外连接- **语法**:类似于左外连接,但是以右表为主。 - **说明**:结果集中包含了右表中的所有行,即使左表中没有与之匹配的行。对于左表中没有匹配的行,结果集中的列显示为`NULL`。 - **FULL/CROSS (OUTER) JOIN**:全外连接- **语法**: `SELECT ... FROM table1 FULL/CROSS OUTER JOIN table2 ON condition;` - **说明**:结果集包含所有可能的匹配行,以及左表和右表中不匹配的行。 ####五、分组: GROUP BY - **语法**: `SELECT column_name, COUNT(*) FROM table_name GROUP BY column_name;` - **说明**: `GROUP BY`子句用于结合`SELECT`语句,对结果集按照一个或多个列进行分组。通常与聚合函数一起使用,比如`COUNT()`, `SUM()`, `AVG()`等,以便计算每个分组的统计信息。