欢迎光临
我们一直在努力

MySQL-04数据查询语言DQL(单表)

文章目录

  • 一、DQL概述和作用
    • 1.1 DQL 核心定义与特征
    • 1.2 DQL 语法分类
      • 1. 单表查询
      • 2. 多表查询
  • 二、基本SELECT查询语句
    • 2.1基础SELECT语法(不指定条件)
    • 2.2表结构查看
    • 2.3条件查询(WHERE 子句)
    • 2.4基础 SELECT 实战练习
      • 练习一:基础查询场景
      • 练习二:条件查询场景
  • 三、运算符使用
    • 3.1算术运算符
      • 1. 核心作用
      • 2. 运算符列表
      • 3. 核心注意点
    • 3.2比较运算符
      • 1. 核心作用
      • 2. 运算符列表
      • 3. 核心注意点
    • 3.3逻辑运算符
      • 1. 核心作用
      • 2. 运算符列表
      • 3. 核心注意点
    • 3.4运算符优先级(从低到高)
      • 核心注意点
    • 3.5实战练习场景
      • 1. 算术运算符练习
      • 2. 比较运算符练习
      • 3. 逻辑运算符练习
    • 3.6知识点小结
  • 四、单行和多行函数
    • 4.1函数基础与分类
      • 1. SQL函数介绍
      • 2. 内置函数分类及特征
      • 3. 内置函数子分类
    • 4.2单行函数
      • 1. 数字函数
      • 2. 字符串函数
      • 3. 日期/时间函数
        • (1)时间获取类
        • (2)时间分量提取类
        • (3)时间运算类
        • (4)时间格式化类
      • 4. 流程函数
        • (1)IF函数
        • (2)IFNULL函数
        • (3)CASE表达式
    • 4.3多行函数(聚合函数)
      • 1. 常用聚合函数
      • 2. 核心规则
    • 4.4实战练习场景
      • 1. 时间函数练习
      • 2. 流程函数练习
    • 4.5知识点小结
  • 五、高级查询处理
    • 5.1分组查询(GROUP BY)
      • 1. 核心概念
      • 2. 语法结构
      • 3. 分组过滤(HAVING)
      • 4. WHERE 与 HAVING 核心区别
      • 5. 实战练习
    • 5.2排序查询(ORDER BY)
      • 1. 核心概念
      • 2. 语法结构
      • 3. 实战练习
    • 5.3数据切割(分页查询,LIMIT)
      • 1. 核心概念
      • 2. 语法结构
      • 3. 分页公式
      • 4. 实战练习
    • 5.4 SELECT 语句执行过程
      • 1. 关键字书写顺序(不可颠倒)
      • 2. 实际执行顺序
      • 3. 列别名使用规则
    • 5.5单表综合练习场景

一、DQL概述和作用

1.1 DQL 核心定义与特征

  • 全称:Data Query Language(数据查询语言);
  • 核心作用:查询数据库中的数据,仅读取数据,不修改库表结构、不改变原表数据;
  • 结果形式:查询结果为虚拟表(结果集),不会生成新的物理表;
  • 核心关键字:SELECT(执行数据查询的唯一核心关键字)。

1.2 DQL 语法分类

1. 单表查询

  • 操作对象:仅从一张真实数据表中查询数据;
  • 核心组件:
    • SELECT 子句:指定要查询的列(字段);
    • WHERE 子句:筛选符合条件的数据行;
    • 运算符:用于条件判断(比较、逻辑等);
    • 函数:单行/多行函数(对数据做计算、格式化等);
    • 分组/排序:对结果集进行聚合统计、排序展示。

2. 多表查询

  • 操作逻辑:先通过“合并语法”将多张真实表合并为中间虚拟表,再对虚拟表执行查询;
  • 核心组件:
    • 多表合并语法(如 JOIN 系列);
    • 单表查询的所有核心组件(SELECT、WHERE、函数、分组、排序等)。

二、基本SELECT查询语句

2.1基础SELECT语法(不指定条件)

  • 情况1:非表查询

SELECT 1
SELECT 9/2;
SELECT VERSION();

类似Java控制台输出,直接输出结果。

  • 情况2:指定表

SELECT 列名1, 列名2, 列名3 FROM 表名;
或者
SELECT 表名.列名 , 表名.* FROM 表名;

指定表,查询表中的全部或者某些列。 列和列之间使用[ , ] 分割,如果是全部列可以使用*替代

  • 情况3:查询列起别名

SELECT 列名1 as 别名, 列名2, 列名3 as 别名 FROM 表名;
或者
SELECT 列名1 别名, 列名2, 列名3 别名 FROM 表名;

查询列可以起别名,as 可以省略。 起别名的意义主要是简化列名或者对应后期Java数据属性等 如果别名想要区分大小写,可以添加双引号 例如:”Name”

  • 情况4:去除重复行

SELECT DISTINCT 列名 [,列名,列名] FROM 表名;

指定列值去重复行,可以指定单列或者多列,但是DISTINCT关键字只写一次且在前面。

  • 情况5:查询常数

SELECT ‘燕山大学’ as corporation , 列名 , 列名… FROM 表名;

SELECT 查询还可以对常数进行查询。就是在 SELECT 查询结果中增加固定的常数列。 这列的取值是我们指定的,而不是从数据表中动态取出的。

2.2表结构查看

  • 核心命令:DESCRIBE(简写 DESC),在没有可视化工具场景下可以查看表结构;

DESCRIBE employees;

