DQL 概述+查询指定字段+WHERE 条件子句
MySQL 数据库学习笔记
一、数据库与表创建(school 数据库)
1. 创建数据库
create database if not exists `school`;
-- 创建一个school数据库
use `school`;-- 创建学生表
2. 创建学生表
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;
3. 创建年级表
-- 创建年级表
drop table if exists `grade`;
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;
4. 创建科目表
-- 创建科目表
drop table if exists `subject`;
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;
5. 创建成绩表
-- 创建成绩表
drop table if exists `result`;
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;
二、数据插入操作
1. 插入学生数据
-- 插入学生数据 其余自行添加 这里只添加了2行
insert into `student` (`studentno`,`loginpwd`,`studentname`,`sex`,`gradeid`,`phone`,`address`,`borndate`,`email`,`identitycard`)
values
(1000,'123456','张伟',0,2,'13800001234','北京朝阳','1980-1-1','text123@qq.com','123456198001011234'),
(1001,'123456','赵强',1,3,'13800002222','广东深圳','1990-1-1','text111@qq.com','123456199001011233');
2. 插入成绩数据
-- 插入成绩数据 这里仅插入了一组,其余自行添加
insert into `result`(`studentno`,`subjectno`,`examdate`,`studentresult`)
values
(1000,1,'2013-11-11 16:00:00',85),
(1000,2,'2013-11-12 16:00:00',70),
(1000,3,'2013-11-11 09:00:00',68),
(1000,4,'2013-11-13 16:00:00',98),
(1000,5,'2013-11-14 16:00:00',58);
3. 插入年级数据
-- 插入年级数据
insert into `grade` (`gradeid`,`gradename`) values(1,'大一'),(2,'大二'),(3,'大三'),(4,'大四'),(5,'预科班');
4. 插入科目数据
-- 插入科目数据
insert into `subject`(`subjectno`,`subjectname`,`classhour`,`gradeid`)values
(1,'高等数学-1',110,1),
(2,'高等数学-2',110,2),
(3,'高等数学-3',100,3),
(4,'高等数学-4',130,4),
(5,'C语言-1',110,1),
(6,'C语言-2',110,2),
(7,'C语言-3',100,3),
(8,'C语言-4',130,4),
(9,'Java程序设计-1',110,1),
(10,'Java程序设计-2',110,2),
(11,'Java程序设计-3',100,3),
(12,'Java程序设计-4',130,4),
(13,'数据库结构-1',110,1),
(14,'数据库结构-2',110,2),
(15,'数据库结构-3',100,3),
(16,'数据库结构-4',130,4),
(17,'C#基础',130,1);
三、DQL 数据查询语言
4.1 DQL 概述
Data Query Language :数据查询语言
- 所有查询操作都用它 Select
- 简单+复杂查询都能做
- 数据库中最核心的语言,最重要的语句
- 使用频率最高的语句
4.2 查询指定字段
语法:SELECT 字段,...... FROM 表
有的时候不够见名知意 可以使用 AS 取别名(字段,表)
-- 查询全部的字段 SELECT 字段 FROM 表
SELECT * FROM student
SELECT * FROM result
-- 查询指定的字段
SELECT `studentno`,`studentname` FROM student
-- 别名,给结果起一个名字 AS 可以给字段起别名,也可以给表起别名 (空格取别名)
SELECT `studentno` AS 学号,`studentname` AS 学生姓名 FROM student AS s
-- 函数 CONCAT(a,b)
SELECT CONCAT('姓名: ',studentname) AS 新名字 FROM student
-- 去重 DISTINCT
-- 作用:去除SELECT查询出来的结果中重复的数据,重复数据只显示一条
SELECT * FROM result -- 查询全部的考试成绩
SELECT `studentno` FROM result -- 查询有那些同学参加了考试
SELECT DISTINCT `studentno` FROM result -- 发现重复数据,去重
-- 特殊查询
SELECT VERSION() -- 查询系统版本 (函数)
SELECT 1000*3-533 AS 计算结果 -- 用来计算 (计算表达式)
SELECT @@auto_increment_increment -- 查询自增的步长 (变量)
-- 学员考试成绩 + 1分查询
SELECT `studentno`, `studentresult` FROM result
SELECT `studentno`, `studentresult`+ 1 AS '提分后' FROM result
总结:SELECT 表达式 FROM 表
数据库中的表达式: 文本值,列,NULL,函数,计算表达式,系统变量......
4.3 WHERE 条件子句
作用:检索数据中符合条件的值
搜索的条件由一个或者多个表达式组成! 结果为 布尔值
逻辑运算符(尽量使用英文字母)
| 运算符 | 语法 | 描述 |
|---|---|---|
| AND && | a AND b a && b | 逻辑与 两真则真 |
| OR | ||
| NOT ! | NOT a ! a | 逻辑非 真为假,假为真 |
-- =================== WHERE ==================== --
SELECT studentno,studentresult FROM result
-- 查询考试成绩在 95~100 之间 AND &&
SELECT studentno,studentresult FROM result WHERE studentresult>=95 AND studentresult<=100
SELECT studentno,studentresult FROM result WHERE studentresult>=95 && studentresult<=100
-- 模糊查询(区间)BETWEEN AND
SELECT studentno,studentresult FROM result WHERE studentresult BETWEEN 95 AND 100
-- 除了1000号学生之外的同学的成绩 NOT !
SELECT studentno,studentresult FROM result WHERE studentno != 1000
SELECT studentno,studentresult FROM result WHERE NOT studentno = 1000
比较运算符(模糊查询)
| 运算符 | 语法 | 描述 |
|---|---|---|
| IS NULL | a IS NULL | 为null,结果为真 |
| IS NOT NULL | a IS NOT NULL | 不为null,结果为真 |
| BETWEEN | a BETWEEN b AND c | 若a在b和c之间,结果为真 |
| LIKE | a LIKE b | SQL匹配,如果a匹配b,则结果为真 |
| IN | a IN (a1,a2,a3,...) | 如果a在a1,a2...其中的某一个值中,结果为真 |
-- =================== LIKE ==================== --
-- 查询姓刘的同学
-- like结合 %(代表0到任意个字符) _(一个字符)
SELECT `studentno`,`studentname` FROM student WHERE `studentname` LIKE '刘%'
-- 查询姓刘的同学,名字后面只有一个字的
SELECT `studentno`,`studentname` FROM student WHERE `studentname` LIKE '刘_'
-- 查询姓刘的同学,名字后面只有两个字的
SELECT `studentno`,`studentname` FROM student WHERE `studentname` LIKE '刘__'
-- 查询名字中间有'嘉'的同学,名字后面只有两个字的
SELECT `studentno`,`studentname` FROM student WHERE `studentname` LIKE '%嘉%'
-- =================== IN(具体的一个值或多个值) ==================== --
-- 查询1001,1002,1003号学员
SELECT `studentno`,`studentname` FROM student WHERE studentno IN(1001,1002,1003)
-- 查询在北京学员
SELECT `studentno`,`studentname` FROM student WHERE `address` IN ('北京','安徽')
-- =================== NULL NOT NULL ==================== --
-- 查询地址为空的学生 null ''
SELECT `studentno`,`studentname` FROM student WHERE address = '' OR address IS NULL
-- 查询有出生日期的同学 不为空
SELECT `studentno`,`studentname`,`borndate` FROM student WHERE borndate IS NOT NULL
-- 查询没有出生日期的同学 为空
SELECT `studentno`,`studentname`,`borndate` FROM student WHERE borndate IS NULL
总结
- 完整创建了
school数据库及学生、年级、科目、成绩4张核心表,定义了字段约束、主键、索引和存储引擎 - 完成了基础测试数据的插入,为查询操作提供数据支撑
- 掌握 DQL 核心语法:指定字段查询、别名、去重、表达式计算
- 熟练使用 WHERE 条件子句:逻辑运算符、比较运算符、LIKE/IN/NULL 模糊查询

浙公网安备 33010602011771号