Docker部署MySQL及DDL/DML学习(二)

DML(数据操纵语言)学习

当我们需要对MySQL数据库中的数据进行操作时,我们可以使用数据操作语言(DML)。DML包括SELECT、INSERT、UPDATE和DELETE语句。

SELECT语句

SELECT语句用于从MySQL数据库中检索数据。它的基本语法如下:

SELECT column1, column2, ... FROM table_name WHERE condition;

其中,column1, column2, ...是要查询的列名,table_name是要查询的表名,condition是查询条件。

例如,要查询customers表中的所有数据,可以使用以下查询:

SELECT * FROM customers;

WHERE用于指定查询条件。它的基本语法如下:

SELECT column1, column2, ... FROM table_name WHERE condition;

其中,condition是查询条件。

例如,要查询customers表中姓氏为Smith的客户,可以使用以下查询:

SELECT * FROM customers WHERE last_name = 'Smith';

ORDER BY用于按照指定的列对查询结果进行排序。它的基本语法如下:

SELECT column1, column2, ... FROM table_name ORDER BY column1 [ASC|DESC];

其中,column1是要排序的列名,ASC表示升序排序,DESC表示降序排序。

例如,要按照客户的姓氏对customers表进行升序排序,可以使用以下查询:

SELECT * FROM customers ORDER BY last_name ASC;

GROUP BY用于将查询结果按照指定的列进行分组,并对每个分组进行聚合计算。它的基本语法如下:

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

其中,column1, column2, ...是要分组的列名,aggregate_function(column)是要对每个分组进行的聚合计算,例如SUM(column)、AVG(column)、COUNT(column)等。

例如,要按照客户的国家对orders表进行分组,并计算每个国家的订单总数,可以使用以下查询:

SELECT country, COUNT(*) as total_orders
FROM orders
GROUP BY country;

这个查询将orders表按照国家进行分组,并对每个分组计算订单总数。查询结果将包含每个国家的名称和订单总数。

需要注意的是,GROUP BY语句必须放在WHERE语句之后,而聚合函数必须放在SELECT语句中。在分组时,只能使用SELECT语句中指定的列和聚合函数,而不能使用其他列。

INSERT语句

INSERT INTO用于向数据库中插入新数据。它的基本语法如下:

INSERT INTO table_name (column1, column2, ...) VALUES (value1, value2, ...);

其中,table_name是要插入数据的表名,column1, column2, ...是要插入数据的列名,value1, value2, ...是要插入的数据值。

例如,要向customers表中插入一条新的客户数据,可以使用以下查询:

INSERT INTO customers (first_name, last_name, email) VALUES ('John', 'Doe', 'john.doe@example.com');

UPDATE语句

UPDATE用于更新数据库中的数据。它的基本语法如下:

UPDATE table_name SET column1 = value1, column2 = value2, ... WHERE condition;

其中,table_name是要更新数据的表名,column1 = value1, column2 = value2, ...是要更新的列和值,condition是更新条件。

例如,要将customers表中姓氏为Smith的客户的邮箱地址更新为new.email@example.com,可以使用以下查询:

UPDATE customers SET email = 'new.email@example.com' WHERE last_name = 'Smith';

DELETE语句

DELETE用于从数据库中删除数据。它的基本语法如下:

DELETE FROM table_name WHERE condition;

其中,table_name是要删除数据的表名,condition是删除条件。

例如,要从customers表中删除姓氏为Doe的客户,可以使用以下查询:

DELETE FROM customers WHERE last_name = 'Doe';

联表查询

在MySQL中,JOIN操作是将两个或多个表中的数据组合在一起的一种方法。JOIN操作可以帮助我们从多个表中检索数据,并将它们组合在一起以便更好地分析和理解数据。

MySQL中有四种不同类型的JOIN操作:LEFT JOIN、RIGHT JOIN、INNER JOIN和FULL JOIN。下面我们将逐一介绍它们的用法和区别。

INNER JOIN

INNER JOIN操作返回两个表中都存在的行。如果一个表中没有与另一个表中的行匹配的行,则不会返回任何数据。

下面是一个INNER JOIN操作的示例:

SELECT *
FROM table1
INNER JOIN table2
ON table1.id = table2.id;

在这个例子中,我们将table1和table2两个表连接起来。我们使用ON关键字指定了连接条件,即table1.id = table2.id。这意味着我们将根据这个条件将两个表中的数据进行匹配。

LEFT JOIN

LEFT JOIN操作返回左表中的所有行,以及右表中与左表中的行匹配的行。如果右表中没有与左表中的行匹配的行,则返回NULL值。

下面是一个LEFT JOIN操作的示例:

SELECT *
FROM table1
LEFT JOIN table2
ON table1.id = table2.id;

在这个例子中,我们将table1和table2两个表连接起来。我们使用ON关键字指定了连接条件,即table1.id= table2.id。这意味着我们将根据这个条件将两个表中的数据进行匹配。

RIGHT JOIN

RIGHT JOIN操作与LEFT JOIN操作类似,但是它返回右表中的所有行,以及左表中与右表中的行匹配的行。如果左表中没有与右表中的行匹配的行,则返回NULL值。

下面是一个RIGHT JOIN操作的示例:

SELECT *
FROM table1
RIGHT JOIN table2
ON table1.id = table2.id;

在这个例子中,我们将table1和table2两个表连接起来。我们使用ON关键字指定了连接条件,table1.id= table2.id。这意味着我们将根据这个条件将两个表中的数据进行匹配。

FULL JOIN

FULL JOIN操作返回两个表中的所有行。如果一个表中没有与另一个表中的行匹配的行,则返回NULL值。

