目录
正则表达式查询
模糊查询
排序查询
分组查询
子查询
内连接
限制查询
分页查询
MySQL 查询语句大全包含了各种常用的查询语句,如SELECT、INSERT、UPDATE、DELETE等。以下是一些常见的 MySQL 查询语句:
SELECT语句:用于从数据库表中检索数据。
SELECT 列名1, 列名2, ... FROM 表名 WHERE 条件;
INSERT语句:用于向数据库表中插入新的数据。
INSERT INTO 表名 (列名1, 列名2, ...) VALUES (值1, 值2, ...);
UPDATE语句:用于更新数据库表中的数据。
UPDATE 表名 SET 列名1 = 新值1, 列名2 = 新值2 WHERE 条件;
DELETE语句:用于从数据库表中删除数据。
DELETE FROM 表名 WHERE 条件;
CREATE TABLE语句:用于创建新的数据库表。
CREATE TABLE 表名 (列名1 数据类型1, 列名2 数据类型2, ...);
ALTER TABLE语句:用于修改数据库表的结构。
ALTER TABLE 表名 ADD 列名 数据类型;
ALTER TABLE 表名 DROP 列名;
ALTER TABLE 表名 MODIFY 列名 新数据类型;
DROP TABLE语句:用于删除数据库表。
DROP TABLE 表名;
SELECT DISTINCT语句:用于检索不重复的数据。
SELECT DISTINCT 列名 FROM 表名;
ORDER BY语句:用于对结果进行排序。
SELECT 列名 FROM 表名 ORDER BY 列名 ASC/DESC;
GROUP BY语句:用于对结果进行分组。
SELECT 列名1, 列名2 FROM 表名 GROUP BY 列名1;
上述查询语句只是一些常见的示例,实际使用中还有更多的用法和语句。MySQL 的查询语句非常灵活,可以根据具体需求进行组合和调整。
在MySQL中,可以使用正则表达式的查询语法来进行模式匹配。以下是几个常用的正则表达式查询语法:
1.使用REGEXP或RLIKE运算符:
SELECT * FROM table_name WHERE column_name REGEXP 'pattern';
SELECT * FROM table_name WHERE column_name RLIKE 'pattern';
2.使用REGEXP_LIKE函数(仅适用于MySQL版本8.0及更高版本):
SELECT * FROM table_name WHERE REGEXP_LIKE(column_name, 'pattern');
其中,'pattern'是你要匹配的模式,可以使用正则表达式的语法来描述匹配规则。比如,可以使用.
表示匹配任意单个字符,*
表示匹配前面的字符0次或多次,+
表示匹配前面的字符1次或多次,[]
表示匹配其中的任意一个字符等等。
以下是一些常见的正则表达式查询示例:
1.查询列中包含特定单词的行:
SELECT * FROM table_name WHERE column_name REGEXP '\\bword\\b';
2.查询列中以特定字符串开头的行:
SELECT * FROM table_name WHERE column_name REGEXP '^prefix';
3.查询列中以特定字符串结尾的行:
SELECT * FROM table_name WHERE column_name REGEXP 'suffix$';
4.查询列中包含匹配特定模式的行:
SELECT * FROM table_name WHERE column_name REGEXP 'pattern';
需要注意的是,正则表达式查询可能会影响查询性能,尤其是对于大型数据集。因此,在使用正则表达式查询之前,请确保你真正需要使用正则表达式来进行模式匹配,并且在可能的情况下,尽量使用其他更高效的查询方法。
在MySQL中,可以使用LIKE关键字进行模糊查询。以下是几个常见的模糊查询示例:
查询以指定字符开头的记录:
SELECT * FROM 表名 WHERE 列名 LIKE '指定字符%'
查询以指定字符结尾的记录:
SELECT * FROM 表名 WHERE 列名 LIKE '%指定字符'
查询包含指定字符的记录:
SELECT * FROM 表名 WHERE 列名 LIKE '%指定字符%'
查询指定范围的字符开头的记录:
SELECT * FROM 表名 WHERE 列名 REGEXP '^[指定范围]'
这里的"指定字符"可以使用通配符来表示更多的条件:
%
:匹配任意多个字符(包括零个字符)_
:匹配任意一个字符[ ]
:匹配括号内的任意一个字符[^ ]
:匹配不在括号内的任意一个字符注意:如果需要进行大小写敏感的模糊查询,可以使用BINARY关键字来强制区分大小写,例如:
SELECT * FROM 表名 WHERE 列名 LIKE BINARY '指定字符%'
在MySQL中,可以使用ORDER BY
子句对查询结果进行排序。它可以按照一个或多个列进行升序或降序排序。
基本语法如下:
SELECT 列1, 列2, ...
FROM 表名
ORDER BY 列名1 [ASC | DESC], 列名2 [ASC | DESC], ...
其中,列名1
、列名2
等表示要排序的列名,ASC
表示升序排序,DESC
表示降序排序。
举个例子,假设有一个名为students
的表,包含id
、name
和score
三列,想要根据score
列进行降序排序,可以使用以下查询语句:
SELECT * FROM students ORDER BY score DESC;
如果想要先按照score
列进行降序排序,再按照name
列进行升序排序,可以使用以下查询语句:
SELECT * FROM students ORDER BY score DESC, name ASC;
注意,如果没有指定排序顺序,默认是升序排序(ASC)。
MySQL分组查询是指将数据按照一定的条件进行分组,并对每个分组进行聚合操作的查询。
语法格式如下:
SELECT 列名1, 列名2, ... FROM 表名 GROUP BY 列名1, 列名2, ...
其中,列名1, 列名2, ... 是要查询的列名,表名是要查询的表名。GROUP BY 子句后面是按照哪些列对数据进行分组。
例如,我们有一个学生表(students),包含学生的姓名(name),性别(gender)和年龄(age)信息。我们可以按照性别进行分组,并统计每个性别的人数:
SELECT gender, COUNT(*) FROM students GROUP BY gender
这样就会返回一个结果集,包含性别和每个性别对应的人数。
另外,我们还可以在分组后进行聚合操作,例如求平均值、求和等:
SELECT gender, AVG(age), SUM(age) FROM students GROUP BY gender
这样就会返回每个性别的平均年龄和总年龄。
总之,MySQL分组查询可以用来对数据进行分类和聚合统计,非常有用。
MySQL中的子查询是一种查询嵌套在另一个查询中的方式。子查询可以在FROM子句、WHERE子句、HAVING子句中使用。
下面是一些示例子查询的使用情况:
在FROM子句中使用子查询:
SELECT * FROM (SELECT col1, col2 FROM table1) AS subquery;
这个查询中,子查询 (SELECT col1, col2 FROM table1)
返回一个临时表,然后在外部查询中使用该临时表。
在WHERE子句中使用子查询:
SELECT * FROM table1 WHERE col1 IN (SELECT col2 FROM table2);
这个查询中,子查询 (SELECT col2 FROM table2)
返回一个列值列表,然后在外部查询的WHERE子句中使用这个列表。
在HAVING子句中使用子查询:
SELECT col1, COUNT(col2) FROM table1 GROUP BY col1 HAVING COUNT(col2) > (SELECT AVG(col3) FROM table2);
这个查询中,子查询 (SELECT AVG(col3) FROM table2)
返回一个单个值,然后在外部查询的HAVING子句中使用这个值进行比较。
这只是子查询的一些基本用法示例,实际应用中还有更多复杂的情况。子查询可以帮助我们将复杂的查询分解为更小的部分,使查询更易于理解和管理。
MySQL内连接是一种用于合并两个或多个表的操作。内连接返回两个表中匹配的行。只有在两个表中都存在匹配的数据时,才会返回结果。
MySQL内连接的语法如下:
SELECT 列名
FROM 表1
INNER JOIN 表2 ON 表1.列 = 表2.列;
其中,表1
和表2
是要连接的两个表,列
是两个表中用于匹配的列名。
示例:
假设有两个表,一个是customers
表,包含customer_id
和customer_name
两列;另一个是orders
表,包含order_id
、customer_id
和order_date
三列。现在我们要获取所有有订单的客户及其订单日期,可以使用内连接来实现:
SELECT customer_name, order_date
FROM customers
INNER JOIN orders ON customers.customer_id = orders.customer_id;
这样就能得到一个包含客户名和订单日期的结果集。
注意:内连接中使用的ON
关键字指定了连接条件,也就是customers.customer_id = orders.customer_id
。这个条件指定了两个表之间的关联关系。
MySQL支持使用外连接来合并两个或多个表中的数据。具体有以下几种外连接方式:
左外连接(LEFT JOIN):返回左表中的所有记录,以及右表中与左表关联的记录。
SELECT * FROM table1
LEFT JOIN table2
ON table1.id = table2.id;
右外连接(RIGHT JOIN):返回右表中的所有记录,以及左表中与右表关联的记录。
SELECT * FROM table1
RIGHT JOIN table2
ON table1.id = table2.id;
全外连接(FULL OUTER JOIN):返回左表和右表中的所有记录,以及两个表中关联的记录。
SELECT * FROM table1
FULL OUTER JOIN table2
ON table1.id = table2.id;
需要注意的是,MySQL并不直接支持全外连接,可以使用左外连接和右外连接的组合来实现全外连接的效果。
另外,MySQL还支持使用内连接(INNER JOIN)来合并两个或多个表中的数据。内连接只返回两个表中关联的记录。
SELECT * FROM table1
INNER JOIN table2
ON table1.id = table2.id;
在MySQL中,可以使用LIMIT子句对查询结果进行限制。LIMIT子句有两个参数,第一个参数表示要跳过的记录数,第二个参数表示要返回的记录数。
以下是使用LIMIT子句进行查询限制的示例:
返回前n条记录:
SELECT * FROM table_name LIMIT n;
此查询将返回表中的前n条记录。
跳过m条记录,返回n条记录:
SELECT * FROM table_name LIMIT m, n;
此查询将跳过前m条记录,并返回之后的n条记录。
例如,如果要查询表中的前5条记录,可以使用以下查询语句:
SELECT * FROM table_name LIMIT 5;
如果要查询表中的第6到第10条记录,可以使用以下查询语句:
SELECT * FROM table_name LIMIT 5, 5;
注意,LIMIT子句中的参数可以是任意正整数,但要确保查询的范围在表的记录总数之内,否则将返回符合条件的所有记录。
在 MySQL 中进行分页查询,可以使用 LIMIT 子句结合 OFFSET 子句来实现。LIMIT 子句用于指定要返回的记录数,OFFSET 子句用于指定要跳过的记录数。
下面是一个基本的分页查询示例:
SELECT * FROM table_name LIMIT offset, limit;
其中,table_name
是要查询的表名,offset
是要跳过的记录数,limit
是要返回的记录数。
例如,要查询表中的第 1 到第 10 条记录,可以使用以下查询语句:
SELECT * FROM table_name LIMIT 0, 10;
如果要查询表中的第 11 到第 20 条记录,可以使用以下查询语句:
SELECT * FROM table_name LIMIT 10, 10;
在实际应用中,通常会根据当前页数和每页显示的记录数来计算出 offset 和 limit 值。假设每页显示 10 条记录,要查询第 3 页的数据,则可以使用以下查询语句:
SELECT * FROM table_name LIMIT 20, 10;
以上查询会跳过前 20 条记录,返回接下来的 10 条记录,即第 21 到第 30 条记录。