SQL 21日自学通(中文版).pdf
### SQL 21日自学通知识点详述 #### 第一天:SQL简介 - **SQL简史**:SQL(Structured Query Language)是一种用于管理关系数据库的标准语言。它最初由IBM的三位研究人员于1974年提出,后来经过多次修订和完善,成为了一种广泛使用的标准。1986年,美国国家标准局(ANSI)发布了SQL的第一个标准版本,随后国际标准化组织(ISO)也采纳了这一标准。随着技术的发展,SQL不断地更新和改进,以适应新的需求和技术趋势。 - **数据库简史**:数据库的历史可以追溯到上世纪50年代末期,最初的数据库系统主要依赖于层次模型和网络模型。到了70年代,关系模型逐渐成为主流,并且随着SQL的出现和发展,关系型数据库管理系统(RDBMS)成为了业界的首选方案。如今,除了传统的RDBMS之外,还有NoSQL数据库等多种类型的数据库系统被广泛应用。 - **设计数据库的结构**:在设计数据库时,需要考虑数据的存储结构、关系以及索引等因素。良好的数据库设计能够提高数据的查询效率和维护性。这通常包括实体关系图(ER图)的设计,定义主键、外键以及确保数据完整性等方面的考虑。 - **SQL总览**:SQL是一种用于管理关系数据库的语言,支持数据查询、插入、更新和删除等操作。通过SQL,用户可以高效地与数据库进行交互,执行复杂的查询和数据分析任务。 - **流行的SQL开发工具**:市场上有许多优秀的SQL开发工具,如MySQL Workbench、SQL Server Management Studio、Oracle SQL Developer等。这些工具提供了丰富的功能,帮助开发者更轻松地编写和测试SQL代码。 - **SQL在编程中的应用**:SQL是后端开发中不可或缺的一部分,广泛应用于各种编程语言中,如Java、Python、PHP等。通过API接口,开发者可以在应用程序中执行SQL语句,实现数据的增删查改等功能。 #### 第二天:查询——SELECT语句的使用 - **目标**:掌握基本的SELECT语句及其语法结构。 - **背景**:SELECT语句是SQL中最常用的语句之一,用于从数据库中检索数据。理解如何使用SELECT语句对于进行有效的数据查询至关重要。 - **一般的语法规则**:SELECT语句的基本格式为`SELECT column1, column2, ... FROM table_name;`。可以根据需要选择特定的列或者使用通配符`*`来选择所有列。 - **你的第一个查询**:例如,查询一个名为`employees`的表中的所有记录,可以使用以下SQL语句:`SELECT * FROM employees;` - **总结**:通过本节的学习,初学者将能够熟练使用SELECT语句进行简单的数据查询。 #### 第三天:表达式、条件语句与运算 - **表达式**:在SQL中,表达式是由值、变量、运算符以及函数组成的组合,用于计算结果。例如,`price + discount`是一个表达式,用于计算商品的价格加上折扣后的总价。 - **条件语句**:SQL中的条件语句主要用于根据指定的条件筛选数据。常用的条件关键字有`WHERE`、`AND`、`OR`等。例如,`SELECT * FROM products WHERE price > 100 AND stock > 0;`表示从`products`表中选取价格大于100并且库存大于0的所有产品记录。 - **运算**:SQL支持多种运算,包括算术运算、比较运算以及逻辑运算等。例如,使用`+`运算符进行加法运算,`>`进行比较等。 #### 第四天:函数 - **汇总函数**:SQL提供了多种汇总函数,用于对数据进行统计分析。 - **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子句**:用于过滤数据,只显示满足指定条件的行。例如,`SELECT * FROM customers WHERE city = 'New York';`表示从`customers`表中选取城市为纽约的所有客户记录。 - **STARTING WITH子句**:用于在列的值中查找以特定字符开头的数据。例如,`SELECT * FROM customers WHERE name STARTING WITH 'A';`表示从`customers`表中选取姓名以字母A开头的所有客户记录。 - **ORDER BY子句**:用于对结果集进行排序。例如,`SELECT * FROM customers ORDER BY name DESC;`表示从`customers`表中选取所有客户记录,并按姓名降序排列。 - **GROUP BY子句**:用于将结果集按照一个或多个列的值进行分组。例如,`SELECT country, COUNT(*) FROM customers GROUP BY country;`表示从`customers`表中按国家分组统计客户数量。 - **HAVING子句**:用于过滤GROUP BY子句生成的结果集。例如,`SELECT country, COUNT(*) FROM customers GROUP BY country HAVING COUNT(*) > 10;`表示从`customers`表中按国家分组统计客户数量,但只显示数量超过10个的国家。 - **子句的综合应用**:结合以上子句可以实现更复杂的数据筛选和处理。例如,`SELECT country, COUNT(*) FROM customers WHERE age > 18 GROUP BY country HAVING COUNT(*) > 10 ORDER BY COUNT(*) DESC;`表示从`customers`表中选取年龄大于18岁的客户记录,按国家分组统计数量超过10个的国家,并按数量降序排列。 #### 第六天:表的联合 - **介绍**:表的联合是指将多个表的数据合并成一个结果集的过程。这是SQL中非常重要的一个概念,可以用来关联多个表中的数据,从而实现更复杂的查询。 - **在一个SELECT语句中使用多个表**:可以使用INNER JOIN、LEFT JOIN、RIGHT JOIN、FULL JOIN等不同类型的JOIN来连接表。例如,`SELECT * FROM orders INNER JOIN customers ON orders.customer_id = customers.id;`表示连接`orders`表和`customers`表,基于`customer_id`和`id`列的匹配。 - **正确地找到列**:当连接多个表时,需要注意列名可能在不同的表中重复。可以通过使用表名前缀的方式明确指明列所属的表。例如,`SELECT customers.name, orders.order_date FROM customers INNER JOIN orders ON customers.id = orders.customer_id;`表示从`customers`表中选取名字,并从`orders`表中选取订单日期。 - **等值联合**:最常见的一种联合方式,基于两表之间的一对一或多对一的关系。例如,`SELECT * FROM customers LEFT JOIN orders ON customers.id = orders.customer_id;`表示从`customers`表左侧连接`orders`表,基于`id`和`customer_id`列的匹配。 - **不等值联合**:用于连接两个表,但不是基于一对一或多对一的关系。例如,`SELECT * FROM customers LEFT JOIN orders ON customers.id < orders.customer_id;`表示从`customers`表左侧连接`orders`表,基于`id`小于`customer_id`的条件。 - **外部联合与内部联合**:外部联合(如LEFT JOIN、RIGHT JOIN)返回匹配行以及未匹配行,而内部联合(如INNER JOIN)仅返回匹配行。 - **表的自我联合**:用于连接同一个表的不同别名,以便查询表中的不同记录。例如,`SELECT t1.name AS old_name, t2.name AS new_name FROM table t1, table t2 WHERE t1.id = t2.id - 1;`表示从`table`表中选取两条相邻记录的名字。 #### 第七天:子查询 - **建立一个子查询**:子查询是指嵌套在另一个查询中的查询。例如,`SELECT * FROM customers WHERE id IN (SELECT customer_id FROM orders WHERE order_date > '2020-01-01');`表示从`customers`表中选取在2020年1月1日之后有订单的客户。 - **在子查询中使用汇总函数**:子查询也可以包含汇总函数,用于计算子查询的结果。例如,`SELECT * FROM customers WHERE id IN (SELECT customer_id FROM orders GROUP BY customer_id HAVING COUNT(*) > 10);`表示从`customers`表中选取订单数量超过10个的客户。 - **子查询的嵌套**:子查询可以相互嵌套,形成多层子查询。例如,`SELECT * FROM customers WHERE id IN (SELECT customer_id FROM orders WHERE product_id IN (SELECT id FROM products WHERE category = 'Electronics'));`表示从`customers`表中选取购买过电子产品类别的客户的记录。 - **相关子查询**:相关子查询是在外部查询的每一行上运行一次子查询。例如,`SELECT * FROM customers WHERE EXISTS (SELECT * FROM orders WHERE orders.customer_id = customers.id AND order_date > '2020-01-01');`表示从`customers`表中选取2020年1月1日之后有订单的客户。 - **EXISTS、ANY、ALL的使用**:这些关键字可以用于优化子查询,提高查询效率。例如,`SELECT * FROM customers WHERE EXISTS (SELECT * FROM orders WHERE orders.customer_id = customers.id AND order_date > '2020-01-01');`表示从`customers`表中选取2020年1月1日之后有订单的客户。 #### 第一周回顾 - **预览**:第一周的学习内容涵盖了SQL的基础知识,包括SQL语言的概述、基本查询、条件语句、函数、子句以及表的联合等。通过这些知识点的学习,学员可以掌握使用SQL进行简单数据查询的能力。 - **第二周概貌**:接下来的一周将深入学习SQL的数据操作、表的创建与操作等内容,进一步提升SQL技能。 以上是《SQL 21日自学通》的部分内容概述,旨在帮助读者快速了解并掌握SQL的基础知识和技能。
剩余567页未读,继续阅读
评论0
最新资源