首页 > 数据库 >3.6 MySQL基本查询大全(select、子查询、Distinct、group by分组,order排序、limit限制、左右连接查询)

3.6 MySQL基本查询大全(select、子查询、Distinct、group by分组,order排序、limit限制、左右连接查询)

时间:2024-09-09 11:23:36浏览次数:12  
标签:group name Distinct 查询 表中 table column1 SELECT

文章目录


3.6.1 MySQL的基本查询

让我们详细探讨MySQL中的基本查询操作,包括各种子句和查询技巧。

1. SELECT语句基本语法

SELECT column1, column2, ...
FROM table_name
WHERE condition
ORDER BY column1, column2, ...
LIMIT offset, count;
  • SELECT 用于指定要查询的列。
  • FROM 指定查询的表名。
  • WHERE 用于设置查询条件。
  • ORDER BY 用于对查询结果进行排序。
  • LIMIT 用于限制查询结果的数量。

2. DISTINCT

DISTINCT 关键字用于返回唯一不同的值。

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

3. 指定列,去除重复列

指定列时,可以列出需要查询的列名,去除重复列通常使用 DISTINCT

SELECT DISTINCT column1, column2
FROM table_name;

4. 给列设置别名

使用 AS 关键字给列设置别名。

SELECT column1 AS alias1, column2 AS alias2
FROM table_name;

5. 使用WHERE子句查询指定条件

比较判断
SELECT *
FROM table_name
WHERE column1 = 'value';

显示效果:返回 table_name 表中 column1 列值为 ‘value’ 的所有行。

范围判断
SELECT *
FROM table_name
WHERE column1 BETWEEN value1 AND value2;

显示效果:返回 table_name 表中 column1 列值在 value1value2 范围内的所有行。

字符串模式匹配
SELECT *
FROM table_name
WHERE column1 LIKE '%value%';

显示效果:返回 table_name 表中 column1 列值包含 ‘value’ 字符串的所有行。

错误判断
SELECT *
FROM table_name
WHERE column1 REGEXP '^[a-zA-Z]+$';

显示效果:返回 table_name 表中 column1 列值符合正则表达式(只包含字母)的所有行。

空值判断
SELECT *
FROM table_name
WHERE column1 IS NULL;

显示效果:返回 table_name 表中 column1 列为 NULL 的所有行。

6. 使用ORDER子句对查询结果排序

SELECT *
FROM table_name
ORDER BY column1 ASC, column2 DESC;

显示效果:返回 table_name 表中所有行,按 column1 升序和 column2 降序排序。

7. 使用LIMIT限制查询结果数量

SELECT *
FROM table_name
LIMIT 10;

显示效果:返回 table_name 表中的前10行数据。

3.6.2 分组查询

1. 聚合查询
SELECT COUNT(*), AVG(column1), MAX(column2)
FROM table_name;

显示效果:返回 table_name 表的记录数、column1 列的平均值和 column2 列的最大值。

2. GROUP BY语句
SELECT column1, COUNT(*)
FROM table_name
GROUP BY column1;

显示效果:返回 table_name 表中 column1 列的每个不同值及其对应的行数。

3. HAVING语句
SELECT column1, COUNT(*)
FROM table_name
GROUP BY column1
HAVING COUNT(*) > 1;

显示效果:返回 table_name 表中 column1 列的每个值,且该值对应的行数大于1。

3.6.3 连接查询

1. 相等连接
SELECT a.*, b.*
FROM table_a a
JOIN table_b b ON a.id = b.a_id;

显示效果:返回 table_atable_b 表中 id 相等的行的合并结果。

2. 自连接
SELECT a.*, b.*
FROM table_name a
JOIN table_name b ON a.id = b.parent_id;

显示效果:返回 table_name 表中 idparent_id 相等的行的合并结果。

3. 不等值连接
SELECT a.*, b.*
FROM table_a a
LEFT JOIN table_b b ON a.id <> b.a_id;

显示效果:返回 table_a 表中的所有行,以及 table_b 表中 id 不等于 a_id 的行。

4. 左外连接
SELECT a.*, b.*
FROM table_a a
LEFT JOIN table_b b ON a.id = b.a_id;

显示效果:返回 table_a 表中的所有行,以及 table_b 表中 id 等于 a_id 的行。

5. 右外连接
SELECT a.*, b.*
FROM table_a a
RIGHT JOIN table_b b ON a.id = b.a_id;

显示效果:返回 table_b 表中的所有行,以及 table_a 表中 id 等于 a_id 的行。

3.6.4 子查询

1. 返回单值的子查询
SELECT *
FROM table_name
WHERE column1 = (SELECT MAX(column1) FROM table_name);

显示效果:返回 table_name 表中 column1 列值等于该列最大值的所有行。

