MySQL学习笔记:2.3 DQL-数据查询语言

目录

一、概述

二、DQL-基本查询

二、DQL-条件查询

三、DQL-聚合函数

四、DQL-分组查询

五、DQL-排序查询

六、DQL-分页查询

* DQL查询语句-综合练习

* 关于DQL的编写顺序与执行顺序


一、概述

DQL:Data Query Language  数据查询语言,用来查询数据库中表的记录。

查询关键字:SELECT

DQL语法:

SELECT 字段列表

FROM 表名列表

WHERE 条件列表

GROUP BY 分组字段列表

HAVING 分组后条件列表

ORDER BY 排序字段列表

LIMIT 分页参数;

主要掌握:

  • 基本查询

  • 条件查询(WHERE)

  • 聚合函数(count、max、min、avg、sum)

  • 分组查询(GROUP BY)

  • 排序查询(ORDER BY)

  • 分页查询(LIMIT)

二、DQL-基本查询

1、查询多个字段

SELECT 字段1, 字段2, 字段3 ...... FROM 表名;

查询所有字段:

SELECT * FROM 表名;

2、设置别名 AS

SELECT 字段1 [AS 别名1], 字段2 [AS 别名2] ..... FROM 表名;

3、去除重复记录 DISTINCT

SELECT DISTINCT 字段列表 FROM 表名;

DQL-基本查询练习案例

-- --------- DQL 基本查询 ---------

-- 准备数据 --
USE my_database;


# 1、创建表
CREATE TABLE emp(
    number          int             COMMENT '员工编号',
    worker_id       VARCHAR(10)     COMMENT '工号',
    name            VARCHAR(10)     COMMENT '姓名',
    gender          CHAR(1)         COMMENT '性别',
    age             TINYINT         COMMENT '年龄',
    id_card         CHAR(18)        COMMENT '身份证号',
    work_address    VARCHAR(50)     COMMENT '工作地址',
    entry_date      DATE            COMMENT '入职时间'
)COMMENT '员工信息表';

# 查询表结构
DESC emp;


# 2、插入数据
INSERT INTO emp (number, worker_id, name, gender, age, id_card,work_address,  entry_date)
    VALUES
        (1, '1', '柳岩', '女', 20, '123456789012345678', '北京', '2000-01-01'),
        (2, '2', '张无忌', '男', 18, '123456789012345670', '北京', '2005-09-01'),
        (3, '3', '韦一笑', '男', 38, '123456789712345670', '上海', '2005-08-01'),
        (4, '4', '赵敏', '女', 18, '123456757123845670','北京', '2009-12-01'),
        (5, '5', '小昭', '女', 16, '123456769012345678','上海', '2007-07-01'),
        (6, '6', '杨道', '男', 28, '12345678931234567X', '北京', '2006-01-01'),
        (7, '7', '范遥', '男', 40, '123456789212345670', '北京', '2005-05-01'),
        (8, '8', '黛绮丝', '女', 38, '123456157123645670', '天津', '2015-05-01'),
        (9, '9', '范凉凉', '女', 45, '123156789012345678', '北京', '2010-04-01'),
        (10,'10', '陈友谅', '男', 53, '123456789012345670','上海', '2011-01-01'),
        (11,'11', '张士诚','男', 55, '123567897123465670', '江苏', '2015-05-01'),
        (12,'12', '常遇春', '男', 32, '123446757152345670', '北京', '2004-02-01'),
        (13,'13', '张三丰', '男', 88, '123656789012345678', '江苏', '2020-11-01'),
        (14,'14', '灭绝', '女', 65, '123456719012345670', '西安', '2019-05-01'),
        (15,'15', '胡青牛', '男', 70, '12345674971234567X', '西安', '2018-04-01'),
        (16,'16', '周芷若', '女', 18, null,'北京', '2012-06-01');


# 查看表数据
SELECT * FROM emp;


-- 案例
-- 1.查询所有员工的姓名、年龄、性别

# 查询多个字段
SELECT name,age,gender FROM emp;


-- 2.查询所有员工的工作地址并设置可读性更好的中文别名“工作地点”

# 设置别名
SELECT work_address AS '工作地址' FROM emp;

