### SQL21自学通知识点梳理 #### 一、SQL简介及历史 - **SQL简史:** - SQL(Structured Query Language,结构化查询语言)最初由IBM在20世纪70年代初开发,旨在为关系型数据库提供一种标准化的数据管理方式。 - 1986年,ANSI(美国国家标准协会)和ISO(国际标准化组织)正式将其作为标准。 - 随着时间的发展,SQL不断演进,增加了更多功能和改进。 - **数据库简史:** - 数据库技术的发展经历了层次模型、网状模型以及最终的关系模型等多个阶段。 - 关系模型是目前最广泛使用的数据库模型,其核心思想是通过表格形式来组织数据,并利用SQL进行数据管理和查询。 - **设计数据库的结构:** - 设计数据库结构涉及实体识别、关系定义、数据类型选择等步骤。 - 常见的设计工具包括ER图(实体关系图)、数据库建模软件等。 - 数据库设计的目标是确保数据的一致性、完整性和可维护性。 - **SQL总览:** - SQL是一种用于管理关系型数据库的标准语言,主要用于执行查询、更新数据、创建新表、添加记录等任务。 - 主要组成部分包括数据定义语言(DDL)、数据操纵语言(DML)、数据控制语言(DCL)等。 - **流行的SQL开发工具:** - MySQL Workbench、SQL Server Management Studio、Oracle SQL Developer等都是常见的SQL开发工具。 - 这些工具提供了图形界面,支持编写、测试和调试SQL代码。 - **SQL在编程中的应用:** - 在Web开发中,SQL常被用来处理用户输入、存储和检索数据。 - 在数据分析领域,SQL用于提取数据、进行统计分析和报表生成。 - 大多数现代应用程序都需要与后端数据库交互,因此掌握SQL对于开发者至关重要。 #### 二、SELECT语句的使用 - **一般的语法规则:** - SELECT * FROM 表名 WHERE 条件; - SELECT 列名列表 FROM 表名 WHERE 条件 GROUP BY 分组依据 HAVING 组条件 ORDER BY 排序依据; - **你的第一个查询:** - 示例:SELECT * FROM employees WHERE department = 'Sales'; - 解释:此查询将返回“employees”表中所有属于“Sales”部门的员工信息。 #### 三、表达式、条件语句与运算 - **表达式:** - SQL中的表达式可以包含数值、字符串、变量、函数调用等元素。 - 例如:(age + 5) * salary / 100. - **条件语句:** - CASE WHEN...THEN...ELSE... - 用于根据不同的条件返回不同的结果。 #### 四、函数 - **汇总函数:** - COUNT:计算行数。 - SUM:计算数值列的总和。 - AVG:计算平均值。 - MAX:查找最大值。 - MIN:查找最小值。 - VARIANCE:计算方差。 - STDDEV:计算标准偏差。 - **日期/时间函数:** - ADD_MONTHS:增加月份。 - LAST_DAY:获取月份的最后一天。 - MONTHS_BETWEEN:计算两个日期之间的月份数。 - NEW_TIME:更改时区。 - NEXT_DAY:查找下一个工作日。 - SYSDATE:获取当前系统日期。 - 数学函数:如ABS、CEIL、FLOOR、COS、SIN、TAN等。 - **字符函数:** - CHR:根据ASCII码获取字符。 - CONCAT:连接字符串。 - INITCAP:首字母大写。 - LOWER/UPPER:转换为小写/大写。 - LPAD/RPAD:左侧/右侧填充。 - LTRIM/RTRIM:删除左侧/右侧空白。 - REPLACE:替换字符串。 - SUBSTR:截取字符串。 - TRANSLATE:字符替换。 - INSTR:查找子串位置。 - LENGTH:计算字符串长度。 - **转换函数:** - TO_CHAR:将数据转换为字符。 - TO_NUMBER:将数据转换为数字。 - **其它函数:** - GREATEST/LEAST:找出最大/最小值。 - USER:获取当前用户信息。 #### 五、SQL中的子句 - **WHERE子句:** - 用于筛选查询结果中的行。 - 示例:SELECT * FROM customers WHERE country = 'China'; - **STARTING WITH子句:** - 用于字符串匹配,特别是模式匹配。 - 示例:SELECT * FROM products WHERE product_name STARTING WITH 'A'; - **ORDER BY子句:** - 用于排序查询结果。 - 示例:SELECT * FROM orders ORDER BY order_date DESC; - **GROUP BY子句:** - 将查询结果按指定列分组。 - 示例:SELECT department, AVG(salary) FROM employees GROUP BY department; - **HAVING子句:** - 用于过滤GROUP BY子句的结果集。 - 示例:SELECT department, AVG(salary) AS avg_salary FROM employees GROUP BY department HAVING avg_salary > 50000; - **子句的综合应用:** - 复杂查询通常会结合使用多个子句来精确筛选数据。 #### 六、表的联合 - **在一个SELECT语句中使用多个表:** - 内联:通过ON或USING子句将多个表的记录组合在一起。 - 示例:SELECT * FROM table1 INNER JOIN table2 ON table1.id = table2.id; - **等值联合:** - 使用相等条件将两个表连接起来。 - 示例:SELECT * FROM table1 JOIN table2 ON table1.key = table2.key; - **不等值联合:** - 使用不等条件进行联合。 - 示例:SELECT * FROM table1 JOIN table2 ON table1.date < table2.date; - **外部联合与内部联合:** - 外部联合(LEFT JOIN、RIGHT JOIN、FULL OUTER JOIN)可以返回一个表的所有记录,即使另一个表没有匹配项。 - 内部联合(INNER JOIN)只返回两边表都有匹配项的记录。 - **表的自我联合:** - 当一个表与自身进行联合时称为自我联合。 - 示例:SELECT * FROM table t1 JOIN table t2 ON t1.id = t2.parent_id; #### 七、子查询 - **建立一个子查询:** - 子查询是在另一个查询中的查询。 - 示例:SELECT * FROM orders WHERE order_date IN (SELECT order_date FROM customers WHERE country = 'China'); - **在子查询中使用汇总函数:** - 示例:SELECT * FROM employees WHERE salary > (SELECT AVG(salary) FROM employees); - **子查询的嵌套:** - 子查询可以嵌套多层。 - 示例:SELECT * FROM employees WHERE id IN (SELECT manager_id FROM departments WHERE location IN (SELECT location_id FROM locations WHERE city = 'New York')); - **相关子查询:** - 相关子查询是指子查询依赖于外部查询的某个值。 - 示例:SELECT * FROM employees e WHERE salary > (SELECT AVG(salary) FROM employees WHERE department_id = e.department_id); - **EXISTS、ANY、ALL的使用:** - EXISTS用于检查是否存在满足条件的记录。 - ANY和ALL用于比较子查询的结果与单个值或多组值。 - 示例:SELECT * FROM employees WHERE department_id IN (SELECT department_id FROM departments WHERE EXISTS (SELECT * FROM locations WHERE location_id = departments.location_id AND city = 'New York')); #### 八、操作数据 - **数据操作语句:** - INSERT:插入数据到表中。 - UPDATE:更新表中的数据。 - DELETE:从表中删除数据。 - **插入语句:** - INSERT VALUES:直接指定要插入的值。 - INSERT SELECT:从另一个查询中选择值插入。 - **UPDATE语句:** - 更新表中的特定行或所有行。 - **DELETE语句:** - 删除表中的特定行或所有行。 - **从外部数据源中导入和导出数据:** - 支持多种格式的数据源,如Microsoft Access、SQL Server、Oracle等。 #### 九、创建和操作表 - **CREATEDATABASE语句:** - 创建新的数据库。 - 示例:CREATE DATABASE mydatabase; - **CREATETABLE语句:** - 创建新表。 - 示例:CREATE TABLE employees (id INT PRIMARY KEY, name VARCHAR(50), department VARCHAR(50)); - **ALTERTABLE语句:** - 修改现有表的结构。 - 示例:ALTER TABLE employees ADD COLUMN age INT; - **DROPTABLE语句:** - 删除表。 - 示例:DROP TABLE employees; - **DROPDATABASE语句:** - 删除数据库。 - 示例:DROP DATABASE mydatabase; #### 十、创建视图和索引 - **使用视图:** - 视图是基于查询结果的一种虚拟表。 - 可以简化复杂的查询,提高安全性。 - 示例:CREATE VIEW sales_summary AS SELECT department, SUM(quantity) AS total_quantity FROM sales GROUP BY department; - **列的重命名:** - 在创建视图时可以为列指定别名。 - 示例:CREATE VIEW sales_summary AS SELECT department AS dept, SUM(quantity) AS qty FROM sales GROUP BY department; - **SQL对视图的处理过程:** - 当查询视图时,SQL引擎会执行创建视图时定义的查询。 - 视图本身并不存储数据,只是保存了查询的定义。 #### 第一周回顾 - 本周涵盖了SQL的基本概念、语法结构、常用函数、子句、表的操作等内容。 - 学习了如何使用SELECT语句、聚合函数、子查询等高级特性。 - 了解了如何创建、修改和删除数据库表,以及如何使用视图来简化复杂查询。 以上是对《SQL21自学通》部分内容的知识点梳理,通过这些知识点的学习,读者可以从零开始逐步掌握SQL的基本操作,并逐渐深入到更复杂的查询和数据管理技术。
剩余567页未读,继续阅读
- 粉丝: 1
- 资源: 4
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助