MySQL数据库学习资料(六)

这篇博客主要介绍了MySQL的SQL基础语句,包括符号使用、SELECT语句的各种操作,如运算符、IN、LIKE、转义字符、空值查询等。此外,还讨论了MySQL安装过程中的常见问题,如环境变量配置、外键设定和命令行连接数据库等。

SQL基础语句学习

目录

SQL基础语句学习

SQL语句规范中符号的使用

符号的使用

 SELECT语句讲解

1. 运算符< ,>, = 

2. IN ,NOT IN

3. 字符串匹配关键字LIKE

4. 转义字符

5. 空值查询

6 多重给查询条件

消除相同的行

对查询结果排序

 使用聚合函数进行统计

对数据进行分组

MySQL安装问题

问题1:安装MySQL完成后,mysql server和workbench都没有安装。

MySQL创建表之间的外键无法设定

配置MySQL环境变量

通过命令连接MySQL数据库

 分号;的使用

查询语句中关键字的大小写


SQL语句规范中符号的使用

符号的使用

 这边插一下关于MySQL的安装的问题:

mysql的安装问题:

有一步execute需要按一下。

删除mysql的话,直接双击安装包,选择里面的remove卸载。

回顾一下之前我们学习到的关键词有:

SELECT  列名|表达式  AS 列别名

FROM  表名

WHERE  条件  BETWEEN  AND

在开始学习之前我们先准备好三张表,表结构如下:

student表

course表

sc表 

sc表

 

 需要大家插入的数据如下:

student表的数据:

 

course表的数据:

sc表的数据:

 SELECT语句讲解

绕来绕去又绕回来SELECT了,让我们开始今天主要的课程内容8,注意我们的数据默认是使用上面创建好的数据库的表和数据内容(没有完成的同学可以先创建完上面的表和数据):

3.1 WHERE 关键字补充:

1. 运算符< ,>, = 

WHERE这个关键字在python中有点像if的意思,都是用来做筛选的,第一个补充的用法是比较符号:> < = ,这些比较符号可以与WHERE一起使用,来构成条件语句。

如:查询出学分不再2-3之间的课程的课程名称,学分和开课:

SELECT cname, credit, semester FROM course

WHERE credit < 2 OR credit >3;

(Q1:尝试用关键字 BETWEEN AND 完成上面的语句

2. IN ,NOT IN

WHERE 还可以与 IN|NOT IN使用,IN可以用于查找属性值在指定集合范围内的元组,NOT IN的含义正好与IN相反。

如:查询计算机系和机电系学生的学号、姓名和所在系:

SELECT sno, sname, sdept

FROM student 

WHERE sdept IN ('计算机系', '机电系');

(Q2:尝试用NOT IN关键字查询不在“计算机系”和“机电系”的学生的学号,姓名和所在系

3. 字符串匹配关键字LIKE

字符串匹配LIKE,LIKE运算符用于查找指定列中与匹配字符串常量匹配的元组,使用NOT LIKE表示查找没有包含该字符串的属性所在的元组,匹配串中可以包含如下4种通配符:

_ (下划线):匹配任意一个字符(注意和%的取别)

% (百分号):匹配0到多个字符

[] (方括号):匹配方括号中的任意字符, 如[a,b,c,d]表示匹配a,b,c,d中的任意一个

[^ ] :不匹配方括号中的任意字符

如:查询姓李的学生的学号,姓名和所在系:

SELECT sno, sname, sdept

FROM student

WHERE sname LIKE '李%';

查询姓名中第二个字是”冲“的学生的学号,姓名,所在系:

SELECT sno, sname, sdept

FROM student

WHERE sname LIKE '_冲%';

 

(Q3:尝试用 NOT LIKE 关键字查询学号的最后一位不是’2‘或者’3‘的学生的学号、姓名和所在系,

提示:可以使用方括号[]包含多个选项,或者使用and连接条件语句)

4. 转义字符

如果要查找的字符串正好含有通配符,比如下划线或者百分号,就i使用一个特殊子句来告诉数据库管理系统,这个下划线是一个普通字符,这个特殊的子句是ESCAPE

5. 空值查询

空值NULL在数据库中又特殊的含义,类比Python中的None,都是一个比较独特的个体,NULL表示当前不确定或为止的值, 如学生选课后还未考试,那他只有选课记录,没有成绩,因此考试的成绩就为空值。

如:查询还没有考试的学生的学号,相应的课程号和成绩:

SELECT sno, cno

FROM sc

WHERE grade IS NULL;

Q4:查询有备注的学生的学号、姓名、和备注,注意使用IS NOT NULL)

6 多重给查询条件

当需要多个查询条件时,可以在WHERE子句中使用逻辑运算符AND 和OR来组成多条件查询语句。

如查询机电系有备注的学生的学号,姓名,所在系和备注:

SELECT sno, sname, sdept, memo

FROM student 

WHERE memo IS NOT NULL AND sdept ='机电系';

消除相同的行

本来在数据库的关系表中不存在取值全部相同的元组,但是在进行了字段的筛选后,就有可能在查询结果中出现取值完全相同的行,取值相同的行在结果中是没有意义的,因此可以删除这些行。如:查询有考试挂科的学生的学号

SELECT DISTINCT sno

FROM  sc

WHERE Grade < 60;

Q5:尝试一下不加DISTINCT的查询会是什么结果)