# 可省略AS
# SELECT work_address '工作地址' FROM employees;


-- 3.查询所有员工的工作地址,查询结果不要重复
SELECT DISTINCT work_address AS '工作地址' FROM emp;

二、DQL-条件查询

DQL-条件查询

1、语法

SELECT 字段列表 FROM 表名 WHERE 条件列表;

2、条件

WHERE语句常用的查询条件:

  • 条件                                语句

  • 比较            =, >, <, >=, <=, (<>, != 不等于)

  • 逻辑运算    AND,  OR,  NOT,  XOR

  • 范围判断    BETWEEN AND,  NOT BETWEEN AND

  • 集合判断    IN,     NOT IN

  • 字符匹配    LIKE,  NOT LIKE 通配符 %, _

  • 空值判断    IS NULL,  IS NOT NULL,  ISNULL()

DQL-条件查询练习案例

-- --------- DQL 条件查询 ----------
USE my_database;


-- 1.查询年龄等于88岁的员工

# 条件查询:比较判断,等于
SELECT * FROM emp WHERE age = 88;


-- 2.查询年龄小于或等于20岁的员工

# 条件查询:比较判断,小于等于
SELECT * FROM emp WHERE age <= 20;


-- 3.查询没有身份证号的员工

# 条件查询:空值判断
SELECT * FROM emp WHERE id_card IS NULL;


-- 4.查询有身份证号的员工

SELECT * FROM emp WHERE id_card IS NOT NULL;


-- 5.查询年龄不等于88岁的所有员工

# 条件查询:比较判断,不等于
SELECT * FROM emp WHERE age<>88;


-- 6.查询年龄在15~20岁之间的员工

# 条件查询:范围判断 BETWEEN
SELECT * FROM emp WHERE age BETWEEN 15 AND 20;


-- 7.查询性别为女,且年龄小于25岁的员工

# 条件查询:逻辑运算 AND
SELECT * FROM emp WHERE gender = '女' AND age < 25;


-- 8.查询年龄为18或20或40岁的员工

# 条件查询: 集合判断 IN
SELECT * FROM emp WHERE age IN(18,20,40);


-- 9.查询姓名为2个字的员工

# 条件查询:字符匹配 '_'
SELECT * FROM emp WHERE name LIKE '__';


-- 10.查询身份证号末尾为'X’的员工

# 条件查询:字符匹配 '%'
SELECT * FROM emp WHERE id_card LIKE '%X';

三、DQL-聚合函数

1、介绍

    将一列数据作为一个整体,进行纵向计算。

2、常见聚合函数

    count / max / min / avg / sum

3、语法

SELECT 聚合函数(字段列表) FROM 表名;

DQL-聚合函数练习案例

-- --------- DQL 聚合函数 --------


-- 1.统计员工总数
SELECT COUNT(*) FROM emp;


-- 2.统计平均年龄、最大年龄、最小年龄

SELECT AVG(age) FROM emp;
SELECT MAX(age) FROM emp;
SELECT MIN(age) FROM emp;


-- 3.查询谁的年龄最大?

SELECT name FROM emp WHERE age = (SELECT MAX(age) FROM emp);


-- 4.统计来自西安的员工年龄之和

SELECT SUM(age) FROM emp WHERE work_address = '西安';

四、DQL-分组查询

1、语法

SELECT 字段列表 FROM 表名 [WHERE 条件] GROUP BY 分组字段名 [HAVING 分组后过滤条件];

2、WHERE条件与HAVING条件的区别

  • 执行时机不同:WHERE是分组之前进行过滤,不满足WHERE条件,不参与分组,而HAVING是分组之后对结果进行过滤。

  • 判断条件不同:WHERE不能对复合函数进行判断,而HAVING可以。

分组查询案例:

-- --------- DQL 分组查询 ----------
USE my_database;


-- 1.根据性别分组,分别统计男性员工和女性员工的数量
SELECT gender, COUNT(*) FROM emp GROUP BY gender;

-- 2.根据性别分组,分别统计男性员工和女性员工的平均年龄
SELECT gender, AVG(age) FROM emp GROUP BY gender;

-- 3.查询年龄小于45岁的员工,并根据工作地址分组,获取员工数量大于3的工作地址
SELECT work_address AS '工作地点',
       count(*)     AS '员工数量'
