社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  DATABASE

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

会跳舞的河姆渡 • 4 年前 • 60 次点击  

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
 
60 次点击