Py学习  »  DATABASE

MySQL学习:DQL语言实现查询(持续完成笔记中)

会跳舞的河姆渡 • 3 年前 • 49 次点击  

1.DQL(Data Query Language):

  • 几个数据库语言中的最核心的语言
  • 数据库中所有简单的查询、复杂的查询都是用DQL。
  • 使用频率极高。

2.实现过程:

2.1简单select查询及定义别名的语法:

查询表的全部内容:

  • SELECT * FROM 表名 ;

查询表中指定字段内容(未设置别称):

  • SELECT 字段1名称 , ... , 字段n名称 FROM 表名 ;

查询表中指定字段内容(设置别称):

  • 有时候我们字段名称起的不是那么容易看懂,那么我们查询出来可能会造成阅读困难,所以此时我们可以使用 AS 关键字来给字段名起一个别称,方便阅读结果。
  • SELECT 字段1名称 AS 别称 , ... , 字段n名称 AS 别称 FROM 表名 AS 别称 ;

运用concat(a,b)数据库字符串拼接函数来融合查询指定字段(设置别称)。

  • SELECT CONCAT(‘拼接内容’, 字段1名称 ) AS 别称 , ... , CONCAT(‘拼接内容’, 字段n名称 ) AS 别称 FROM 表名 AS 别称 ;
CREATE DATABASE IF NOT EXISTS `school`;
USE `school`;

-- 年级表创建以及数据插入
DROP TABLE IF EXISTS `grade`;
CREATE TABLE `grade`(
`grade_id` INT(11) NOT NULL AUTO_INCREMENT COMMENT '年级编号',
`grade_name` VARCHAR(20) NOT NULL COMMENT '年级名称',

PRIMARY KEY (`grade_id`)
)ENGINE=INNODB DEFAULT CHARSET=utf8;

INSERT INTO `grade` (`grade_id`,`grade_name`) 
VALUES (1,'大一'),(2,'大二'),(3,'大三'),(4,'大四'),(5,'研究生');

-- 学生表创建以及数据插入
DROP TABLE IF EXISTS `student`;
CREATE TABLE `student`(
`student_no` INT(4) NOT NULL COMMENT '学生学号',
`login_pwd` VARCHAR(20) DEFAULT NULL COMMENT '登陆密码',
`student_name` VARCHAR(20) DEFAULT NULL COMMENT '学生姓名',
`sex` TINYINT(1) DEFAULT NULL COMMENT '性别,0或1',
`grade_id` INT(11) DEFAULT NULL COMMENT '年级编号'


    
,
`tel` VARCHAR(50) DEFAULT NULL COMMENT '联系电话',
`address` VARCHAR(255) DEFAULT NULL COMMENT '地址',
`birthday` DATETIME DEFAULT NULL COMMENT '生日',
`email` VARCHAR(50) DEFAULT NULL COMMENT '邮箱账号',
`ID_number` VARCHAR(18) DEFAULT NULL COMMENT '身份证号码',

PRIMARY KEY (`student_no`),
UNIQUE KEY `ID_number`(`ID_number`),
KEY `email`(`email`)
)ENGINE=MYISAM DEFAULT CHARSET=utf8;

INSERT INTO `student` (`student_no`,`login_pwd`,`student_name`,`sex`,
`grade_id`,`tel`,`address`,`birthday`,`email`,`ID_number`)
VALUES(1000,'123456','张三',0,2,'18888888888','火星','1900-1-1','text1@qq.com','123456789012345678'),
(1001,'123456','李四',1,3,'19999999999','水星','1901-1-1','text2@qq.com','098765432109876543');

-- 科目表创建以及数据插入
DROP TABLE IF EXISTS `subject`;
CREATE TABLE `subject`(
`subject_no` INT(11) NOT NULL AUTO_INCREMENT COMMENT '课程编号',
`subject_name` VARCHAR(50) DEFAULT NULL COMMENT '课程名称',
`period` INT(4) DEFAULT NULL COMMENT '学时',
`grade_id` INT(4) DEFAULT NULL COMMENT '年级编号',

PRIMARY KEY (`subject_no`)
)ENGINE=INNODB AUTO_INCREMENT=19 DEFAULT CHARSET=utf8;

INSERT INTO `


    
subject`(`subject_no`,`subject_name`,`period`,`grade_id`)
VALUES(1,'高等数学',64,1),
(2,'C语言基础',64,1),
(3,'C++程序设计',64,1),
(4,'Java程序设计',64,1),
(5,'数据结构',64,1);

