美文网首页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