下面是一个FULL JOIN操作的示例:

SELECT *
FROM table1
FULL JOIN table2
ON table1.id = table2.id;

在这个例子中,我们将table1和table2两个表连接起来。我们使用ON关键字指定了连接条件,table1.id = table2.id。这意味着我们将根据这个条件将两个表中的数据进行匹配

MySQL中的子查询

在MySQL中,子查询是一种查询语句,它嵌套在另一个查询语句中。子查询可以帮助我们从一个表中检索数据,并将其用作另一个查询的条件。

MySQL中的子查询可以嵌套多层,每个子查询都可以返回一个结果集,这个结果集可以用作另一个查询的条件。

下面我们将逐一介绍MySQL中子查询的用法和示例。

子查询的基本语法

子查询的基本语法如下:

SELECT column1, column2, ...
FROM table1
WHERE column_name operator (SELECT column_name FROM table_name WHERE condition);

在这个语法中,我们使用了一个子查询,它嵌套在WHERE子句中。子查询返回一个结果集,这个结果集将用作WHERE子句中的条件。

子查询的示例

下面是一个使用子查询的示例:

SELECT *
FROM orders
WHERE customer_id IN (SELECT customer_id FROM customers WHERE country = 'USA');

在这个示例中,我们使用了一个子查询,它嵌套在WHERE子句中。子查询返回一个结果集,这个结果集包含了所有来自美国的客户的ID。这个结果集将用作WHERE子句中的条件,以过滤orders表中来自美国的客户的订单。

子查询的类型

MySQL中有两种类型的子查询:标量子查询和表子查询。

标量子查询

标量子查询返回一个单一的值,这个值可以用作另一个查询的条件。

下面是一个标量子查询的示例:

SELECT *
FROM orders
WHERE order_date > (SELECT MAX(order_date) FROM orders);

在这个示例中,我们使用了一个标量子查询,它返回了orders表中最近的订单日期。这个日期将用作WHERE子句中的条件,以过滤orders表中最近的订单。

表子查询

表子查询返回一个结果集,这个结果集可以用作另一个查询的条件。

下面是一个表子查询的示例:

SELECT *
FROM orders
WHERE customer_id IN (SELECT customer_id FROM customers WHERE country = 'USA');

在这个示例中,我们使用了一个表子查询,它返回了所有来自美国的客户的ID。这个结果集将用作WHERE子句中的条件,以过滤orders表中来自美国的客户的订单。

MySQL常用函数

MySQL是一种常用的关系型数据库管理系统,它提供了许多内置函数来处理和操作数据,包括字符串函数、日期和时间函数、数学函数和聚合函数。

字符串函数

CONCAT

CONCAT函数用于将两个或多个字符串连接在一起。它的语法如下:

CONCAT(string1, string2, ...)

例如,要将名字和姓氏连接在一起,可以使用以下查询:

SELECT CONCAT(first_name, ' ', last_name) AS full_name FROM customers;
SUBSTRING

SUBSTRING函数用于从字符串中提取子字符串。它的语法如下:

SUBSTRING(string, start, length)

其中,string是要提取子字符串的字符串,start是子字符串的起始位置,length是子字符串的长度。

例如,要从字符串中提取前5个字符,可以使用以下查询:

SELECT SUBSTRING('Hello, world!', 1, 5);
REPLACE

REPLACE函数用于替换字符串中的子字符串。它的语法如下:

REPLACE(string, from_string, to_string)

其中,string是要替换子字符串的字符串,from_string是要替换的子字符串,to_string是要替换成的字符串。

例如,要将字符串中的所有空格替换为下划线,可以使用以下查询:

SELECT REPLACE('Hello, world!', ' ', '_');

日期和时间函数

NOW

NOW函数用于返回当前日期和时间。它的语法如下:

NOW()

例如,要获取当前日期和时间,可以使用以下查询:

SELECT NOW();
DATE_FORMAT

DATE_FORMAT函数用于将日期和时间格式化为指定的字符串。它的语法如下:

DATE_FORMAT

DATE_FORMAT函数用于将日期和时间格式化为指定的字符串。它的语法如下:

DATE_FORMAT(date, format)

其中,date是要格式化的日期和时间,format是要格式化成的字符串。

例如,要将日期格式化为年-月-日的形式,可以使用以下查询:

SELECT DATE_FORMAT(NOW(), '%Y-%m-%d');

数学函数

ABS

ABS函数用于返回一个数的绝对值。它的语法如下:

ABS(number)

例如,要获取-10的绝对值,可以使用以下查询:

SELECT ABS(-10);

ROUND

ROUND函数用于将一个数四舍五入到指定的小数位数。它的语法如下:

ROUND(number, decimals)

其中,number是要四舍五入的数,decimals是要保留的小数位数。

例如,要将3.14159四舍五入到两位小数,可以使用以下查询:

SELECT ROUND(3.14159, 2);

聚合函数

COUNT

COUNT函数用于计算指定列中的行数。它的语法如下:

COUNT(column)

例如,要计算customers表中的行数,可以使用以下查询:

SELECT COUNT(*) FROM customers;
SUM

SUM函数用于计算指定列中的数值总和。它的语法如下:

SUM(column)

例如,要计算orders表中的总销售额,可以使用以下查询:

SELECT SUM(total_amount) FROM orders;
AVG

AVG函数用于计算指定列中的平均值。它的语法如下:

AVG(column)

例如,要计算orders表中的平均销售额,可以使用以下查询:

SELECT AVG(total_amount) FROM orders;
THE END