对查询结果排序

有时我们希望查询的结果能按一定的顺序显示出来,比如考试成绩由高到低排列,关键字ORDER BY能够帮助我们完成这个任务。排序句子的语法为:

1. 升序排列 关键字ASC

如:将"C01"号课程的成绩按照升序排列:

SELECT cno, grade

FROM sc

WHERE cno='C01'

ORDER BY GRADEl;

2. 降序排列关键字 DESC

如将060101号学生的成绩按照降序排列

SELECT cno, grade 

FROM student

WHERE sno = '060101'

ORDER BY grade DESC;

 使用聚合函数进行统计

聚合函数也成为统计函数,其作用是对一组值进行计算并返回一个统计结果,SQL提供的统计结果包括:

1) COUNT(*) :统计表中元组的个数

2) COUNT([DISTINCT] 列名) 统计本列的列值个数,DISTINCT选项表示去掉列的重复值后再计算

3) SUM(列名):计算列值的和值(必须是数值类型)

4) AVG(列名):计算列值的平均值(必须是数值类型)

5) MAX(列名):得到列值的最大值

6) MIN(列名):得到列值的最小值

上述函数出去COUNT(*)之外,其他函数再计算过程中均忽略NULL值。

注意:聚合函数是跟在SELECT后面的

如:统计学生的总人数:

SELECT COUNT(*) as '学生总人数'

FROM student;

如:统计学号为060101学生的总成绩:

SELECT  sum(grade)  as 总成绩

FROM sc

WHERE sno='060101';

