博客
关于我
MySQL学习之《查询数据》
阅读量:587 次
发布时间:2019-03-12

本文共 4635 字,大约阅读时间需要 15 分钟。

DQL 查询数据学习笔记

在数据库管理系统中,Data Query Language (DQL) 是核心的一部分,它允许用户从数据库中检索数据。作为MySQL学习的重要环节,本章将详细介绍DQL的使用方法,包括选择字段、where条件子句、联表查询、分页排序、分组过滤以及子查询等高级功能。

1. DQL 简介

DQL(Data Query Language) 是MySQL 中最核心和重要的语句,所有查询操作都依赖于它。无论是简单的还是复杂的查询,DQL 都能满足需求。它是数据库操作中使用频率最高的语句之一。

2. 指定查询字段

在进行具体的数据查询之前,通常需要创建一些表来模拟实际的数据环境。以下是创建相关表的语句:

CREATE DATABASE IF NOT EXISTS `school`;USE `school`;DROP TABLE IF EXISTS `student`;CREATE TABLE `student` (    `studentno` INT(4) NOT NULL COMMENT '学号',    `loginpwd` VARCHAR(20) DEFAULT NULL,    `studentname` VARCHAR(20) DEFAULT NULL COMMENT '学生姓名',    `sex` TINYINT(1) DEFAULT NULL COMMENT '性别,0或1',    `gradeid` INT(11) DEFAULT NULL COMMENT '年级编号',    `phone` VARCHAR(50) NOT NULL COMMENT '联系电话,允许为空',    `address` VARCHAR(255) NOT NULL COMMENT '地址,允许为空',    `borndate` DATETIME DEFAULT NULL COMMENT '出生时间',    `email` VARCHAR(50) NOT NULL COMMENT '邮箱账号允许为空',    `identitycard` VARCHAR(18) DEFAULT NULL COMMENT '身份证号',    PRIMARY KEY (`studentno`),    UNIQUE KEY `identitycard` (`identitycard`),    KEY `email` (`email`),    ENGINE=MYISAM DEFAULT CHARSET=utf8;

同样,我们需要创建年级表、科目表和成绩表:

CREATE TABLE `grade` (    `gradeid` INT(11) NOT NULL AUTO_INCREMENT COMMENT '年级编号',    `gradename` VARCHAR(50) NOT NULL COMMENT '年级名称',    PRIMARY KEY (`gradeid`),    ENGINE=INNODB AUTO_INCREMENT = 6 DEFAULT CHARSET = utf8;
CREATE TABLE `subject` (    `subjectno` INT(11) NOT NULL AUTO_INCREMENT COMMENT '课程编号',    `subjectname` VARCHAR(50) DEFAULT NULL COMMENT '课程名称',    `classhour` INT(4) DEFAULT NULL COMMENT '学时',    `gradeid` INT(4) DEFAULT NULL COMMENT '年级编号',    PRIMARY KEY (`subjectno`),    ENGINE=INNODB AUTO_INCREMENT = 19 DEFAULT CHARSET = utf8;
CREATE TABLE `result` (    `studentno` INT(4) NOT NULL COMMENT '学号',    `subjectno` INT(4) NOT NULL COMMENT '课程编号',    `examdate` DATETIME NOT NULL COMMENT '考试日期',    `studentresult` INT(4) NOT NULL COMMENT '考试成绩',    KEY `subjectno` (`subjectno`),    ENGINE=INNODB DEFAULT CHARSET = utf8;

3. where 条件子句

where 子句是用来筛选数据的重要工具。它通过指定条件,返回符合条件的记录。通常,条件是用逻辑运算符组合而成的。

3.1 逻辑运算符

运算符 语法 描述
and a and b 逻辑与,有两个条件都为真时结果为真
or a or b 逻辑或,有一个条件为真时结果为真
not not a 逻辑非,条件为假时结果为真

3.2 条件示例

查询成绩大于等于90的数据:

select `studentno`,`studentresult` from result where studentresult >= 90;

查询成绩在90和100之间的数据:

select `studentno`,`studentresult` from result where studentresult between 90 and 100;

查询科目成绩不为60的数据:

select `studentno`,`studentresult` from result where studentresult != 60;

查询地址为空的学生:

select `studentno`,`studentname` from student where address = '' or address is null;

4. 联表查询

联表查询 是DQL 中的高级功能,用于将两张或多张表中的数据结合起来检索。常见的join类型包括 INNER JOINLEFT JOINRIGHT JOIN

4.1 join 类型对比

join 类型 描述
INNER JOIN 只返回两张表中至少有一个匹配的行
LEFT JOIN 以左表为基准,返回所有左表记录
RIGHT JOIN 以右表为基准,返回所有右表记录

查询参加了考试的同学:

select s.studentno, studentname, subjectno, studentresult from student as sinner join result as r on s.studentno = r.studentno;

查询科目所属的年级:

select subjectname, gradename from subject as sub inner join grade as g on sub.gradeid = g.gradeid;

查询父子栏目关系:

select categoryName as '父栏目', categoryName as '子栏目' from category as a, category as b where a.categoryid = b.pid;

5. 分页和排序

分页排序 是DQL 的高级功能,通常用于处理大量数据查询。

5.1 排序

排序 通过 ORDER BY 子句实现,可以按特定字段排序。支持升序 (ASC) 和降序 (DESC) 两个模式。

查询成绩降序排列的同学:

select studentno, studentname, subjectname, studentresult from student as sinner join result as r on s.studentno = r.studentno where subjectname = '数据库结构-1' order by studentresult desc;

5.2 分页

分页 用于限制返回的记录数量,使用 LIMIT 关键字。通用语法为 LIMIT [offset,] count

查询前5条记录:

select * from table limit 5;

分页示例:

select s.studentno, studentname, subjectname, studentresult from student as sinner join result as r on s.studentno = r.studentno where subjectname = '数据库结构-1' order by studentresult desc limit 0,5;

6. 分组和过滤

分组 用于聚合数据,GROUP BY 子句用于指定分组条件;having 子句用于对分组后的数据进行过滤。

查询不同课程的平均分、最高分和最低分:

select subjectname, avg(studentresult) as 平均分, max(studentresult) as 最高分, min(studentresult) as 最低分 from result as r inner join subject as sub on r.subjectno = sub.subjectno group by r.subjectno having avg(studentresult) > 80;

7. 子查询和嵌套查询

子查询 是在 WHERE 子句中嵌套查询语句,常用于复杂的数据获取场景。

查询数据库结构-1的考试成绩:

select studentno, subjectno, studentresult from result where subjectno = (select subjectno from subject where subjectname = '数据库结构-1');

查询高分成绩的学生信息:

select studentno, studentname from student where studentno in (select studentno from result where studentresult > 80 and subjectno = (select subjectno from subject where subjectname = '高等数学-1'));

8. DQL 小结

DQL 的完整语法如下:

select [all | distinct] {字段名[as 别名]} from 表名 [as 表别名] [join ...] [where ...] [group by ...] [having ...] [order by ...] [limit ...];

本章通过详细讲解选择字段、条件过滤、联表查询等内容,帮助大家掌握DQL 的核心技能。MySQL 的学习还在继续,欢迎在评论区交流!

转载地址:http://rcgtz.baihongyu.com/

你可能感兴趣的文章
一文理解设计模式--命令模式(Command)
查看>>
VTK:可视化之RandomProbe
查看>>
block多队列分析 - 2. block多队列的初始化
查看>>
Java时间
查看>>
不编译只打包system或者vendor image命令
查看>>
The wxWindows Library Licence (WXwindows)
查看>>
leetcode——第203题——虚拟头结点
查看>>
【编程】C语言入门:1到 100 的所有整数中出现多少个数字9
查看>>
MySQL----基础及常用命令
查看>>
flink启动(二)
查看>>
前端开发进阶手册.pdf
查看>>
软件架构设计和MESH经验之谈
查看>>
关于宝塔面板安装的mysql用Navicat连接出现2003的错误解决
查看>>
Windows2016 FTP用户隔离
查看>>
js传入参数是中文的时候出现 “******”未定义错误
查看>>
吴恩达机器学习课程笔记(英文授课) Lv.1 新手村(回归)
查看>>
pair的用法
查看>>
SQL基本操作命令
查看>>
C# WinForm程序退出的方法
查看>>
onFailure unexpected end of stream
查看>>