干巴爹兔的博客 干巴爹兔的博客
首页
  • 前端文章

    • JavaScript
    • HTML
    • Vue
  • 学习笔记

    • JavaScript教程
    • React学习笔记
    • Electron学习笔记
  • 开源项目

    • cloud-app-admin
    • 下班了吗Vscode插件
    • Subversion变更单插件
  • Server

    • Django
  • 学习笔记

    • MySQL学习笔记
  • 运维

    • 服务器部署
    • Linux
  • 日常学习

    • 学习方法
关于
收藏
友链
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

干巴爹兔

卑微的前端打工人
首页
  • 前端文章

    • JavaScript
    • HTML
    • Vue
  • 学习笔记

    • JavaScript教程
    • React学习笔记
    • Electron学习笔记
  • 开源项目

    • cloud-app-admin
    • 下班了吗Vscode插件
    • Subversion变更单插件
  • Server

    • Django
  • 学习笔记

    • MySQL学习笔记
  • 运维

    • 服务器部署
    • Linux
  • 日常学习

    • 学习方法
关于
收藏
友链
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • MySQL基础

    • MySQL学习笔记1:数据库连接与字段认识
    • MySQL学习笔记2:数据库表的增删改与外键认识
    • MySQL学习笔记3:MySQL的增删改与基本查询语句
    • MySQL学习笔记4:MySQL的WHERE与JOIN语句
      • MySQL学习笔记5:分页、排序、子查询与常用函数
      • MySQL学习笔记6:聚合函数与事务初识
      • MySQL学习笔记7:MySQL索引配合大量数据的使用
      • MySQL学习笔记8:权限管理、数据库备份与设计
      • MySQL学习笔记9:JDBC
    • 《MySQL学习笔记》
    • MySQL基础
    干巴爹兔
    2020-05-28
    目录

    MySQL学习笔记4:MySQL的WHERE与JOIN语句

    # 1、前言

    学习视频源自:【狂神说Java】MySQL最新教程通俗易懂

    B站视频链接:https://www.bilibili.com/video/BV1NJ411J79W

    [video(video-4IYyPI1C-1589717216258)(type-bilibili)(url-https://player.bilibili.com/player.html?aid=83395424)(image-https://ss.csdn.net/p?http://i0.hdslb.com/bfs/archive/efacc6aa636d653b8b5c2984988eaed4f428132c.jpg)(title-【狂神说Java】MySQL最新教程通俗易懂)]

    笔记为看视频自行撰写,仅限学习交流使用

    # 1.1、上一篇文章

    MySQL学习笔记3:MySQL的增删改与基本查询语句 (opens new window)

    # 5、DQL查询数据

    # 5.3、where条件子句

    作用:检索数据中符合条件的值

    搜索的条件由一个或者多个表达式组成,结果 布尔值

    逻辑运算符

    运算符 语法 描述
    AND && a AND b a&&b 逻辑与,两个都为真,结果为真
    OR || a OR b a||b 逻辑或,一个为真,结果为真
    NOT ! NOT a !a 逻辑非,真为假,假为真

    尽量使用英文字母

    SELECT `studentno`,`studentresult` FROM result
    
    -- 查询考试成绩在95到100分之间的
    SELECT `studentno`,`studentresult` FROM result WHERE `studentresult`>=95 AND `studentresult`<=100
    
    -- and &&
    SELECT `studentno`,`studentresult` FROM result WHERE `studentresult`>=95 && `studentresult`<=100
    
    -- 模糊查询(区间)
    SELECT `studentno`,`studentresult` FROM result WHERE `studentresult` BETWEEN 95 AND 100
    
    -- 除了1000号学生之外的同学的成绩
    SELECT `studentno`,`studentresult` FROM result WHERE studentno!=1000
    
    -- !=  NOT
    SELECT `studentno`,`studentresult` FROM result WHERE NOT studentno = 1000
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16

    模糊查询:比较运算符

    运算符 语法 描述
    IS NULL a IS NULL 如果操作符为NULL则结果为真
    IS NOT NULL a IS NOT NULL 如果操作符为NOT NULL则结果为真
    BETWEEN AND a BETWEEN b AND c 若a在b和c之间,则结果为真
    LIKE a LIKE b SQL匹配,如果a匹配b,则结果为真
    IN a IN (a1,a2,a3...) 假设a在a1,a2,a3...其中的某一个值之中,则结果为真
    -- 查询姓张的同学
    -- LIKE结合 %(代表0到任意个字符) _(一个字符)
    SELECT `studentno`,`studentname` FROM student WHERE `studentname` LIKE '张%'
    
    -- 查询姓张的同学,名字后面只带一个字的
    SELECT `studentno`,`studentname` FROM student WHERE `studentname` LIKE '张_'
    
    -- 查询姓张的同学,名字后面只带两个字的
    SELECT `studentno`,`studentname` FROM student WHERE `studentname` LIKE '张__'
    
    -- 查询名字中间有伟字的同学 %伟%
    SELECT `studentno`,`studentname` FROM student WHERE `studentname` LIKE '%伟%'
    
    -- IN(具体的一个或多个值)
    -- 查询1001,1002,1003号学生信息
    SELECT `studentno`,`studentname` FROM student WHERE `studentno` IN (1000,1001,1002)
    
    -- 查询在北京的学生
    SELECT `studentno`,`studentname` FROM student WHERE `address` IN ('北京朝阳')
    
    -- NULL    NOT NULL
    -- 查询地址为空的学生 null  ''
    SELECT `studentno`,`studentname` FROM student WHERE address IS NULL OR address = ''
    
    -- 查询有出生日期的同学  不为空
    SELECT `studentno`,`studentname` FROM student WHERE borndate IS NOT NULL
    
    -- 查询没有出生日期的同学  为空
    SELECT `studentno`,`studentname` FROM student WHERE borndate IS NULL
    
    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

    # 5.4、联表查询

    JOIN 对比

    image-20200527201103643

    u=4057843062,2771292381&fm=26&gp=0

    联表查询 JOIN
    -- 查询参加了考试的同学(学号、姓名、科目编号、分数)
    SELECT * FROM student
    SELECT * FROM result
    
    /*思路
    1.分析需求,分析查询的字段来自哪个表,(连接查询)
    2.确定使用哪种连接查询? 7种
    确定交叉点(这两个表哪个数据相同)
    判断的条件:学生表中的studentno = 成绩表中的studentno
    */
    
    -- JOIN(连接的表) ON(判断的条件) 连接查询
    -- WHERE 等值查询
    SELECT s.studentno,studentname,subjectno,studentresult FROM student AS s INNER JOIN result AS r ON s.studentno = r.studentno
    
    -- RIGHT JOIN
    SELECT s.studentno,studentname,subjectno,studentresult FROM student s RIGHT JOIN result r ON s.studentno = r.studentno
    
    -- LEFT JOIN
    SELECT s.studentno,studentname,subjectno,studentresult FROM student s LEFT JOIN result r ON s.studentno = r.studentno
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    操作 描述
    INNER JOIN 如果表中至少有一个匹配,就返回行
    LEFT JOIN 会从左表中返回所有的值,即使右表中没有匹配
    RIGHT JOIN 会从右表中返回所有的值,即使左表中没有匹配
    -- 查询缺考的同学
    SELECT s.studentno,studentname,subjectno,studentresult FROM student s LEFT JOIN result r ON s.studentno = r.studentno WHERE studentresult IS NULL
    
    -- 思考题(查询了参加考试的同学信息:学号、学生姓名、科目名称、分数)
    /*思路
    1.分析需求,分析查询的字段来自哪个表,student、result、subject(连接查询)
    2.确定使用哪种连接查询? 7种
    确定交叉点(这两个表哪个数据相同)
    判断的条件:学生表中的studentno = 成绩表中的studentno
    */
    SELECT s.studentno,studentname,subjectname,studentresult 
    FROM student s 
    RIGHT JOIN result r 
    ON s.studentno = r.studentno 
    INNER JOIN subject sub 
    ON r.subjectno = sub.subjectno
    
    -- 我要查询哪些数据 SELECT...
    -- 从哪几个表中查 FROM 表 XXX JOIN 连接的表 ON 交叉条件
    -- 假设存在一种多张表查询,慢慢来,先查询两张表然后再慢慢增加
    
    -- FROM a LEFT JOIN b  以左边表为基准
    -- FROM a RIGHT JOIN b  以右边表为基准
    
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24

    自连接

    USE school;
    CREATE TABLE `category`(
     `categoryid` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主题id',
     `pid` INT (10) NOT NULL COMMENT '父id',
     `categoryName` VARCHAR (50) NOT NULL COMMENT '主题名字',
    	PRIMARY KEY(`categoryid`)
    )ENGINE = INNODB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8
    
    INSERT INTO `category` (`categoryid`,`pid`,`categoryName`)
    VALUES ('2','1','信息技术'),
    ('3','1','软件开发'),
    ('4','3','数据库'),
    ('5','1','美术设计'),
    ('6','3','web开发'),
    ('7','5','ps技术'),
    ('8','2','办公信息')
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16

    自己的表和自己的表连接,核心:一张表拆为两张一样的表即可

    父类

    categoryid categoryName
    2 信息技术
    3 软件开发
    5 美术设计

    子类

    pid categoryid categoryName
    3 4 数据库
    2 8 办公信息
    3 6 web开发
    5 7 ps技术

    操作:查询父类对应的子类关系

    父类 子类
    信息技术 办公信息
    软件开发 数据库
    软件开发 web开发
    美术设计 ps技术
    -- 查询父子信息:把一张表看为两个一模一样的表
    
    SELECT a.`categoryName` AS '父栏目',b.`categoryName` AS ‘子栏目’
    FROM `category` AS a,`category` AS b
    WHERE a.`categoryid` = b.`pid`
    
    -- 查询学员所属的年纪(学号、学生姓名、年纪名称)
    SELECT studentno,studentname,gradename
    FROM student s
    INNER JOIN grade g
    ON s.gradeid = g.gradeid
    
    -- 查询科目所属的年级(科目名称,年纪名称)
    SELECT subjectname,gradename
    FROM subject sub
    INNER JOIN grade g
    ON sub.gradeid = g.gradeid
    
    -- 思考题(查询了参加高等数学-1考试的同学信息:学号、学生姓名、科目名称、分数)
    SELECT s.studentno,studentname,subjectname,studentresult
    FROM student s
    INNER JOIN result r
    ON s.studentno = r.studentno
    INNER JOIN subject sub
    ON r.subjectno = sub.subjectno
    WHERE subjectname = '高等数学-1'
    
    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
    编辑 (opens new window)
    #MySQL
    上次更新: 2022/08/26, 15:52:02
    MySQL学习笔记3:MySQL的增删改与基本查询语句
    MySQL学习笔记5:分页、排序、子查询与常用函数

    ← MySQL学习笔记3:MySQL的增删改与基本查询语句 MySQL学习笔记5:分页、排序、子查询与常用函数→

    最近更新
    01
    使用Vscode开发一个小插件
    10-21
    02
    Vscode插件配置项监听
    10-18
    03
    使用has属性构造必填效果
    10-14
    更多文章>
    Theme by Vdoing | Copyright © 2020-2023 互联网ICP备案: 闽ICP备18027236号
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式