MySQL 查询语句大全

目录

正则表达式查询

模糊查询

排序查询

分组查询

子查询

内连接

限制查询

分页查询


 

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的表,包含idnamescore三列,想要根据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_idcustomer_name两列;另一个是orders表,包含order_idcustomer_idorder_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 条记录。

你可能感兴趣的:(oracle,数据库)