目录
一、什么是DDL
二、什么是DML
2.1 TRUNCATE和delete在删除整张表的数据时的区别
三、Mysql中的约束
3.1 AUTO_INCREMENT约束
四、什么是DQL
五、DQL重点难点案例
5.1 聚合查询
5.2.联表查询
5.2.1 内连接
5.2.2 外连接
5.3 自关联查询
DDL是指数据定义语言(Data Definition Language),是一种用于定义和管理数据库结构的语言。DDL通常用于创建、修改和删除数据库对象,如表、视图、索引等。
常见的DDL操作包括:
1. CREATE:用于创建数据库对象,如表、视图、索引等。例如,CREATE TABLE用于创建表。
2. ALTER:用于修改数据库对象的结构。例如,ALTER TABLE用于修改表的结构,如添加、修改或删除列。
3. DROP:用于删除数据库对象。例如,DROP TABLE用于删除表。
4. TRUNCATE:用于删除表中的数据,但保留表的结构。与DELETE不同,TRUNCATE操作是直接删除表中的所有数据,而不是逐行删除。
5. RENAME:用于重命名数据库对象。例如,RENAME TABLE用于重命名表。
这些DDL操作可以通过数据库管理工具(如MySQL Workbench、pgAdmin等)或编程语言的数据库接口(如Python的SQLAlchemy)来执行。在执行DDL操作之前,通常需要具有适当的权限来操作数据库对象。
DML是指数据库操作语言(Data Manipulation Language),用于在数据库中对数据进行操作和管理的语言。DML允许用户查询、插入、更新和删除数据库中的数据。
常见的DML指令包括:
1. SELECT:用于查询数据库中的数据。
2. INSERT:用于向数据库中插入新的数据。
3. UPDATE:用于更新数据库中已有数据的值。
4. DELETE:用于删除数据库中的数据。通过使用DML指令,用户可以有效地操纵数据库中的数据,满足各种需求,比如添加新数据、修改现有数据或从数据库中删除数据。
AUTO_INCREMENT是MySQL中一种用于生成唯一标识符的属性。它常用于表的主键字段上,使其自动递增生成唯一的数值。
当一个列被指定为AUTO_INCREMENT时,MySQL会自动为该列的新记录分配一个唯一且递增的值。每当向表中插入一条新记录时,AUTO_INCREMENT列的值就会自动增加。
使用AUTO_INCREMENT时,需要注意以下几点:
1. 一张表只能有一个AUTO_INCREMENT列,且通常会被指定为主键。
2. AUTO_INCREMENT列的数据类型通常为整数类型(如INT或BIGINT)。
3. 初始值和增量步长可以通过设置表的属性或使用ALTER TABLE语句进行自定义。
4. 如果想手动指定AUTO_INCREMENT列的值,可以使用INSERT语句,并将值设置为NULL或0。下面是一个示例,展示了如何在MySQL中创建一个带有AUTO_INCREMENT主键的表:
CREATE TABLE my_table ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(50) ); ```
在这个示例中,my_table表具有一个名为id的主键列,其类型为INT,并且带有AUTO_INCREMENT属性。每当向表中插入新记录时,id列将会自动递增生成一个唯一的值。
AUTO_INCREMENT在第一次插入数据时如果插入了AUTO_INCREMENT这个字段的值,则下一次插入时默认就以这个值继续增长。
注意:使用truncate删除整张表的数据时,AUTO_INCREMENT的下一次初始值为从1开始,用delete清楚所有数据时AUTO_INCREMENT的的初始值会继承删除的最后一条数据的初始值。
唯一约束:
ALTER TABLE table_name ADD CONSTRAINT constraint_name UNIQUE (column_name);
默认约束:
ALTER TABLE table_name ALTER COLUMN column_name SET DEFAULT default_value;
也可以在创建表时指定。运行方式:未指定插入字段时会使用默认值,插入null时不走默认值。
零填充约束:
零填充约束是一种常见的数据约束,用于在数字列中强制要求以零填充数字。这通常用于要求具有固定长度的数字,例如日期的月份或日期的日份。下面是一个示例,展示了在Mysql数据库管理系统中如何创建零填充约束:
ALTER TABLE table_name MODIFY column_name datatype ZEROFILL;
DQL(Data Query Language)是数据库查询语言,用于检索和查询数据库中的数据。DQL 允许用户从一个或多个表中选择指定的数据,并返回结果集,以便于数据分析和应用程序开发。下面是一些常见的 DQL 使用的语句和功能的详解:
1. SELECT 语句:SELECT 语句是 DQL 中最基本的语句,用于从一个或多个表中选择数据。它可以指定要选择的列,也可以使用聚合函数进行计算和汇总。SELECT 语句的基本语法如下:
SELECT column1, column2, ... FROM table_name WHERE condition GROUP BY column1 HAVING condition ORDER BY column1; ```
2. DISTINCT 关键字:DISTINCT 关键字用于从结果集中去除重复的记录,只返回唯一的记录。
SELECT DISTINCT column1, column2, ... FROM table_name; ```
3. WHERE 子句:WHERE 子句用于筛选满足指定条件的记录。可以使用各种操作符(如等于、大于、小于、不等于、逻辑运算符等)来构建条件。
SELECT column1, column2, ... FROM table_name WHERE condition; ```
4. GROUP BY 子句:GROUP BY 子句用于对结果集进行分组,并可用于配合聚合函数使用。
SELECT column1, aggregate_function(column2) FROM table_name GROUP BY column1; ```
5. HAVING 子句:HAVING 子句用于筛选 GROUP BY 子句分组后的结果集,类似于 WHERE 子句,但作用于分组。
SELECT column1, aggregate_function(column2) FROM table_name GROUP BY column1 HAVING condition; ```
6. ORDER BY 子句:ORDER BY 子句用于对结果集进行排序,默认为升序。可以根据一个或多个列进行排序。
SELECT column1, column2, ... FROM table_name ORDER BY column1 ASC|DESC; ```
以上只是 DQL 的一些常见功能和语法,实际上还有许多其他的功能和细节可以学习和应用。不同的数据库管理系统可能会有稍微不同的语法和功能,因此请根据所使用的具体数据库来查阅相关文档和资料。
外键约束:
主表数据不要随意删除
解读:主要是按照年龄降序,若数据年龄相同,则按照class_id降序。
1.若排序时,字段为字母:按照A-Z或者Z-A。
如果为汉字:按照拼音首字母A-Z或者Z-A
2.limit分页:在DQL语句最后面,语法:limit m,n
m的计算公式:(第几页-1)*每页要显示的个数 = m
3.使用between and时,左闭右闭
聚合查询是一种使用聚合函数对数据库中的数据进行计算和汇总的查询。聚合函数可以对一列或多列的数据进行计算,并返回单个结果。以下是一些常见的聚合函数和聚合查询的示例:
1. COUNT() 函数:用于计算指定列中非 NULL 值的数量。
SELECT COUNT(column_name) FROM table_name; ```
2. SUM() 函数:用于计算指定列中数值类型数据的总和。
SELECT SUM(column_name) FROM table_name; ```
3. AVG() 函数:用于计算指定列中数值类型数据的平均值。
SELECT AVG(column_name) FROM table_name; ```
4. MAX() 函数:用于找到指定列中的最大值。
SELECT MAX(column_name) FROM table_name; ```
5. MIN() 函数:用于找到指定列中的最小值。
SELECT MIN(column_name) FROM table_name; ```
6. GROUP BY 分组:可以将聚合函数与 GROUP BY 子句一起使用,将结果按照指定列进行分组计算。
SELECT column1, aggregate_function(column2) FROM table_name GROUP BY column1; ```
7. HAVING 子句:可以使用 HAVING 子句来筛选 GROUP BY 分组后的结果。
SELECT column1, aggregate_function(column2) FROM table_name GROUP BY column1 HAVING condition; ```
上述示例中,column_name是要进行聚合操作的列的名称,table_name 是要查询的表格的名称,aggregate_function 是聚合函数(如 COUNT、SUM、AVG、MAX、MIN 等),condition 是筛选的条件。
聚合查询可以帮助我们快速计算和分析大量数据的总和、平均值、最大值、最小值等统计信息,以及按照指定列分组的结果。具体的语法和可用的聚合函数可能会因所使用的数据库管理系统而有所不同。请参考特定数据库的文档和资料来获取更多详细信息。
count函数:不统计为null值字段,可设置默认值0来统计
分组查询的条件用HAVING
内连接(Inner Join)是联表查询中常用的连接操作。
内连接(Inner Join):
内连接是通过匹配两个表之间的共同值来获取相关数据。它返回在两个表中具有匹配值的行,并且只包括符合连接条件的数据。
例如,假设有两个表:员工表(Employees)和部门表(Departments)。要获取包含员工姓名和所属部门名称的结果集,可以使用内连接。
以下是一个使用内连接进行联表查询的示例:
SELECT Employees.employee_name, Departments.department_name
FROM Employees
INNER JOIN Departments ON Employees.department_id = Departments.department_id;
```
内连接使用`INNER JOIN`关键字将两个表连接起来,并通过`ON`关键字指定连接条件(例如,在此示例中,通过`department_id`列进行连接)。只有在两个表中都存在匹配值的行才会包含在结果集中。
外连接(Outer Join):
外连接是一种扩展连接方式,它可以返回符合连接条件的数据,并且还包括一个表中没有匹配值的行。外连接分为左外连接、右外连接和全外连接。
- 左外连接(Left Outer Join): 返回左表中的所有行以及右表中与左表匹配的行。如果右表中没有匹配的行,则右表中的列将被填充为NULL。
SELECT Customers.customer_id, Orders.order_id
FROM Customers
LEFT JOIN Orders ON Customers.customer_id = Orders.customer_id;
```
上述查询将返回所有的客户ID(Customers表)以及与之相关的订单ID(Orders表)。如果某个客户没有对应的订单,则订单ID列将为NULL。
- 右外连接(Right Outer Join): 返回右表中的所有行以及左表中与右表匹配的行。如果左表中没有匹配的行,则左表中的列将被填充为NULL。
SELECT Customers.customer_id, Orders.order_id
FROM Customers
RIGHT JOIN Orders ON Customers.customer_id = Orders.customer_id;
```
上述查询将返回所有的订单ID(Orders表)以及与之相关的客户ID(Customers表)。如果某个订单没有对应的客户,则客户ID列将为NULL。
- 全外连接(Full Outer Join): 返回左表和右表中的所有行,无论是否有匹配的行。
SELECT Customers.customer_id, Orders.order_id
FROM Customers
FULL JOIN Orders ON Customers.customer_id = Orders.customer_id;
```
上述查询将返回所有的客户ID(Customers表)和订单ID(Orders表),无论是否有匹配的行。如果某个表中没有匹配的行,则对应的列将被填充为NULL。
内连接和外连接是在联表查询中常用的连接方式,可以根据实际需求选择适合的连接类型来获取相关的数据。
自关联查询是指在一个表中通过使用表的别名将其自身进行连接的查询操作。该操作在处理具有层级结构数据的表格时特别有用。
例如,考虑一个员工表(Employees),其中每个员工都有一个上级经理,可以使用自关联查询来获取员工及其对应的经理的信息。
以下是一个使用自关联查询进行联表查询的示例:
SELECT e.employee_name, m.employee_name AS manager_name
FROM Employees e
JOIN Employees m ON e.manager_id = m.employee_id;
```
在上面的查询中,我们使用两个不同的表别名来表示同一个员工表。通过将员工表(别名为e)与自身(别名为m)进行连接,我们可以匹配每个员工的经理ID(manager_id)与其经理的员工ID(employee_id)。
通过这个自关联查询,我们可以获取包括员工名称和对应经理名称的结果集。在结果集中,每行包含一名员工和其经理的信息。
自关联查询可以在处理具有递归结构的数据或需要与表自身进行关联的情况下发挥作用。但是,在使用自关联查询时,要注意设置适当的连接条件,以避免出现无限循环或重复的数据。