-- 成绩表创建以及数据插入
DROP TABLE IF EXISTS `result`;
CREATE TABLE `result`(
`student_no` INT(4) NOT NULL COMMENT '学生学号',
`subject_no` INT(11) NOT NULL COMMENT '课程编号',
`exam_date` DATETIME NOT NULL COMMENT '考试时间',
`student_result` INT(4) NOT NULL COMMENT '考试成绩',

KEY `subject_no`(`subject_no`)
)ENGINE=INNODB DEFAULT CHARSET=utf8;

INSERT INTO `result`(`student_no`,`subject_no`,`exam_date`,`student_result`)
VALUES(1000,1,'2021-01-01 00:00:00',85),
(1000,2,'2021-01-01 00:00:00',86),
(1000,3,'2021-01-01 00:00:00',87),
(1000,4,'2021-01-01 00:00:00',88),
(1000,5,'2021-01-01 00:00:00',89);

-- 简单查询过程:
-- 查寻表全部内容。
SELECT * FROM `student`;

-- 查询指定字段(没有设置别称)。
SELECT `student_no`,`student_name` FROM `student`;

-- 查询指定字段(设置别称)。
SELECT `student_no` AS 学号,`student_name` AS 学生姓名 FROM `student`;

-- 运用concat(a,b)数据库字符串拼接函数来融合查询指定字段(设置别称)。
SELECT CONCAT('学号:',`student_no`


    
) AS `学号`,CONCAT('姓名:',`student_name`) AS 学生姓名 FROM `student`;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
2.2 去重以及据库的表达式语法:

去重(distinct)

  • 作用:去除SELECT查询结果中重复的数据,保留重复数据中的一条。

  • 语法:SELECT DISTINCT 字段名1 , 字段n FROM 表名 ;

/*
	紧接着上面实验简单查询所需创建的表以及数据继续往下些SQL
*/

-- 统计此次参加考试了的人的学号。
SELECT `student_no` AS 学号 FROM `result


    
`;
/* 
	执行下面这条查询语句会发现将1000学号的学生的考试结果都
	查出来了,信息重复了,于是我们执行去重。
*/
SELECT DISTINCT `student_no` AS 学号 FROM `result`;
/*
	执行去重过后的查询语句发现只显示一条1000,说明去重成功了。
*/

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
2.3 继续深入:

我们在之前简单查询和去重之后我们可以知道:

  • 在 SELECT ... FROM 表名 ; 之间的 ... 中的内容可以拓展。
  • 于是SELECT语句的使用方法也就逐渐加深。
/*
	紧接着上面实验简单查询所需创建的表以及数据继续往下些SQL
*/

-- 查询语句用来计算(表达式):
SELECT 1*2*3*4*5 AS 计算5的阶乘结果;

-- 查询语句用来查询自增步长(变量):
SELECT @@AUTO_INCREMENT_INCREMENT AS 自增步长;

-- 查询语句用来查询当前MySQL版本(函数):
SELECT VERSION() AS 当前MySQL版本;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

综上可知:

  • 算数表达式、系统变量、函数、NULL、列等等都是属于数据库中的表达式。

  • 所以在 SELECT ... FROM 表名 ; 之间的 ... 中的内容可以拓展的内容非常多。

  • ... 中就可以是数据库的表达式。

所以SELECT ... FROM 表名 可以概括为:

  • SELECT 数据库中的表达式 [FROM 表名 ];([]中内容可以省略)。
2.4 where 条件语句:
  • 通常情况下大家要做条件查询都是SELECT … WHERE …

  • 那么我们来学习一下WHERE条件语句。

where条件语句之逻辑运算符:

运算符 描述 示例
AND(&&) 逻辑与 条件1 AND(&&) 条件2
OR(||) 逻辑或 条件1 OR(||) 条件2
NOT(!) 逻辑非 NOT 条件
/*
	紧接着上面实验简单查询所需创建的表以及数据继续往下些SQL
*/

-- 查询课程号码在2~4号的课程名称。
SELECT `subject_no` AS 课程编号,`subject_name` AS 课程名称 FROM `subject`
WHERE `subject_no`>=2 AND `subject_no`<=4;

-- 查询课程号码在2~4号的课程名称(模糊查询)。
SELECT `subject_no` AS 课程编号,`subject_name` AS 课程名称 FROM `subject`
WHERE `subject_no` BETWEEN 2 AND 4;

-- 查询除了课程编号为1的课程外的其他课程。
SELECT `


    
subject_no` AS 课程编号,`subject_name` AS 课程名称 FROM `subject`
WHERE NOT `subject_no`=1;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

2021.1.15
本文章是本人学习笔记,不进行任何商用所以不支持转载请理解,也请别拿去商用
如果觉得对你有帮助那么欢迎你随时来回顾!
只为记录本人学习历程。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/106179
 
49 次点击