### SQL21天自学通.pdf 知识点详解 #### SQL基础入门概述 - **适用对象**:本书针对初学者,旨在通过系统的学习路径帮助读者掌握SQL的基本概念和实际操作能力。 - **学习周期**:全书规划为21天的学习周期,每天介绍一个特定的主题,循序渐进地加深理解。 #### 第一部分:SQL简介 - **SQL简史**: - SQL(Structured Query Language,结构化查询语言)是由IBM公司的Raymond Boyce和Donald Chamberlin于1974年提出的一种用于管理关系型数据库的标准语言。 - 1986年,ANSI(美国国家标准协会)将SQL标准化,随后ISO(国际标准化组织)也采纳了该标准。 - 随着互联网的发展,SQL的重要性日益凸显,成为数据库管理的核心技术之一。 - **数据库简史**: - 数据库技术起源于20世纪60年代,最初的数据模型包括层次模型和网状模型。 - 1970年,E.F. Codd提出了关系模型的概念,奠定了现代关系型数据库的基础。 - 20世纪80年代,随着个人电脑的普及,桌面级数据库管理系统开始兴起。 - **设计数据库的结构**: - 数据库设计是确保数据质量、一致性和可用性的关键步骤。 - 包括实体关系图的设计、规范化理论的应用以及存储结构的选择等。 - 设计时需考虑数据的一致性、完整性以及性能等因素。 - **SQL总览**: - SQL是一种非过程化的语言,主要用于数据定义、数据操纵、数据控制和数据查询。 - 主要包括DDL(Data Definition Language,数据定义语言)、DML(Data Manipulation Language,数据操纵语言)、DCL(Data Control Language,数据控制语言)和DQL(Data Query Language,数据查询语言)。 - **流行的SQL开发工具**: - MySQL Workbench:MySQL官方提供的图形化工具,支持数据库设计、数据操作等功能。 - SQL Server Management Studio:Microsoft提供的SQL Server的管理工具。 - Oracle SQL Developer:Oracle公司提供的免费集成开发环境。 - DBeaver:跨平台的数据库管理工具,支持多种数据库类型。 - **SQL在编程中的应用**: - SQL作为数据访问层的重要组成部分,广泛应用于各种编程语言中。 - 在Web开发、数据分析等领域,SQL常被用来实现数据的检索、分析和报告功能。 #### 第二部分:SELECT语句的使用 - **一般语法规则**: - SELECT语句用于从一个或多个表中检索数据。 - 基本语法:`SELECT column_name(s) FROM table_name WHERE condition;` - 可以使用聚合函数如COUNT、SUM、AVG等对数据进行统计。 - **你的第一个查询**: - 示例:从“employees”表中选择所有员工的名字。 ```sql SELECT name FROM employees; ``` - **表达式、条件语句与运算**: - SQL支持使用算术运算符进行数值计算,逻辑运算符进行条件判断。 - 条件语句(如IF...THEN...ELSE)用于基于不同的条件返回不同的结果。 - **函数** - **汇总函数**:用于对数据进行统计分析。 - `COUNT`: 计算满足条件的行数。 - `SUM`: 求和。 - `AVG`: 平均值。 - `MAX`: 最大值。 - `MIN`: 最小值。 - `VARIANCE`: 方差。 - `STDDEV`: 标准差。 - **日期/时间函数**:用于处理日期和时间数据。 - `ADD_MONTHS`: 添加月份。 - `LAST_DAY`: 获取某月最后一天的日期。 - `MONTHS_BETWEEN`: 计算两个日期之间的月份数。 - `NEW_TIME`: 转换时区。 - `NEXT_DAY`: 下一个指定工作日。 - `SYSDATE`: 当前系统日期。 - **数学函数**:进行数学计算。 - `ABS`: 绝对值。 - `CEIL`/`FLOOR`: 向上/向下取整。 - `COS`/`COSH`/`SIN`/`SINH`/`TAN`/`TANH`: 三角函数。 - `EXP`: 自然指数函数。 - `LN`/`LOG`: 对数函数。 - `MOD`: 求余。 - `POWER`: 指数。 - `SIGN`: 符号函数。 - `SQRT`: 平方根。 - **字符函数**:用于处理字符串。 - `CHR`: 将ASCII码转换为字符。 - `CONCAT`: 连接字符串。 - `INITCAP`: 将首字母大写。 - `LOWER`/`UPPER`: 转换为小写/大写。 - `LPAD`/`RPAD`: 左右填充。 - `LTRIM`/`RTRIM`: 删除左右两端的空白字符。 - `REPLACE`: 替换字符串。 - `SUBSTR`: 截取子串。 - `TRANSLATE`: 字符替换。 - `INSTR`: 查找字符串位置。 - `LENGTH`: 字符串长度。 - **转换函数**:用于数据类型的转换。 - `TO_CHAR`: 将其他类型转换为字符类型。 - `TO_NUMBER`: 将字符类型转换为数字类型。 - **其他函数**: - `GREATEST`/`LEAST`: 返回最大/最小值。 - `USER`: 返回当前用户的信息。 #### 第三部分:SQL中的子句 - **WHERE子句**:用于筛选符合条件的记录。 - 示例:从“employees”表中选择薪水超过5000的员工。 ```sql SELECT * FROM employees WHERE salary > 5000; ``` - **STARTING WITH子句**:用于模式匹配,类似于LIKE但仅用于以特定字符开头的情况。 - 示例:从“employees”表中选择名字以“A”开头的员工。 ```sql SELECT * FROM employees WHERE name STARTING WITH 'A'; ``` - **ORDER BY子句**:用于排序结果集。 - 示例:从“employees”表中按年龄升序排列员工。 ```sql SELECT * FROM employees ORDER BY age ASC; ``` - **GROUP BY子句**:用于分组数据,并结合聚合函数进行计算。 - 示例:从“sales”表中按地区分组并统计销售额。 ```sql SELECT region, SUM(amount) FROM sales GROUP BY region; ``` - **HAVING子句**:用于过滤分组后的数据。 - 示例:从“sales”表中按地区分组并统计销售额,只显示销售额超过10000的地区。 ```sql SELECT region, SUM(amount) FROM sales GROUP BY region HAVING SUM(amount) > 10000; ``` - **子句的综合应用**:可以将以上子句组合使用,构建复杂的查询语句。 #### 第四部分:表的联合 - **在一个SELECT语句中使用多个表**:通过JOIN关键字连接多个表。 - 示例:连接“employees”和“departments”表。 ```sql SELECT e.name, d.department_name FROM employees e JOIN departments d ON e.department_id = d.department_id; ``` - **等值联合**:基于等于条件进行表的连接。 - 示例:从“employees”和“departments”表中选择部门ID相等的记录。 ```sql SELECT e.name, d.department_name FROM employees e JOIN departments d ON e.department_id = d.department_id; ``` - **不等值联合**:基于不等于条件进行表的连接。 - 示例:从“employees”和“departments”表中选择部门ID不相等的记录。 ```sql SELECT e.name, d.department_name FROM employees e LEFT JOIN departments d ON e.department_id <> d.department_id; ``` - **外部联合与内部联合**: - 外部联合(如LEFT JOIN、RIGHT JOIN):保留左表或右表的所有记录,即使没有匹配项。 - 内部联合(INNER JOIN):只保留两边都有匹配项的记录。 - **表的自我联合**:在同一表的不同别名之间进行联合。 - 示例:从“employees”表中选择经理及其下属的信息。 ```sql SELECT m.name AS manager, e.name AS employee FROM employees m JOIN employees e ON m.employee_id = e.manager_id; ``` #### 第五部分:子查询 - **建立一个子查询**:在主查询中嵌入另一个查询。 - 示例:从“employees”表中选择年龄大于平均年龄的员工。 ```sql SELECT name FROM employees WHERE age > (SELECT AVG(age) FROM employees); ``` - **在子查询中使用汇总函数**:可以在子查询中使用汇总函数来筛选数据。 - 示例:从“employees”表中选择年龄大于平均年龄的员工。 ```sql SELECT name FROM employees WHERE age > (SELECT AVG(age) FROM employees); ``` - **子查询的嵌套**:可以在子查询中再次嵌套子查询。 - 示例:从“employees”表中选择年龄大于其所在部门平均年龄的员工。 ```sql SELECT name FROM employees WHERE age > (SELECT AVG(age) FROM employees WHERE department_id = employees.department_id); ``` - **相关子查询**:子查询的结果依赖于外层查询中的某个变量。 - 示例:从“employees”表中选择薪水高于同部门其他员工的员工。 ```sql SELECT name FROM employees WHERE salary > (SELECT AVG(salary) FROM employees e2 WHERE e2.department_id = employees.department_id); ``` - **EXISTS、ANY、ALL的使用**:用于更复杂的数据筛选。 - 示例:从“employees”表中选择有下属的经理。 ```sql SELECT name FROM employees WHERE EXISTS (SELECT * FROM employees e2 WHERE e2.manager_id = employees.employee_id); ``` #### 第六部分:操作数据 - **数据操作语句**:主要包括INSERT、UPDATE和DELETE语句。 - **INSERT语句**: - `INSERT VALUES`:插入单条或多条记录。 ```sql INSERT INTO employees (name, age) VALUES ('John Doe', 30); ``` - `INSERT SELECT`:从另一个查询结果集中插入多条记录。 ```sql INSERT INTO employees (name, age) SELECT name, age FROM new_employees; ``` - **UPDATE语句**:更新现有数据。 - 示例:从“employees”表中将John Doe的年龄改为35岁。 ```sql UPDATE employees SET age = 35 WHERE name = 'John Doe'; ``` - **DELETE语句**:删除现有数据。 - 示例:从“employees”表中删除年龄小于25岁的员工。 ```sql DELETE FROM employees WHERE age < 25; ``` - **从外部数据源中导入和导出数据**:使用特定的工具或命令将数据从外部文件导入到数据库,或将数据库中的数据导出到文件。 - 示例:使用SQL Server Import and Export Wizard从Excel文件导入数据。 #### 第七部分:创建和操作表 - **CREATEDATABASE语句**:创建一个新的数据库。 - 示例:创建名为“mydatabase”的数据库。 ```sql CREATE DATABASE mydatabase; ``` - **建立数据库时的选项**:可以设置数据库的各种属性,如大小、自动增长等。 - 示例:创建名为“mydatabase”的数据库,初始大小为5MB,最大大小为20GB。 ```sql CREATE DATABASE mydatabase WITH SIZE 5MB MAXSIZE 20GB; ``` - **设计数据库**:确定数据库的结构,包括表的定义、字段的类型等。 - 示例:设计一个名为“employees”的表,包含id、name和age三个字段。 ```sql CREATE TABLE employees (id INT PRIMARY KEY, name VARCHAR(50), age INT); ``` - **建立数据字典**:记录数据库的元数据,方便管理和维护。 - 示例:创建名为“mydictionary”的数据字典。 ```sql CREATE DICTIONARY mydictionary; ``` - **建立关键字段**:确定表的主键和其他约束。 - 示例:在“employees”表中设置id为主键。 ```sql ALTER TABLE employees ADD CONSTRAINT pk_employee PRIMARY KEY (id); ``` - **CREATETABLE语句**:创建新的表。 - 示例:创建名为“employees”的表。 ```sql CREATE TABLE employees (id INT PRIMARY KEY, name VARCHAR(50), age INT); ``` - **表名**:必须遵循数据库的命名规则。 - 示例:创建名为“employees”的表。 ```sql CREATE TABLE employees (id INT PRIMARY KEY, name VARCHAR(50), age INT); ``` - **空值属性**:允许或禁止字段为空。 - 示例:在“employees”表中设置age字段不允许为空。 ```sql CREATE TABLE employees (id INT PRIMARY KEY, name VARCHAR(50), age INT NOT NULL); ``` - **唯一属性**:确保字段值的唯一性。 - 示例:在“employees”表中设置name字段的值必须唯一。 ```sql CREATE TABLE employees (id INT PRIMARY KEY, name VARCHAR(50) UNIQUE, age INT); ``` - **表的存储与尺寸的调整**:可以设置表的存储方式和空间使用情况。 - 示例:创建名为“employees”的表,并设置初始容量为1MB,每次增长500KB。 ```sql CREATE TABLE employees (id INT PRIMARY KEY, name VARCHAR(50), age INT) WITH INITIAL_CAPACITY 1MB INCREMENT 500KB; ``` - **用一个已经存在的表来建表**:可以复制现有表的结构创建新表。 - 示例:从“employees”表创建一个名为“new_employees”的新表。 ```sql CREATE TABLE new_employees AS SELECT * FROM employees; ``` - **ALTERTABLE语句**:修改现有表的结构。 - 示例:向“employees”表添加一个新字段email。 ```sql ALTER TABLE employees ADD email VARCHAR(100); ``` - **DROPTABLE语句**:删除现有表。 - 示例:删除名为“employees”的表。 ```sql DROP TABLE employees; ``` - **DROPDATABASE语句**:删除现有数据库。 - 示例:删除名为“mydatabase”的数据库。 ```sql DROP DATABASE mydatabase; ``` 通过以上内容的详细介绍,初学者可以系统地学习SQL的基础知识和常用操作技巧,为日后深入学习和实践打下坚实的基础。
剩余567页未读,继续阅读
- 粉丝: 0
- 资源: 2
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 章节1:Python入门视频
- 无需样板的 Python 类.zip
- ESP32 : 32-bit MCU & 2.4 GHz Wi-Fi & BT/BLE SoCs
- 博物馆文博资源库-JAVA-基于springBoot博物馆文博资源库系统设计与实现
- 旅游网站-JAVA-springboot+vue的桂林旅游网站系统设计与实现
- 小说网站-JAVA-基于springBoot“西贝”小说网站的设计与实现
- 游戏分享网站-JAVA-基于springBoot“腾达”游戏分享网站的设计与实现
- 学习交流-JAVA-基于springBoot“非学勿扰”学习交流平台设计与实现
- EDAfloorplanning
- 所有课程均提供 Python 复习部分.zip