DESC employees;

  • 字段含义:
    • Field:字段名称;
    • Type:字段数据类型;
    • Null:是否允许存储 NULL 值;
    • Key:索引类型(PRI=主键、UNI=唯一键、MUL=普通索引);
    • Default:字段默认值;
    • Extra:额外属性(如 AUTO_INCREMENT 自增)。

2.3条件查询(WHERE 子句)

  • 核心作用:筛选符合条件的数据行,减少返回结果集大小;
  • 执行逻辑:先通过 WHERE 筛选行,再根据 SELECT 指定列返回结果;
  • 语法位置:WHERE 子句需写在 FROM 子句之后;
  • 基础语法:SELECT 字段1, 字段2 FROM 表名 WHERE 过滤条件;。

SELECT 字段1,字段2 FROM 表名 WHERE 过滤条件;

2.4基础 SELECT 实战练习

# 一、准备表数据
— 创建库
CREATE DATABASE IF NOT EXISTS test04_dql;
USE test04_dql;

— 创建员工表
DROP TABLE IF EXISTS `t_employee`;

CREATE TABLE `t_employee` (
`eid` INT NOT NULL COMMENT \’员工编号\’,
`ename` VARCHAR(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT \’员工姓名\’,
`salary` DOUBLE NOT NULL COMMENT \’薪资\’,
`commission_pct` DECIMAL(3,2) DEFAULT NULL COMMENT \’奖金比例\’,
`birthday` DATE NOT NULL COMMENT \’出生日期\’,
`gender` ENUM(\’男\’,\’女\’) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT \’男\’ COMMENT \’性别\’,
`tel` CHAR(11) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT \’手机号码\’,
`email` VARCHAR(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT \’邮箱\’,
`address` VARCHAR(150) DEFAULT NULL COMMENT \’地址\’,
`work_place` SET(\’北京\’,\’深圳\’,\’上海\’,\’武汉\’) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT \’北京\’ COMMENT \’工作地点\’
) ENGINE=INNODB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

INSERT INTO `t_employee`(`eid`,`ename`,`salary`,`commission_pct`,`birthday`,`gender`,`tel`,`email`,`address`,`work_place`)
VALUES (1,\’孙洪亮\’,28000,\’0.65\’,\’1980-10-08\’,\’男\’,\’13789098765\’,\’shl@atguigu.com\’,\’白庙村西街\’,\’北京,深圳\’),
(2,\’何进\’,7001,\’0.10\’,\’1984-08-03\’,\’男\’,\’13456732145\’,\’hj@atguigu.com\’,\’半截塔存\’,\’深圳,上海\’),
(3,\’邓超远\’,8000,NULL,\’1985-04-09\’,\’男\’,\’18678973456\’,\’dcy666@atguigu.com\’,\’宏福苑\’,\’北京,深圳,上海,武汉\’),
(4,\’黄熙萌\’,9456,NULL,\’1986-09-07\’,\’女\’,\’13609876789\’,\’hxm@atguigu.com\’,\’白庙村东街\’,\’深圳,上海,武汉\’),
(5,\’陈浩\’,8567,NULL,\’1978-08-02\’,\’男\’,\’13409876545\’,\’ch888@atguigu.com\’,\’回龙观\’,\’北京,深圳,上海\’),
(6,\’韩庚年\’,12000,NULL,\’1985-04-03\’,\’男\’,\’18945678986\’,\’hgn@atguigu.com\’,\’龙泽\’,\’深圳,上海\’),
(7,\’贾宝玉\’,15700,\’0.24\’,\’1982-08-02\’,\’男\’,\’15490876789\’,\’jby@atguigu.com\’,\’霍营\’,\’北京,武汉\’),
(8,\’李晨熙\’,9000,\’0.40\’,\’1983-03-02\’,\’女\’,\’13587689098\’,\’lc@atguigu.com\’,\’东三旗\’,\’深圳,上海,武汉\’),
(9,\’李易峰\’,7897,NULL,\’1984-09-01\’,\’男\’,\’13467676789\’,\’lyf@atguigu.com\’,\’西山旗\’,\’武汉\’),
(10,\’陆风\’,8789,NULL,\’1989-04-02\’,\’男\’,\’13689876789\’,\’lf@atguigu.com\’,\’天通苑一区\’,\’北京\’),
(11,\’黄冰茹\’,15678,NULL,\’1983-05-07\’,\’女\’,\’13787876565\’,\’hbr@atguigu.com\’,\’立水桥\’,\’深圳\’),
(12,\’孙红梅\’,9000,NULL,\’1986-04-02\’,\’女\’,\’13576234554\’,\’shm@atguigu.com\’,\’立城苑\’,\’上海\’),
(13,\’李冰冰\’,18760,NULL,\’1987-04-09\’,\’女\’,\’13790909887\’,\’lbb@atguigu.com\’,\’王府温馨公寓\’,\’北京\’),
(14,\’谢吉娜\’,18978,\’0.25\’,\’1990-01-01\’,\’女\’,\’13234543245\’,\’xjn@atguigu.com\’,\’园中园\’,\’上海,武汉\’),
(15,\’董吉祥\’,8978,NULL,\’1987-05-05\’,\’男\’,\’13876544333\’,\’djx@atguigu.com\’,\’小辛庄\’,\’北京,上海\’),
(16,\’彭超越\’,9878,NULL,\’1988-03-06\’,\’男\’,\’18264578930\’,\’pcy@atguigu.com\’,\’西二旗\’

赞(0)
未经允许不得转载:171主机测评 » MySQL-04数据查询语言DQL(单表)
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址