2. 返回多值的子查询
SELECT *
FROM table_name
WHERE column1 IN (SELECT column1 FROM another_table);

显示效果:返回 table_name 表中 column1 列值在 another_table 表的 column1 列中的所有行。

3.6.5 合并查询

使用UNION
SELECT column1 FROM table1
UNION
SELECT column1 FROM table2;

显示效果:返回 table1table2 表中 column1 列的所有不同值。

使用UNION ALL
SELECT column1 FROM table1
UNION ALL
SELECT column1 FROM table2;

显示效果:返回 table1table2 表中 column1 列的所有值,包括重复值。

注意事项

  • 在使用 WHERE 子句时,确保条件表达式正确。
  • 使用 ORDER BY 时,可以指定多个列进行排序。
  • 使用 LIMIT 时,可以指定偏移量和数量。
  • 在使用 GROUP BYHAVING 时,确保聚合函数和条件正确。
  • 在进行连接查询时,确保连接条件正确。
  • 在使用子查询时,确保子查询返回正确的结果集。

标签:group,name,Distinct,查询,表中,table,column1,SELECT
From: https://blog.csdn.net/Argonaut_/article/details/142054167

相关文章

  • 11.DQL(数据查询语言)-分组查询
    语法:SELECT字段列表FROM表名[WHERE条件]GROUPBY分组字段名[HAVING分组后的过滤条件];where和having的区别:执行时机不同:where是分组之前进行过滤,不满足where条件不参与分组;having是分组后对结果进行过滤。判断条件不同:where不能对聚合函数进行判断,而having可......
  • 09.DQL(数据查询语言)-条件查询
    语法:SELECT字段列表FROM表名WHERE条件列表;条件:比较运算符 功能> 大于>= 大于等于< 小于<= 小于等于= 等于<>或!= 不等于BETWEEN…AND… 在某个范围内(含......
  • 基于二分混合空间曲线的HBase多维索引构建及查询优化问题研究
    目录1绪论11.1研究背景与意义11.2国内外研究现状21.2.1索引技术21.2.2空间填充曲线51.3论文主要工作61.4论文章节安排72相关理论基础与技术简介82.1大数据存储与计算技术82.1.1Hadoop生态圈82.1.2HDFS82.1.3HBase92.1.4SparkStreami......
  • Javaweb-多表查询案例
    数据准备DROPTABLEIFEXISTSemp;DROPTABLEIFEXISTSdept;DROPTABLEIFEXISTSjob;DROPTABLEIFEXISTSsalarygrade;--部门表CREATETABLEdept(idINTPRIMARYKEYPRIMARYKEY,--部门iddnameVARCHAR(50),--部门名称locVARCHAR(50)--部门所在地);-......
  • Javaweb-子查询
    select*fromempwheresalary>(selectsalaryfromempwherename='猪八戒');1.select*fromempwheredep_idin(selectdidfromdeptwherednamein('财务部','市场部'));2.select*fromempwheredep_id=(selectdidfromd......
  • 小猪佩奇学英语——第六天——The Playgroup
    第六天——ThePlaygroup例句George,areyoulookingforwardtotheplaygroup?乔治,你现在是不是正期待去托儿所。lookforwardtosth期待某物lookforwardtodoing...期待做某事用looking表示正期待....maybeGeorgeistoosmalltogotomyplaygroup?too......
  • Python中如何实现字符串的查询和替换?
    在Python中,字符串的查询和替换是字符串处理中的基础且常用的操作。Python提供了多种方法来实现这些功能,包括使用内置的方法、正则表达式等。一、字符串的查询字符串的查询通常指的是在字符串中查找子串的位置、出现的次数,或者检查子串是否存在等。Python的字符串对象提供了多......
  • Javaweb-连接查询-内连接和外连接
    selectemp.name,emp.gender,dept.dnamefromemp,deptwhereemp.dep_id=dept.did;selectt1.name,t1.gender,t2.dnamefromempt1,deptt2wheret1.dep_id=t2.did;--为了防止表名过长,还可以给表取别名select*fromempINNERJOINdeptonemp.dep_id=dept.did;1......
  • Javaweb-多表查询
    1.createtabledept( didintprimarykeyauto_increment, dnamevarchar(20));2.createtableemp( idintprimarykeyauto_increment, namevarchar(10), genderchar(1), salarydouble, join_datedate, dep_idint, FOREIGNkey(dep_id)REFERENCESde......
  • MySQL 函数查询返回NULL
    createtableuser(idbigintprimarykeyauto_increment,ageint);gorm使用函数查询时,通过IFNULL来确保查询不到记录时有默认值。max函数selectmax(age)fromuser;selectIFNULL(max(age),0)fromuser;sum函数count函数默认是0。......