FROM emp
WHERE age < 45
GROUP BY work_address
HAVING COUNT(*) >= 3;

五、DQL-排序查询

1、语法

SELECT 字段列表 FROM 表名 ORDER BY 字段1 排序方式1,字段2, 排序方式2;

2、排序方式

  • ASC:升序(默认值)

  • DESC:降序

注意:

  • 如果是多字段排序,当第一个字段相同时,才会根据第二个字段进行排序。

排序查询练习:

-- ---------- DQL 排序查询 ----------
USE my_database;

-- 1.根据年龄对员工进行升序/降序排序
SELECT name, age FROM emp ORDER BY age ASC;
SELECT name, age FROM emp ORDER BY age DESC;

-- 2.根据入职时间对员工进行升序/降序排序
SELECT name, age, entry_date FROM emp ORDER BY entry_date ASC;
SELECT name, age, entry_date FROM emp ORDER BY entry_date DESC ;

-- 3.根据年龄对员工进行升序排序,年龄相同,再按照入职降序时间排序
select name,age,entry_date FROM emp ORDER BY age ASC , entry_date DESC ;

六、DQL-分页查询

1、语法

SELECT 字段列表 FROM 表名 LIMIT 起始索引, 查询记录数;

注意:

起始索引从0开始,起始索引=(查询页码-1)*每页显示的记录数;

分页查询是数据库的方言,不同数据库软件有不同的实现,MySQL中是LIMIT;

如果查询的是第一页数据,起始索引可以被忽略,直接可简写为LIMIT 10;(起始索引被省略)

-- ---------- 分页查询 ----------
USE my_database;

# 第1页
SELECT * FROM emp LIMIT 0, 10;

# 第2页
SELECT * FROM emp LIMIT 10, 10;

* DQL查询语句-综合练习

5个小任务:
1. 查询年龄为20/21/22/23岁的女性员工信息
2. 查询性别为男,且年龄在20-40岁(含)以内的姓名为三个字的员工
3. 统计年龄小于60岁的,男性员工和女性员工的人数
4. 查询所有年龄小于等于35岁的员工姓名和年龄,并对查询结果按照年龄升序排列,如果年龄相同,则按照入市时间降序排列
5. 查询性别为男,且年龄在20-40岁(含)以内的前3名员工信息,对结果按照年龄升序排序,年龄相同则按照入职时间升序排列

-- ---------- DQL-综合练习 ----------
USE my_database;


-- 1. 查询年龄为20/21/22/23岁的女性员工信息
SELECT * FROM emp WHERE age IN(20,21,22,23) AND gender = '女';


-- 2. 查询性别为男,且年龄在20-40岁(含)以内的姓名为三个字的员工
SELECT *
FROM emp
WHERE (gender = '男')
  AND (age BETWEEN 20 AND 40)
  AND (name LIKE '___');


-- 3. 统计年龄小于60岁的,男性员工和女性员工的人数
SELECT gender, count(*) FROM emp WHERE age < 60 GROUP BY gender;


-- 4. 查询所有年龄小于等于35岁的员工姓名和年龄,并对查询结果按照年龄升序排列,如果年龄相同,则按照入市时间降序排列
SELECT name, age, entry_date
FROM emp
WHERE age <= 35
ORDER BY age ASC, entry_date DESC;


-- 5. 查询性别为男,且年龄在20-40岁(含)以内的前3名员工信息,对结果按照年龄升序排序,年龄相同则按照入职时间升序排列
SELECT *
FROM emp
WHERE (gender = '男')
  AND (age BETWEEN 20 AND 40)
ORDER BY age ASC, entry_date DESC
LIMIT 0, 3;

* 关于DQL的编写顺序与执行顺序

编写顺序:

SELECT      字段列表
FROM        表名列表
WHERE       条件列表
GROUP BY    分组字段列表
HAVING      分组后条件列表
ORDER BY    排序字段列表
LIMIT       分页参数;

执行顺序:

FROM       表名列表
WHERE      条件列表
GROUP BY   分组字段列表
HAVING     分组后条件列表
SELECT     字段列表
ORDER BY   排序字段列表
LIMIT      分页参数;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值