### SQL语句教程知识点梳理####一、SQL基础指令详解##### 1. SELECT - **用途**:用于从数据库表中选取数据。 - **语法格式**:`SELECT column_name FROM table_name;` - **示例**:从`Store_Information`表中选取所有的`store_name`列。 - `SELECT store_name FROM Store_Information;` ##### 2. DISTINCT - **用途**:用于返回唯一的不同的值。 - **语法格式**:`SELECT DISTINCT column_name FROM table_name;` - **示例**:从`Store_Information`表中选取所有不同的`store_name`。 - `SELECT DISTINCT store_name FROM Store_Information;` ##### 3. WHERE - **用途**:用于指定从表中选取的数据应满足的条件。 - **语法格式**:`SELECT column_name FROM table_name WHERE condition;` - **示例**:从`Store_Information`表中选取`Sales`超过$1000的记录。 - `SELECT * FROM Store_Information WHERE Sales > 1000;` ####二、进阶查询操作符##### 1. AND / OR - **用途**:用于组合多个条件。 - **语法格式**:`SELECT column_name FROM table_name WHERE condition1 AND/OR condition2;` - **示例**:从`Store_Information`表中选取`Sales`超过$1000且`store_name`为`LosAngeles`的记录。 - `SELECT * FROM Store_Information WHERE Sales > 1000 AND store_name = 'LosAngeles';` ##### 2. IN - **用途**:用于指定多个可能的值之一。 - **语法格式**:`SELECT column_name FROM table_name WHERE column_name IN (value1, value2,...);` - **示例**:从`Store_Information`表中选取`store_name`为`LosAngeles`或`Boston`的记录。 - `SELECT * FROM Store_Information WHERE store_name IN ('LosAngeles', 'Boston');` ##### 3. BETWEEN - **用途**:用于选取介于两个值之间的记录。 - **语法格式**:`SELECT column_name FROM table_name WHERE column_name BETWEEN value1 AND value2;` - **示例**:从`Store_Information`表中选取`Sales`介于$200到$800之间的记录。 - `SELECT * FROM Store_Information WHERE Sales BETWEEN 200 AND 800;` ##### 4. LIKE - **用途**:用于在WHERE子句中搜索列中的指定模式。 - **语法格式**:`SELECT column_name FROM table_name WHERE column_name LIKE pattern;` - **示例**:从`Store_Information`表中选取`store_name`以`L`开头的记录。 - `SELECT * FROM Store_Information WHERE store_name LIKE 'L%';` ##### 5. ORDER BY - **用途**:用于对结果集进行排序。 - **语法格式**:`SELECT column_name FROM table_name ORDER BY column_name [ASC | DESC];` - **示例**:从`Store_Information`表中选取所有记录,并按`Sales`降序排列。 - `SELECT * FROM Store_Information ORDER BY Sales DESC;` ####三、聚合函数与分组##### 1. COUNT - **用途**:用于计算列中的行数。 - **语法格式**:`SELECT COUNT(column_name) FROM table_name;` - **示例**:计算`Store_Information`表中`store_name`的行数。 - `SELECT COUNT(store_name) FROM Store_Information;` ##### 2. GROUP BY - **用途**:用于结合具有相同值的行作为一组。 - **语法格式**:`SELECT column_name, COUNT(column_name) FROM table_name GROUP BY column_name;` - **示例**:计算`Store_Information`表中每个`store_name`的数量。 - `SELECT store_name, COUNT(store_name) FROM Store_Information GROUP BY store_name;` ##### 3. HAVING - **用途**:用于过滤被`GROUP BY`子句创建的结果集合。 - **语法格式**:`SELECT column_name, COUNT(column_name) FROM table_name GROUP BY column_name HAVING COUNT(column_name) > x;` - **示例**:计算`Store_Information`表中出现次数超过1次的`store_name`。 - `SELECT store_name, COUNT(store_name) FROM Store_Information GROUP BY store_name HAVING COUNT(store_name) > 1;` ####四、表格处理##### 1. CREATE TABLE - **用途**:用于创建新表。 - **语法格式**:`CREATE TABLE table_name (column1 datatype, column2 datatype, ...);` - **示例**:创建名为`Employees`的新表,包含`id`(整型)和`name`(字符型)两列。 - `CREATE TABLE Employees (id INT, name VARCHAR(255));` ##### 2. ALTER TABLE - **用途**:用于修改现有的表。 - **语法格式**:`ALTER TABLE table_name ADD column_name datatype;` - **示例**:向`Employees`表添加一列`age`。 - `ALTER TABLE Employees ADD age INT;` ##### 3. DROP TABLE - **用途**:用于删除现有的表。 - **语法格式**:`DROP TABLE table_name;` - **示例**:删除表`Employees`。 - `DROP TABLE Employees;` ##### 4. TRUNCATE TABLE - **用途**:用于删除表中的所有记录,但保留表结构。 - **语法格式**:`TRUNCATE TABLE table_name;` - **示例**:清空`Employees`表中的所有记录。 - `TRUNCATE TABLE Employees;` ####五、数据完整性约束##### 1. CONSTRAINT - **用途**:用于规定列的规则。 - **语法格式**:`ALTER TABLE table_name ADD CONSTRAINT constraint_name UNIQUE (column_name);` - **示例**:确保`Employees`表中的`id`列唯一。 - `ALTER TABLE Employees ADD CONSTRAINT emp_id_unique UNIQUE (id);` ##### 2. NOT NULL - **用途**:用于规定某列不允许为空。 - **语法格式**:`ALTER TABLE table_name ALTER COLUMN column_name SET NOT NULL;` - **示例**:确保`Employees`表中的`name`列不允许为空。 - `ALTER TABLE Employees ALTER COLUMN name SET NOT NULL;` ##### 3. UNIQUE - **用途**:用于规定某列必须是唯一的。 - **语法格式**:`ALTER TABLE table_name ADD CONSTRAINT constraint_name UNIQUE (column_name);` - **示例**:确保`Employees`表中的`id`列唯一。 - `ALTER TABLE Employees ADD CONSTRAINT emp_id_unique UNIQUE (id);` ##### 4. CHECK - **用途**:用于规定列的约束条件。 - **语法格式**:`ALTER TABLE table_name ADD CONSTRAINT constraint_name CHECK (column_name operator value);` - **示例**:确保`Employees`表中的`age`列大于等于18岁。 - `ALTER TABLE Employees ADD CONSTRAINT emp_age_check CHECK (age >= 18);` ####六、主键与外键##### 1.主键- **用途**:用于唯一标识表中的每一行记录。 - **语法格式**:`ALTER TABLE table_name ADD PRIMARY KEY (column_name);` - **示例**:设置`Employees`表中的`id`列为`PRIMARY KEY`。 - `ALTER TABLE Employees ADD PRIMARY KEY (id);` ##### 2.外键- **用途**:用于建立表间的关联关系。 - **语法格式**:`ALTER TABLE table_name ADD CONSTRAINT constraint_name FOREIGN KEY (column_name) REFERENCES other_table_name(other_column_name);` - **示例**:设置`Orders`表中的`employee_id`列为指向`Employees`表中`id`列的`FOREIGN KEY`。 - `ALTER TABLE Orders ADD CONSTRAINT ord_emp_id_fk FOREIGN KEY (employee_id) REFERENCES Employees(id);` ####七、视图与索引##### 1. CREATE VIEW - **用途**:用于创建视图。 - **语法格式**:`CREATE VIEW view_name AS SELECT column1, column2,... FROM table_name WHERE condition;` - **示例**:创建一个视图`HighSalesView`,显示销售额高于$1000的商店名称和销售额。 - `CREATE VIEW HighSalesView AS SELECT store_name, Sales FROM Store_Information WHERE Sales > 1000;` ##### 2. CREATE INDEX - **用途**:用于创建索引以加快数据检索速度。 - **语法格式**:`CREATE INDEX index_name ON table_name (column_name);` - **示例**:在`Store_Information`表的`store_name`列上创建索引`store_idx`。 - `CREATE INDEX store_idx ON Store_Information (store_name);` ####八、字符串处理函数##### 1. CONCATENATE - **用途**:用于连接两个或多个表达式的值。 - **语法格式**:`SELECT CONCATENATE(column_name1, column_name2,...) FROM table_name;` - **示例**:连接`Employees`表中的`first_name`和`last_name`列。 - `SELECT CONCATENATE(first_name, ' ', last_name) AS full_name FROM Employees;` ##### 2. SUBSTRING - **用途**:用于提取字符串的一部分。 - **语法格式**:`SELECT SUBSTRING(column_name, start, length) FROM table_name;` - **示例**:提取`Employees`表中`name`列的前三个字符。 - `SELECT SUBSTRING(name, 1, 3) AS short_name FROM Employees;` ##### 3. TRIM - **用途**:用于移除字符串首尾的空白字符。 - **语法格式**:`SELECT TRIM(column_name) FROM table_name;` - **示例**:移除`Employees`表中`name`列两端的空白字符。 - `SELECT TRIM(name) FROM Employees;` ####九、进阶SQL概念##### 1. UNION - **用途**:用于合并两个或多个SELECT语句的结果集。 - **语法格式**:`SELECT column_name(s) FROM table1 UNION SELECT column_name(s) FROM table2;` - **示例**:合并`Employees`表中的`first_name`与`last_name`列。 - `SELECT first_name FROM Employees UNION SELECT last_name FROM Employees;` ##### 2. UNION ALL - **用途**:与UNION类似,但不会删除重复的行。 - **语法格式**:`SELECT column_name(s) FROM table1 UNION ALL SELECT column_name(s) FROM table2;` - **示例**:合并`Employees`表中的`first_name`与`last_name`列,包括重复项。 - `SELECT first_name FROM Employees UNION ALL SELECT last_name FROM Employees;` ##### 3. INTERSECT - **用途**:用于返回两个或多个SELECT语句的结果集中的公共行。 - **语法格式**:`SELECT column_name(s) FROM table1 INTERSECT SELECT column_name(s) FROM table2;` - **示例**:找出`Employees`表中`first_name`列与`last_name`列的公共部分。 - `SELECT first_name FROM Employees INTERSECT SELECT last_name FROM Employees;` ##### 4. MINUS - **用途**:用于返回在第一个SELECT语句的结果集中但不在第二个SELECT语句的结果集中的行。 - **语法格式**:`SELECT column_name(s) FROM table1 MINUS SELECT column_name(s) FROM table2;` - **示例**:找出`Employees`表中`first_name`列中不存在于`last_name`列中的名字。 - `SELECT first_name FROM Employees MINUS SELECT last_name FROM Employees;` ####十、子查询- **用途**:一个查询嵌套在另一个查询中的查询。 - **语法格式**:`SELECT column_name FROM outer_query WHERE column_name = (SELECT column_name FROM inner_query);` - **示例**:找出`Employees`表中`salary`高于平均工资的员工。 - `SELECT * FROM Employees WHERE salary > (SELECT AVG(salary) FROM Employees);` ####十一、复杂计算- **算排名**:使用窗口函数如`RANK()`或`ROW_NUMBER()`等来进行排名。 - **算中位数**:通过组合使用子查询和聚合函数实现中位数的计算。 - **算总合百分比**:通过计算总数和各分类的比例来得出百分比。 - **算累积总合百分比**:在总合百分比的基础上进一步进行累积计算。通过以上知识点的详细介绍,我们可以看出SQL语言的强大功能不仅在于基本的数据查询,还涉及到了数据处理、数据分析等多个方面。熟练掌握这些知识点对于成为一名合格的数据库管理员或数据分析师至关重要。