(Q6:尝试统计学生学号为060101的平均成绩,注意NULL值有有没有参与计算

(Q7:统计课程'C01'的最高分数和最低分数,使用MAX和MIN函数

对数据进行分组

在实际应用中,我们要对数据进行更加详细的统计,比如统计每个学生的平均成绩,每个系的学生人数等,这时候就需要先对数据进行分组,比如每隔一个系的学生分为一组,然后再对每一组进行统。GROUP BY提供了对数据进行分组的功能,使用GROUP BY子句可将统计控制在组这一级。分组的目的是细化聚合函数的作用对象。使用分组的语句形式为:

GROUP BY 需要分组的列

[HAVING 提取条件]

如:统计每门课程的选课,列出课程号和选课人数:

SELECT cno AS 课程号, COUNT(sno) AS 选课人数

FROM sc

GROUP BY cno;

(Q8 统计每个学生的选课门数,列出学号、选课门数和平均成绩,注意该语句首先应该对sc表的数据按照sno的值进行分组,所具有的相同sno值的元组归为一组,然后再对每一组使用COUNT和AVG聚合函数进行计算)

 以上黄色字体是给初学者的练习,需要答案的同学可以私信一下作者!!!

下面插入MySQL安装的一些问题:

MySQL安装问题

问题1:安装MySQL完成后,mysql server和workbench都没有安装。

解决办法:使用MySQL Installer先卸载所有安装的应用(不要直接去删除文件夹,会无法删除关键的注册表

然后重新安装MySQL,在该步骤先点execute安装mysql运行必备的环境,再点击next。

MySQL创建表之间的外键无法设定

问题1:表结构的外键无法设定

首先声名一下这可能是MySQL Workbench的Bug(没办法,谁让人家免费还开源,如果使用Navivat一年需要好几万的购买费,因此Workbench有点bug也是阔以接受的)

推荐大家使用代码创建数据库的表和外键,步骤如下:

步骤一:创建数据库,选择字符集utf8

步骤二:使用命令创建数据库的表,表的结构,外键。注意先创建student表和course表,再创建sc表,因为sc表中的字段依赖student和course表。

步骤三:插入数据

CREATE TABLE `student` (

  `sno` char(6) NOT NULL,

  `sname` varchar(45) NOT NULL,

  `ssex` char(1) NOT NULL,

  `sbirthday` date DEFAULT NULL,

  `sdept` varchar(45) DEFAULT NULL,

  `memo` text,

  PRIMARY KEY (`sno`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

 CREATE TABLE `sc` (

  `sno` char(6) NOT NULL,

  `cno` char(3) NOT NULL,

  `grade` smallint DEFAULT NULL,

  PRIMARY KEY (`sno`,`cno`),

  KEY `FK_cno_idx` (`cno`),

  CONSTRAINT `FK_cno` FOREIGN KEY (`cno`) REFERENCES `course` (`cno`),

  CONSTRAINT `FK_sno` FOREIGN KEY (`sno`) REFERENCES `student` (`sno`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE `course` (

  `cno` char(3) NOT NULL,

  `cname` varchar(20) NOT NULL,

  `precno` char(3) DEFAULT NULL,

  `credit` tinyint DEFAULT NULL,

  `semester` tinyint DEFAULT NULL,

  PRIMARY KEY (`cno`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

配置MySQL环境变量

环境变量,这个常谈的问题,我们发现在安装MySQL时,MySQL不会为我们配置环境变量,我们需要手动配置环境变量。

配置教程:

https://jingyan.baidu.com/article/3c48dd34782b68e10be35882.html

windows下将mysql加入环境变量_潴潴_新浪博客

注意教程中的MySQL目录要替换成安装MySQL所在目录,一般默认为:

”C:\Program Files\MySQL\MySQL Server 8.0\bin“

(其实不添加环境变量也能使用,但是麻烦很多,不推荐)

通过命令连接MySQL数据库

step1: 连接MySQL服务器

打开命令行(使用cmd即可,win10系统使用power shell效果更好)

在命令行输入如下命令,连接MySQL服务器:

mysql -u root -p

-u用来指定用户名,root是我们之前安装MySQL时设定的用户名,-p表示需要通过密码登陆,按下回车会出现如下结果,输入密码后,即可登陆,密码也是同学们一开始设定的密码。

 

连接成功后,我们先观察一下终端跳出的信息,Server version的意思是说现在连接的服务器是MySQL 社区版,版本号是8.0.19。最下面一行mysql>表示现在已经连接到MySQL,从现在开始输入的命令是MySQL自身的语句,我们可以在此处输入一系列的查询语句来和服务器“对话”。

 MySQL登陆忘记密码了怎么办?

大家可以按照如下的方法重置密码。
http://baijiahao.baidu.com/s?id=1602482045240479273&wfr=spider&for=pc

step2 :使用命令获取MySQL数据库管理系统简单的信息

查看目前已经存在的数据库(每个人的结果可能不太相同,取决于同学们服务器上的数据库):

SHOW DATABASES;

注意:之后的内容,每个知识点讲述的结构基本是问题+代码+结果的形式,大家尽可能地边看边动手实践,熟能生巧。

问题补充(使用cmd命令行工具,可能会出现的问题):

此处补充一个使用cmd命令提示符界面可能会出现的问题:输入命令+分号后,不返回结果,终端还是在等待用户输入,如下如所示:

出现这个问题的原因是:mysql的默认结束提示符被更改了,需要使用如下命令将结束提示符改回分号:

delimiter ;

更多的延申阅读请查看:

命令行中数据库sql语句无法以分号结束_Prodigal-优快云博客

 分号;的使用

正常情况下,一条查询语句都需要分号;作为结尾,如之前的语句:

mysql> SELECT VERSION(), CURRENT_DATE;

上述语句是用来告诉我们MySQL的版本和当前的日期,结果后面还会跟上一个mysql>提示符。

注意:

1. 分号;的使用,一定是半角的,全角的分号;输入进去MySQL是读不懂的。

2. 有几个不需要加分号的语句:如USE关键字

查询语句中关键字的大小写

MySQL中的关键字不区分大小写,比如show和SHOW是一样的。

SELECT VERSION(), CURRENT_DATE;

select version(), current_date;

SeLeCt vErSiOn(), current_DATE;

但出于书写规范,强力推荐大家使用第一种写法。这个其实类似与html中的自闭和标签有点类似,<input \>标签最后加不加\,其实可以不加,但是还是推荐大家加上,因为在读代码的时候,可能会搞混,把没有加\的认为是某个标签没有结尾。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小楷科技

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值