文集文档索引

SQL


  • 文集信息
  • 目录大纲
  • 最新文档
  • 知识宇宙

文集详情

文集导读

SQL 基础 1. SQL 概述 SQL 是一种声明性语言,意味着你只需要描述你想要的结果,而无需指定如何实现。它包含多种类型的语句,用于定义和操作数据库对象,以及查询和修改数据。 SQL 的主要组成部分: DDL (Data Definition Language): 用于定义数据库结构,如创建、修改和删除数据库、表、索引等。 常用命令:CREATE, ALTER, DROP。 DML (Data Manipulation Language): 用于操作数据库中的数据,如插入、更新和删除数据。常用命令:INSERT, UPDATE, DELETE。 DQL (Data Query Language): 用于查询数据库中的数据。常用命令:SELECT。 DCL (Data Control Language): 用于控制数据库的访问权限和事务。常用命令:GRANT, REVOKE, COMMIT, ROLLBACK。 2. 数据库与表 在 SQL 中,数据存储在数据库中,数据库包含多个表。表由行 (记录) 和列 (字段) 组成,每一列都有一个特定的数据类型。 2.1 创建数据库 这条语句创建一个名为 的数据库。 2.2 选择数据库 这条语句选择 作为当前使用的数据库。 2.

SQL 基础

1. SQL 概述

SQL 是一种声明性语言,意味着你只需要描述你想要的结果,而无需指定如何实现。它包含多种类型的语句,用于定义和操作数据库对象,以及查询和修改数据。

SQL 的主要组成部分:

  • DDL (Data Definition Language): 用于定义数据库结构,如创建、修改和删除数据库、表、索引等。 常用命令:CREATE, ALTER, DROP。

  • DML (Data Manipulation Language): 用于操作数据库中的数据,如插入、更新和删除数据。常用命令:INSERT, UPDATE, DELETE。

  • DQL (Data Query Language): 用于查询数据库中的数据。常用命令:SELECT。

  • DCL (Data Control Language): 用于控制数据库的访问权限和事务。常用命令:GRANT, REVOKE, COMMIT, ROLLBACK。

2. 数据库与表

在 SQL 中,数据存储在数据库中,数据库包含多个表。表由行 (记录) 和列 (字段) 组成,每一列都有一个特定的数据类型。

2.1 创建数据库

CREATE DATABASE my_database;

这条语句创建一个名为 my_database 的数据库。

2.2 选择数据库

USE my_database;

这条语句选择 my_database 作为当前使用的数据库。

2.3 创建表

CREATE TABLE employees ( id INT PRIMARY KEY, first_name VARCHAR(50), last_name VARCHAR(50), email VARCHAR(100), hire_date DATE, salary DECIMAL(10, 2) );

这条语句创建了一个名为 employees 的表,包含以下列:

  • id: 整数类型,作为主键 (PRIMARY KEY),唯一标识每一行数据。

  • first_name: 字符串类型,最大长度为 50。

  • last_name: 字符串类型,最大长度为 50。

  • email: 字符串类型,最大长度为 100。

  • hire_date: 日期类型。

  • salary: 小数类型,总共 10 位数,其中 2 位小数。

2.4 数据类型

SQL 支持多种数据类型,常用的数据类型包括:

  • INT/INTEGER: 整数

  • VARCHAR(n): 字符串,最大长度为 n

  • CHAR(n): 固定长度字符串,长度为 n

  • DATE: 日期

  • DATETIME: 日期和时间

  • DECIMAL(p, s): 小数,总共 p 位数,其中 s 位小数

  • BOOLEAN: 布尔值 (TRUE/FALSE)

3. 数据操作

3.1 插入数据

INSERT INTO employees (id, first_name, last_name, email, hire_date, salary) VALUES (1, 'John', 'Doe', 'john.doe@example.com', '2023-01-15', 60000.00); INSERT INTO employees (id, first_name, last_name, email, hire_date, salary) VALUES (2, 'Jane', 'Smith', 'jane.smith@example.com', '2022-05-20', 75000.00);

这两条语句分别向 employees 表中插入了两条记录。

3.2 查询数据

SELECT * FROM employees;

这条语句查询 employees 表中的所有列和所有行。 * 表示选择所有列。

SELECT first_name, last_name, salary FROM employees;

这条语句只查询 employees 表中的 first_name, last_namesalary 列。

3.3 更新数据

UPDATE employees SET salary = 80000.00 WHERE id = 2;

这条语句将 employees 表中 id 为 2 的记录的 salary 更新为 80000.00。

3.4 删除数据

DELETE FROM employees WHERE id = 1;

这条语句从 employees 表中删除 id 为 1 的记录。

4. 数据查询 (SELECT 语句)

SELECT 语句是 SQL 中最核心的语句,用于从数据库中检索数据。

4.1 基本 SELECT 语句

SELECT column1, column2, ... FROM table_name WHERE condition;
  • SELECT: 指定要查询的列。

  • FROM: 指定要查询的表。

  • WHERE: 指定查询条件,用于过滤数据。

4.2 WHERE 子句

WHERE 子句用于指定查询条件。可以使用比较运算符、逻辑运算符等构建复杂的查询条件。

  • 比较运算符: =, !=, >, <, >=, <=

  • 逻辑运算符: AND, OR, NOT

  • 其他运算符: BETWEEN, LIKE, IN, IS NULL

示例:

-- 查询 salary 大于 70000 的员工 SELECT first_name, last_name, salary FROM employees WHERE salary > 70000; -- 查询 hire_date 在 2022-01-01 和 2022-12-31 之间的员工 SELECT first_name, last_name, hire_date FROM employees WHERE hire_date BETWEEN '2022-01-01' AND '2022-12-31'; -- 查询 first_name 以 'J' 开头的员工 SELECT first_name, last_name FROM employees WHERE first_name LIKE 'J%'; -- 查询 email 为空的员工 SELECT first_name, last_name, email FROM employees WHERE email IS NULL; -- 查询 id 为 1 或 2 的员工 SELECT first_name, last_name, id FROM employees WHERE id IN (1, 2);

4.3 ORDER BY 子句

ORDER BY 子句用于对查询结果进行排序。

SELECT column1, column2, ... FROM table_name ORDER BY column1 [ASC | DESC], column2 [ASC | DESC], ...;
  • ASC: 升序 (默认)。

  • DESC: 降序。

示例:

-- 按照 salary 降序排列员工 SELECT first_name, last_name, salary FROM employees ORDER BY salary DESC; -- 按照 last_name 升序排列,然后按照 first_name 升序排列 SELECT first_name, last_name FROM employees ORDER BY last_name ASC, first_name ASC;

4.4 GROUP BY 子句

GROUP BY 子句用于将查询结果按照指定的列进行分组。通常与聚合函数一起使用,如 COUNT, SUM, AVG, MIN, MAX

SELECT column1, aggregate_function(column2) FROM table_name WHERE condition GROUP BY column1 ORDER BY column1;

示例:

-- 统计每个部门的员工数量 (假设 employees 表有一个 department_id 列) SELECT department_id, COUNT(*) AS employee_count FROM employees GROUP BY department_id ORDER BY department_id; -- 计算每个部门的平均工资 SELECT department_id, AVG(salary) AS average_salary FROM employees GROUP BY department_id ORDER BY department_id;

4.5 HAVING 子句

HAVING 子句用于过滤分组后的数据,类似于 WHERE 子句,但作用于分组后的结果。

SELECT column1, aggregate_function(column2) FROM table_name WHERE condition GROUP BY column1 HAVING condition ORDER BY column1;

示例:

-- 统计员工数量大于 5 的部门 SELECT department_id, COUNT(*) AS employee_count FROM employees GROUP BY department_id HAVING COUNT(*) > 5 ORDER BY department_id;

4.6 LIMIT 子句

LIMIT 子句用于限制查询结果的行数。

SELECT column1, column2, ... FROM table_name WHERE condition ORDER BY column1 LIMIT row_count; SELECT column1, column2, ... FROM table_name WHERE condition ORDER BY column1 LIMIT offset, row_count;
  • row_count: 指定要返回的行数。

  • offset: 指定要跳过的行数。

示例:

-- 查询 salary 最高的 3 个员工 SELECT first_name, last_name, salary FROM employees ORDER BY salary DESC LIMIT 3; -- 查询 salary 排名 4-6 的员工 SELECT first_name, last_name, salary FROM employees ORDER BY salary DESC LIMIT 3, 3; -- 跳过前 3 行,返回接下来的 3 行

5. 连接 (JOIN)

连接用于将来自多个表的数据组合在一起。

5.1 INNER JOIN

INNER JOIN 返回两个表中都匹配的行。

SELECT column1, column2, ... FROM table1 INNER JOIN table2 ON table1.column_name = table2.column_name;

示例:

假设我们有 employees 表和 departments 表,employees.department_id 对应 departments.id

-- 查询每个员工的姓名和部门名称 SELECT e.first_name, e.last_name, d.department_name FROM employees e INNER JOIN departments d ON e.department_id = d.id;

5.2 LEFT JOIN (LEFT OUTER JOIN)

LEFT JOIN 返回左表的所有行,以及右表中匹配的行。如果右表中没有匹配的行,则右表的列将显示为 NULL

SELECT column1, column2, ... FROM table1 LEFT JOIN table2 ON table1.column_name = table2.column_name;

示例:

-- 查询所有员工的姓名和部门名称,即使员工没有分配到部门 SELECT e.first_name, e.last_name, d.department_name FROM employees e LEFT JOIN departments d ON e.department_id = d.id;

5.3 RIGHT JOIN (RIGHT OUTER JOIN)

RIGHT JOIN 返回右表的所有行,以及左表中匹配的行。如果左表中没有匹配的行,则左表的列将显示为 NULL

SELECT column1, column2, ... FROM table1 RIGHT JOIN table2 ON table1.column_name = table2.column_name;

5.4 FULL JOIN (FULL OUTER JOIN)

FULL JOIN 返回左表和右表的所有行。如果某个表中没有匹配的行,则该表的列将显示为 NULL。 并非所有数据库系统都支持 FULL JOIN

SELECT column1, column2, ... FROM table1 FULL JOIN table2 ON table1.column_name = table2.column_name;

6. 子查询

子查询是指嵌套在另一个查询中的查询。

示例:

-- 查询 salary 大于平均 salary 的员工 SELECT first_name, last_name, salary FROM employees WHERE salary > (SELECT AVG(salary) FROM employees);

7. 总结

本文详细介绍了 SQL 的基础知识,包括数据库和表的创建、数据操作、数据查询、连接和子查询。通过代码示例,你可以更好地理解这些概念,并开始使用 SQL 进行数据管理和分析。掌握这些基础知识是进一步学习高级 SQL 技术的关键。记住,实践是最好的老师,多写 SQL 语句,多练习,你将能够熟练掌握 SQL。

目录大纲

    最新文档

    知识宇宙

    正在加载知识图谱...


    转发