美文网首页navicat
Mysql学习笔记(三)SQL基础查询

Mysql学习笔记(三)SQL基础查询

作者: 小雨Coding | 来源:发表于2021-06-20 16:23 被阅读0次

前言

如何在大量的数据中筛选出当前应用场景所需要的内容,在增删查改四个动作当中,查询操作是非常重要的。

查询操作最基本的三个关键字是select,from,where,
select 表示列筛选,查询哪些信息
from 表示从哪里查,表的名称
where 表示行筛选,主要筛选满足条件的记录。
例如我们需要在学生信息表中查出所有男生的学号和姓名,就可以写成:

select SNO,SName from Student where Gender='男',

一、原始数据准备

1. 数据库结构

我们准备一个用来练习的数据库,原始数据可私信我获取。


图片.png
2.数据如何导入mysql

我们以新建一个Author为例,介绍一下如何导入数据库。
在Navicat中新建一个数据库,编码选择utf-8,在表中通过导入向导的方式,创建每一个表。
我们的原始数据是用逗号分割的txt文件,现在我们就把它导入到mysql的数据库LibryDB的author表中。


图片.png 图片.png
图片.png
图片.png
图片.png

这样,我们就把txt文件中的原始数据导入到mysql表中了;


图片.png
这样,我们就把Author表导入完成了,接下来,再依次导入Book、BookType、BorrowBook、Press、Student表即可。
要点:
(1)一个表对应一个原始文件;

(2)数据库的编码与txt的编码要保持一致;
(3)第一行是字段名;
(4)每行一条数据,主语记录分隔符、栏位分隔符、文本限定符的设置。

二、SQL查询语句基础知识

1.常用运算符
sql运算符 常用符号
比较运算符 = 、!=、 >、 <、 >=、 <=、 <>、!>、 !<
逻辑运算符 and 、or、 not
特殊运算符 between and 、in、 like
2. 通配符:

表示任意一个字符_;
表示任意多个字符%;

三、 数据库查询操作案例

1. 原始数据:
图片.png
2. 查询案例:

(1)查询出姓名为'胡小光'的学号、手机号码、和邮箱地址;

select SNO,MobileNO,StuEMail 
from Student 
where SName='胡小光';

查询出来的结果,列标签如果希望以中文显示,可以使用As语句

select SNO as '学号',MobileNO as '手机号',StuEMail as '邮箱' 
from Student 
where SName='胡小光';

在MySQL语句中,等于号就是用=,对于行筛选除了使用=还可以使用in

select SNO as '学号',MobileNO as '手机号',StuEMail as '邮箱' 
from Student 
where SName in ("胡小光");

(2)查询出姓名不是'胡小光'的学生的所有信息;
在MySQL语句中,不等于可以写成!=<>not in(),这里查找语句可以写成:

select * 
from Student 
where SName != '胡小光';
# where SName <> '胡小光';
# where SName not in ('胡小光');

(3)查询出年龄介于20到30之间的学生学号和姓名;

select SNO as '学号',SName as '姓名'
from Student
where Sage >= 20 and Sage <= 30;

除了使用and连接两个条件以外,还可以使用between and语句,表明在两个条件之内。

select SNO as '学号',SName as '姓名'
from Student
where Sage between 20 and 30;

(4)查询出哪些学生没有填写‘年龄’信息;

select SNO,SName
from Student 
where Sage is null;

在判断某个字段是否为空时,要使用is null语句,如果使用= null可能查不出结果。

(5)查询出'胡小光','alice'、'bob',的学号、年龄;

select SNO,Sage 
from Student 
where SName = '胡小光' or SName = 'alice' or SName = 'bob';  
# where SName in ('胡小光',"alice","bob");

在使用多个条件时可以使用or连接,也可以使用in ()表示条件范围。

(6)查询出所有姓’陈‘的学生;

select * 
from Student 
where SName like '陈%';

使用like进行模糊查询,通配符%表示任意多个字符。
(7)查询出手机号码134或者135开头,倒数第四位不是8或9的学生姓名;

select SName
from Student
where MobileNO regexp '^[1][3][45][0-9]{4}[^89][0-9]{3}$';

这里的手机号码格式可以之间通过regexp引出正则表达式来进行限制。
(8)查询出借出过书的同学的学号;

select distinct SNO as '借书过的学号'
from BorrowBook;

这里我们使用关键字distinct表示筛选出的结果是去重的,不重复的。
(9)对Student表按照年龄升序排序,如果年龄一样,女生排在男生前面。

select *
from Student
order by Sage DESC,Sex ASC;

排序使用关键字order by,ASC表示升序,DESC表示降序;
(10)查询出Student表中的前5行记录。

select *
from Student
limit 5

获取表的前5行,可以使用关键字limit,如果要从第二行开始再找5行,可以使用关键字offset设置偏移量。
如果要任意取5行,可以先把每一行打乱

select *
from Student
order by rand()
limit 5

相关文章

网友评论

    本文标题:Mysql学习笔记(三)SQL基础查询

    本文链接:https://www.haomeiwen.com/subject/xoxhyltx.html