软件测试基础篇——MySQL

MySQL

1、数据库技术概述

  1. 数据库database:存放和管理各种数据的仓库,操作的对象主要是【数据data】,科学的组织和存储数据,高效的获取和处理数据
  2. SQL:结构化查询语言,专为**关系型数据库而建立的操作语言,用户在使用SQL语句时,只需要发出"做什么"**的命令,具体"怎么做"是不用参与的。

​ 解释:关系型数据库:指的是这一类数据库,对于数据的存储和管理方式:都是以【表】的形式来组织的,关系:表

​ 比如:MySQL,Oracle,SQL Server系统的数据库------>关系型数据库------>都是以【表】的形式来存储和管理数据

  1. MySQL数据库特征
    1. 体积小:消耗资源较少
    2. 速度快:处理数据的速度较快
    3. 成本低:开源免费,技术成本投入比较便宜
    4. 可移植性:又被称为跨平台性,可以在多个操作系统中进行使用

2、MySQL数据库的安装与配置

  1. MySQL安装:参考安装文档
  2. 验证:MySQL数据库安装完毕后,可以借助于自带的【命令行工具】,进行操作
  3. MySQL数据库的卸载:控制面板------>卸载程序------>找到MySQL组件(两个)------>右键选择卸载
  4. MySQL数据库的连接操作:
    1. 自带的【命令行工具】进行连接使用
    2. 连接MySQL数据库的工具:HeiDiSQL

3、MySQL数据库的创建与删除

  1. 创建数据库的语法

​ creat database 数据库名;

​ 例:创建一个testdb01的数据库

​ create database testdb01;

  1. 查看现有的数据库

​ show databases;

  1. 删除数据库语法:

​ drop database 数据库名字;

  1. MySQL注释:解释说明作用,不参与执行

​ 单行注释:- - 单行注释的内容

​ 多行注释:/* 多行注释的内容 */

4、MySQL数据库表的操作

  1. 创建表语法:

create table 表名(

​ 列名1 数据类型,

​ 列名2 数据类型,

​ 列名3 数据类型,

​ ...

​ 列名n 数据类型

​ );

注意:最后一个列不需要加逗号

  1. MySQL支持的数据类型:

    1. 数值型

      整数类型:tinyint:微整型 smallint:小整型 int:整型,MySQL默认 bigint:大整型

      小数类型:又被称为"浮点型",decimal(总位数,小数位),MySQL默认

      ​ 例:价格 decimal(5,2) 999.99 float(总位数,小数位) double(总位数,小数位)

    2. 日期时间类型

      date 年月日yyyy--mm--dd

      time 时间hh:mm:ss

      year 年份yyyy

      datetime 日期时间,MySQL默认

    3. 字符串类型

      char(长度):定长字符串类型,如果传递的数据值长度未达到指定长度,系统会用空格给占用,不会做释放

      ​ 例:name char(10)------>tom:3个字符,还有7个字符长度空间未利用,系统直接给空格占用

      varchar(长度):变长字符串类型,如果传递的数据值长度未达到指定长度,系统直接释放,不会占用

      ​ 例:name varchar(10)------>tom:3个字符,剩下7个字符长度空间,直接释放

  2. 创建表的操作:

    1. 每一张表的创建,一定找好它所属的数据库

    2. 切换 数据库语法:use 数据库名字;

      经过切换之后,就来到了指定的数据库下进行操作

    3. 表创建:创建一个学生信息表(学号 字符串15,姓名 字符串20,年龄 整数,入学年份 year)

    练习:a.创建一个学校的数据库:schooldb

    ​ b.切换到学校的数据库,进行以下列表的创建

    ​ b.1创建student表(sno 字符串类型15,sname 字符串10,sage 微整型,入学时间 日期时间类型)

    ​ b.2创建选课表(学号 字符串类型15,课程号 字符串类型5,成绩 整型)

    ​ b.3创建教师表(教师编号 字符串10,教师姓名 字符串类型10,专业 字符串类型8,薪资 小数类型8,2,入职年份year)

  3. 删除表语法:

​ drop table 表名1,表名2...;

  1. 修改 表结构:alter table 系列语句

    1. 添加

      alter table 表名 add 列名 数据类型;

    2. 删除列

      alter table 表名 drop 列名;

    3. 修改列的数据类型

      alter table 表名 modify 列名 新的数据类型;

    4. 修改列名

      alter table 表名 change 旧列名 新列名 数据类型(新的数据类型);

  2. 显示 表结构:desc 表名;

  3. 数据库常见的专业名词

​ 关系:表 例:一个关系------>一张表

​ 关系名:表名

​ 表中的行:元组,记录 例:表中有3个元组------>3行数据/3条记录

​ 表中的列:属性,字段 例:表中有3个字段------>3个属性/3个列

​ 表中的列名:属性名,字段名

​ 表中的值:属性值,字段值


回顾

SQL:结构化查询语言

库的操作:

​ 创建:create database 数据库名字;

​ 查看:show databases;

​ 删除:drop database 数据库名字;

​ 切换:use 数据库名字;

表的操作:

​ 创建:create table 表名(

​ 列名1 数据类型,

​ ...

​ 列名n 数据类型

​ );

​ 删除:drop table 表名;

​ 修改:alter table 表名; 系列语句

​ 添加:add 列名 数据类型;

​ 删除列 drop 列名;

​ 修改列的数据类型 modify 列名 新的数据类型;

​ 修改列名 change 旧列名 新列名 新的数据类型;

​ 显示表结构:desc 表名;

5、表中约束的使用

约束:(给一张表添加)限制,要求,规则......

  1. 为了保证数据库表中数据的完整性(指的是存储在数据库表中的数据是准确的和可靠的),就引入了约束的应用。

  2. 关系的完整性约束

    1. 为了实现表结构以及表中数据的完整性,约束可以从三个角度来考虑(约束的分类):实体完整性约束,域完整性约束,参照完整性约束。

    2. 实体完整性约束:

      • 思想:保证表中数据的唯一性,至少不会出现重复的数据

      • 提供的两个约束:主键约束,唯一约束

      • 主键约束 primary key 最多有一个

        ①思想:唯一,不重复,不为空

        ②创建表的同时关联主键约束

        格式一:

        create table 表名(

        列名1 数据类型 primary key,

        列名2 数据类型

        );

        格式二:

        ​ create table 表名(

        ​ 列名1 数据类型,

        ​ 列名2 数据类型,

        ​ constraint 主键约束的名字 primary key(列名1)

        ​ );

        备注:主键约束的名字:如果需求给了,我们直接照搬使用;如果没给名字,名字自定义:PK_列名

        ++constraint:约束++

        格式三:

        ​ create table 表名(

        ​ 列名1 数据类型,

        ​ 列名2 数据类型,

        ​ primary key(列名1)

        ​ );

        ③针对已经存在的表关联主键约束

        格式一:alter table 表名 add primary key(列名);

        格式二:alter table 表名 add constraint 主键约束的名字 primary key(列名);

        格式三:alter table 表名 modify 列名 数据类型 primary key;

        ④删除主键约束

        格式:alter table 表名 drop primary key;

      • 联合主键

        ①思想:本质上还属于主键约束,只不过primary key变成修饰两个列的操作,把这两个列,看成是一个整体,共同遵守主键约束的特性:唯一,不重复,不为空

        ②创建表的同时关联联合主键

        格式二:

        ​ create table 表名(

        ​ 列名1 数据类型,

        ​ 列名2 数据类型,

        ​ constraint 主键约束的名字 primary key(列名1,列名2)

        ​ );

        格式三:

        ​ create table 表名(

        ​ 列名1 数据类型,

        ​ 列名2 数据类型,

        ​ primary key(列名1,列名2)

        ​ );

        ③针对已经存在的表关联联合主键

        格式一:alter table 表名 add primary key(列名1,列名2);

        格式二:alter table 表名 add constraint 主键约束的名字 primary key(列名1,列名2);

        注意:一个表中,不管是单列的主键约束,还是联合主键,有且只能有一个(它俩是互斥的)

        练习:

        ​ a.创建选课表(学号,姓名,课程号,课程名,课时,其中学号和课程号设置为联合主键,主键名为PK_NO)

        ​ b.创建考勤表(学号,出勤时间,上课时长,其中学号和出勤时间设置为联合主键)

        ​ c.针对已经存在的任意两张表,选择任意两列,添加联合主键

        ​ d.删除任意两张表中的联合主键

        • 唯一约束 unique

          ①思想:保证数据的唯一性,不允许有重复的值,但是可以有空值;一个表中可以有多个唯一约束;如果不给唯一约束起名字,默认和列名保持一致

          ②创建表的同时关联唯一约束

          ​ 格式一:

          ​ create table 表名(

          ​ 列名1 数据类型 unique,

          ​ 列名2 数据类型 unique,

          ​ 列名3 数据类型

          ​ );

          ​ 格式二:

          ​ create table 表名(

          ​ 列名1 数据类型,

          ​ 列名2 数据类型,

          ​ 列名3 数据类型,

          ​ constraint 唯一约束的名字 unique(列名1),

          ​ constraint 唯一约束的名字02 unique(列名2)

          ​ );

          ​ 备注:唯一约束的名字:如果需求给了,我们直接照搬使用;如果没给可以自定义:UN_列名

          ③针对已经存在的表关联唯一约束

          ​ 格式:alter table 表名 add unique(列名);

          ④删除唯一约束

          ​ 格式:alter table 表名 drop index 唯一约束的名字;

          练习:

          ​ a.创建一个电影表(电影编号 主键约束,电影片名 唯一约束,时长,类别 唯一约束)

          b.创建一个商品表(商品编号 主键约束:PK_编号,商品名称 唯一约束:UN_名称,价格)

          c.针对已经存在的表,任意选择两个找出合适的列,添加唯一约束

          ​ d.删除任意两张表的唯一约束

    3. 域完整性约束

      思想:保证表中不会输入无效的值,提供了两个约束:默认约束,非空约束

      1. 默认约束 default

        ①思想:表中的列如果设置有默认约束,那么该列不进行填充数据 时,就会把默认值直接补上 ;一个表中可以有多个默认约束

        ②创建表的同时关联默认约束

        ​ create table 表名(

        ​ 列名1 数据类型 default 默认值,

        ​ 列名2 数据类型 default 默认值,

        ​ 列名3 数据类型

        ​ );

        备注:如果默认的值是数字,就直接写数据;是字符串或日期时间,需要加上引号(单双引号都可)

        ③针对已经存在的表关联默认约束

        ​ 格式:alter table 表名 modify 列名 数据类型 default 默认值;

        ④删除默认约束

        ​ 格式:alter table 表名 modify 列名 数据类型;

      练习:

      ​ a.创建一张表tempStudent,包括sno,sname,sdept,sage四 列,为sno添加主键、sname唯一、sdept默认"软件测试" , sage非空约束

      ​ b.找到任意一张表,给任意一个列,添加默认约束

      ​ c.删除tempStudent表的sdept默认约束


      2. 非空约束 not null

      思想:不能有空的情况;一个表中可以有多个非空约束

      ①创建表的同时关联非空约束

      ​ create table 表名(

      ​ 列名1 数据类型 not null,

      ​ 列名2 数据类型 not null,

      ​ 列名3 数据类型

      ​ );

      ②针对已经存在的表关联非空约束

      ​ 格式:alter table 表名 modify 列名 数据类型 not null;

      ③删除非空约束

      ​ 格式:alter table 表名 modify 列名 数据类型;

      练习:

      ​ a.创建一个订单表(订单编号 主键约束,订单名称 非空约束,手机号 唯一约束,收货地址 默认是河南)

      ​ b.针对已有的表,找到其中一个列,设置为非空约束

      ​ c.删除任意一个表中的非空约束


回顾

主键约束:primary key:唯一,不重复,不为空------>最多只能有一个

唯一约束:unique:不允许有重复的值,可以有空值

默认约束:default:默认值会进行填充

非空约束:not null:不能有空值


  1. 参照完整性约束:外键约束 foreign key

​ ①思想:针对两张表来进行的操作,他会把其中的一张表看成是【主表】,另外一张表看成是【从表】,从表参照主表;主表与从表之间建立参照关系,实质上是通过两个表中公有的列来完成的:通过从表中的列,参照引用主表中的列,建立起联系;列名可以不一致,但是列的数据类型和内容保持一致;外键约束是建立在从表的列中;主表中被参照引用的列,必须是主键约束或唯一约束;

​ 主表与从表一旦建立起外键约束,对从表的限制:从表如果想要进行数据的插入操作,首先得"询问主表的意见",主表有关联的数据,才能允许从表做插入的操作;

​ ==对主表的限制:主表如果想要删除数据,需要"询问从表的意见",主表数据被从表正在参照引用,那么该数据主表是无法删除的;==从表中的外键约束也可以有多个:一个从表可以参照引用多个主表,或者,一个主表也可以被多个从表参照引用

加强表与表之间的联系

②创建表的同时关联外键约束

​ create table 主表表名(

​ 列名1 数据类型 primary key,

​ 列名2 数据类型

​ );

​ create table 从表表名(

​ 列名1 数据类型,

​ 列名2 数据类型,

​ 列名3 数据类型,

​ constraint 外键约束的名字 foreign key(从表列名1) references 主表表名(主表列名1),

​ constraint 外键约束 的名字2 foreign key(从表列名2) references 主表表名2(主表列名2)

​ );

​ 备注:外键约束的名字,如果需求给了,我们就照搬使用;如果没有给,自定义名字:FK_列名

​ 练习:

​ a.创建工人表(工人编号 主键约束,姓名,年龄)

​ b.创建薪资表(工人编号,部门,薪资,其中工人编号参照引用工人表的工人编号)

​ c.创建一张表,让该表参照引用已经建立好的任意两张表,建立外键约束关系

③针对已经存在的表来关联外键约束

​ 格式:alter table 从表表名 add constraint 外键约束的名字 foreign key(从表列名) references 主表(主表列名);

④删除外键约束

​ 格式:alter table 表名 drop foreign key 外键约束的名字;

​ 练习:

​ a.找到其中任意一张表,设置外键约束,关联另外一张主表

​ b.删除其中两张表的外键约束


6、插入数据

  1. SQL语言分类:

​ DDL语言:数据定义语言:create语句,alter语句,drop语句------实现对库或表的创建,修改,删除操作

​ DML语言:数据操作/操纵语言:insert语句,delete语句,update语句------实现对表中数据的增删改操作

​ DQL语言:数据查询语言:select语句------实现对表中数据的查询操作

  1. insert语句:实现对表中数据的插入操作(增加数据):值和列名一定是匹配的(一一对应)

​ 格式一:insert into 表名(列名1,列名2,列名3...) values(值1,值2,值3...);

​ 格式二:insert into 表名 values(值1,值2,值3...);

​ 格式三:insert into 表名 values(值1,值2,值3...),(值1,值2,值3...),(值1,值2,值3...);

​ 备注:如果插入的数据是:字符串或日期时间,需要加引号;数字直接写

7、删除数据

delete语句:删除表中的数据

  1. 删除表中所有的数据:delete from 表名;
  2. 有条件的删除:delete from 表名 where 条件;

​ 条件中可以用到的比较运算符:

​ = 例:性别='男'

​ > 例:年龄>18

​ < 例:年龄<30

​ >= 例:成绩>=80

​ <= 例:成绩<=50

​ != <> 不等于 例:籍贯 !='北京'

多条件的删除操作:

​ ①多个条件同时满足:and------>where 条件1 and 条件2 and 条件3...;

​ ②多个条件只需要满足其中任意一个:or------>where 条件1 or 条件2 or 条件3....;

8、更新数据

update语句:实现表中数据修改操作

  1. 格式一:

​ update 表名 set 列名=新值;

  1. 格式二:

​ update 表名 set 列名1=新值,列名2=新值,列名3=新值...;

  1. 格式三:有条件的更新

​ update 表名 set 列名1=值,列名2=值 where 条件;

update student set sage=18 where ssex='女' or sage>20;

场景:在更新数据的过程中,也可以进行计算的操作


回顾

  1. 外键约束 foreign key:实现两个表之间的参照关系:从表:插入数据,主表:删除数据------>++加强表与表之间的联系++
  2. 数据的增删改

​ 增:insert into 表名 values(值1,值2...);

​ 删:delete from 表名 where 条件;

​ 改:update 表名 set 列名=值 where 条件;


9、查询的基本操作

  1. 查询select:针对数据库表中的数据按照特定的组合,条件,次序进行检索查看的操作
  2. 查询的基本语法:

select 列名1,列名2,列名3... from 表名;

​ ++select字句:写的是要查询的列,告诉要"查什么"++

​ ++from字句:写的是查询用到的表,告诉"从哪查++"

查看表中所有的数据:select * from 表名; *任意,所有

  1. 别名查询:针对查询结果的标题,进行另起名字的操作

​ 格式一:

​ select 列名1 别名1,列名2 别名2,列名3 别名3... from 表名;

​ 格式二:as关键字

​ select 列名1 as 别名,列名 as 别名... from 表名;

  1. 去重复查询:针对列中重复的数据,去重后进行查看显示(将查询的结果去重复之后再显示)

​ 格式:select distinct 列名 from 表名;

  1. 在查询的过程中,也可以进行查询结果的计算操作

​ 格式:select 计算公式 别名 from 表名;

  1. 选择查询(条件查询):where子句

​ 格式:select 列名 from 表名 where 条件;

①比较搜索条件:比较运算符 = > < > = <= <> !=

②逻辑运算符:and or

③范围搜索条件查询

​ 1.在范围之内的数据:between 开始值 and 结束值;

​ 格式:select 列名 from 表名 where 列名 between 开始值 and 结束值;

​ 2.排除在范围之内的数据:not between 开始值 and 结束值;

​ 格式:select 列名 from 表名 where 列名 not between 开始值 and 结束值;

​ 备注:开始值和结束值,也会参与查询的过程

④列表搜索条件查询:

1.匹配列表中的数据(任意一个):in(值1,值2,值3...)

​ 格式:select 列名 from 表名 where 列名 in(值1,值2,值3...);

​ 思想:只要条件中的列,匹配到列表中任意一个值,就会有相关的查询结果(记录)

2.排除列表中的数据:not in(值1,值2,值3...)

​ 格式:select 列名 from 表名 where 列名 not in(值1,值2,值3...);

​ 思想:只要是列表中的值,都把他们排除在外

⑤模糊查询:字符串匹配查询

1.匹配和字符模板相关的数据:like '字符模板'

​ 格式:select 列名 from 表名 where 列名 like '字符模板';

​ 2.排除和字符模板相关的数据:not like '字符模板'

​ 格式:select 列名 from 表名 where 列名 not like '字符模板';

​ 通配符:

​ % 任意个字符(零个或多个)

​ _ 单个字符

⑥空值查询:

1.查询记录中有为空的信息:is null

​ 格式:select 列名 from 表名 where 列名 is null;

​ 2.查询记录中不为空的信息:is not null

​ 格式:select 列名 from 表名 where 列名 is not null;

⑦聚合函数:实现对列中数据的计算操作

​ sum(列名) 求和

​ avg(列名) 求平均值

​ max(列名) 最大值

​ min(列名) 求最小值

​ count(*) 统计元组的个数(行数)

​ count(列名) 统计该列中值的总个数

​ 备注:除了count(*)之外,其他聚合函数操作时,均忽略空值

​ 格式:select 聚合函数 from 表名 where 条件;

⑧行数限定查询:limit

​ 格式一:select 列名 from 表名 limit 行数; -------->默认从第一行开始查看

​ 格式二:select 列名 from 表名 limit 开始位置下标,行数;

⑨分组查询:针对查询的结果,按照某个列来进行划分(分组) group by

​ 格式:select 列名 ,聚合函数 from 表名 group by 列名;

⑩having:针对分组后的数据,进行条件筛选的操作

​ 备注:having的使用,必须搭配group by; having后面大部分都是聚合函数当条件,where后面不能直接写聚合函数

​ 格式:select 列名,聚合函数 from 表名 group by 列名 having 分组的条件;

⑪.排序:order by :针对查询的结果,按照某个列进行排序:升序asc 默认,降序desc

​ 格式:select 列名 from 表名 order by 列名 asc|desc;

备注 :聚合函数(distinct 列名):对列中的值,进行去重复后,再来进行计算操作

​ 例:sum(distinct grade):先对成绩去重,然后再来进行求和


回顾

select 列名

from 表名

where 条件

group by 分组的列名

having 分组条件(聚合函数当条件)

order by 排序列名 asc|desc;

去重复:distinct

聚合函数:sum(列名) avg(列名) max(列名) min(列名) count(*):行的总数量 count(列名):值的总个数

行数限定:limit


10、MySQL常用的函数(了解)

  1. 字符串函数

length() 统计字符串的字节长度

char_length() 统计字符串长度

mid(字符串数据,开始的位置,截取的字符个数)

++统计字符串字节长度 一个汉字占3个字节,一个字母占1个字节++

  1. 数学函数

​ round():四舍五入

​ round(数字,保留小数位) 指定保留小数位的四舍五入

​ round(数字) 保留整数

​ least(值1,值2,值3...) 求最小值

​ greatest(值1,值2,值3...) 求最大值

  1. 日期时间函数

now() 获取当前日期时间

​ current_date() 获取当前日期

​ current_time() 获取当前时间

​ to_days() 计算总天数(从0开始计算)

​ dayofyear() 计算该年已过的天数

​ week() 统计日期所在的周数

  1. 控制函数

​ if(布尔表达式,参数一,参数二) true:执行参数一,false:执行参数二

​ if(null,参数一,参数二) 直接执行参数二

​ ifnull(参数一,参数二) 参数一有值,直接查询,如果为null,就查参数二

11、多表查询操作

  1. 概述:在实际操作过程中,我们所需要的数据,可能会来源于多张表,这个时候就需要进行多表连接,实现查询的操作
  2. 多表查询的实现方式:表连接
  3. 表连接查询的分类:内连接查询,外连接查询
  4. 内连接:思想:只有表与表之间匹配到的数据,才会被查询出来

​ ①格式一:通过where实现连接

​ select 表名1.列名1,表名1.列名2,表名2.列名1,表名3.列名1,表名4.列名1...

​ from 表名1,表名2,表名3,表名4,...

​ where 表名1.列名=表名2.列名 and 表名2.列名=表名3.列名 and 表名3.列名=表名4.列名... and 其他条件;

​ ②格式二:通过**(inner) join on**实现连接 inner可以省略 inner join:内连接

​ select 表名.列名

​ from 表名1 inner join 表名2

​ on 表名1.列名=表名2.列名 inner join 表名3

​ on 表名2.列名=表名3.列名 inner join 表名4

​ on 表名3.列名=表名4.列名...

​ where 其他的条件;

​ 备注:表与表之间建立连接的列:列名可以不一致,但是列的数据类型和内容保持一致;

​ 可以利用别名对表名进行重命名做替代的操作:表明 别名;

​ 如果查询的列只在其中的一张表出现,那么可以省略表名,直接写列名;如果查询的列,多张表都有,一定要加上表名:表名.列名;条件中的列名前方应该也加上表名:表名.列名,但是同样遵守以上原则

​ ③多表连接查询做题思想:

​ (1)确定表:根据题意描述,确定会用到的表

​ (2)确定表与表之间能够建立连接的列

​ (3)确定要查询的列

​ (4)确定是否有额外的条件,如果有,就关联其他的条件


回顾

多表查询:表连接:

​ 内连接:思想:只有表与表之间匹配到的数据,才会被查询出来

select 表名.列名

from 表名1,表名2,表名3...

where 表名1.列=表名2.列 and 表名2.列=表名3.列 and 其他条件;

[inner] join in

select 表名.列名

from 表名1 inner join 表名2

on 表名1.列名=表名2.列名 inner join 表名3

on 表明2.列名=表名3.列名...

where 其他条件;


备注:针对inner join on连接方式:可以分为:等值连接查询和非等值连接查询,判定方式:就看条件中除了等号以外,是否还有其他的比较运算符

  1. 外连接:思想:至少会返回一个表的所有内容
    1. 左外连接:会返回左表的所有内容;左表的数据在右表中匹配不到,默认位置就为空null
    2. 区分左右表:先写的表是:左表;后写的表是:右表

select 表名.列名

from 表名1 left [outer] join 表名2

on 表名1.列名=表名2.列名

​ 3.右外连接:会返回右表的所有内容;右表的数据在左表中匹配不到,默认位置就为空null

select 表名.列名

from 表名1 right [outer] join 表名2

on 表名1.列名=表名2.列名

12、子查询

  1. 子查询:指的是查询语句中,嵌套查询语句,一般出现在where后面,表示条件的
  2. 子查询的应用场景:

​ ①看似题上给了条件,但是条件的结果并没有明说,需要给查询出来

​ ②where后面不能直接写聚合函数,那么就可以通过子查询把聚合函数的结果给查出来,拿上结果值做操作即可

  1. 子查询语法:

格式一:通过in匹配子查询的结果 ++嵌套子查询++

​ select 列名 from 表名 where 列名 in(select 列名 from 表名 where 条件);

​ 备注:假如子查询语句前面使用not in,相当于把子查询的结果排除在外

格式二:通过"="匹配子查询的结果 ++相关(单值)子查询++

​ select 列名 from 表名 where 列名 =(select 列名 from 表名 where 条件);

​ 注意:①==外查询的条件要什么,子查询就查什么 ,一定做好匹配,比如:条件要学号,子查询就只能查学号;②"="匹配的子查询结果只能有一个==,而in匹配子查询结果是可以有任意个,很多时候我们无法把控子查询结果的个数,就可以优先考虑in

格式三:通过比较运算符匹配子查询的结果

​ select 列名 from 表名 where 列名 比较运算符(select 列名 from 表名 where 条件);

  1. insert和select结合使用
    1. 思想:把查询的结果,插入到指定的表中
    2. 格式:insert into 表名 select语句:
  2. update和select结合使用

​ 格式:update 表名 set 列名=值 where 列名 in(select 列名 from 表名 where 条件);

​ 备注:参考select语句中嵌套select语句的套路,都是放在where后面,表示条件

  1. delete和select结合使用

​ 格式:delete from 表名 where 列名 in(select 列名 from 表名 where 条件);

​ 备注:也是放在where后面,表示条件


回顾

子查询:嵌套查询语句

select语句+子查询

delete语句+子查询

update语句+子查询

------>都是放在where后面,表示条件

insert语句+子查询


13、视图的概述

  1. 定义:视图基于某个查询结果的虚表:视图(虚表)------>对实表进行查询;视图的结构,取决于对实表的查询过程和结果;对表进行增删改查的操作,放在视图中同样成立,把表名换成视图的名字。
  2. 注意:视图<------>增删改insert,update,delete操作<------>实表(基表),互为影响
  3. 作用:方便用户实现对数据的操作

14、视图(view)的操作

  1. 创建视图:

​ create view 视图的名字 as select语句;

  1. 修改视图结构

    1. 视图插入数据:参考insert语法

      ​ insert into 视图名字 values(值1,值2,值3...);

    2. 修改结构

      ​ alter view 视图的名字 as select语句;

    3. 修改视图数据:参考update语法

      ​ update 视图的名字 set 列名=值 where 条件;

  2. 删除视图

    1. 删除视图的数据:参考delete语句

      delete from 视图的名字 where 条件;

    2. 删除视图

      drop view 视图的名字;

15、索引概述

  1. 描述:索引是针对表中的列来进行设置的;一个表中索引的设置没有个数限制;索引能够快速定位获取表中的数据;设置索引的列会自动给插入的数据进行排序;索引技术服务于查询操作,提高查询效率

​ 例:如果把一张表看成是一本书,索引就相当于书本的目录

  1. 索引的作用(优点)

​ ①加快数据的检索(查看,查询)------>最根本的作用

​ ②保证数据的唯一性------>唯一索引

​ ③实现表与表之间的参照完整性------>加强表与表之间的联系

​ ④减少group by分组,order by排序的时间

  1. 索引的缺点

​ ①创建索引需要花费时间和消耗数据空间

​ ②索引的存在会减慢数据的增删改的速度

​ ③对小表(数据少)建立索引不会产生优化的效果

​ ④表中数据量越大,索引的优势就越明显

  1. 优先考虑建立索引的列:
    1. 定义有主键或外键约束的列
    2. 频繁查询的列
    3. 连接中频繁使用的列------>表连接的列,子查询的列
    4. 分组或排序的列

16、索引(index)的操作

  1. 创建普通索引:

​ create index 索引的名字 on 表名(列名);

  1. 创建唯一索引:

​ create unique index 索引的名字 on 表名(列名);

  1. 删除索引:

​ drop index 索引的名字 on 表名;


回顾

  1. 视图------>基于某个实表的查询结果------>虚表

​ 创建视图:create view as select语句;

​ 修改视图结构:alter view 视图名字 as select语句;

​ 增删改查------>insert,delete,update,select------>视图

​ 删除视图:drop view 视图名字;

  1. 索引:作用(优点),缺点,优先考虑建立索引的列

​ create [unique] index 索引的名字 on 表名(列名);

​ drop index 索引的名字 on 表名;

相关推荐
TDengine (老段)10 分钟前
两分钟掌握 TDengine 全部写入方式
大数据·数据库·时序数据库·tdengine·涛思数据
码农君莫笑24 分钟前
《信管通低代码信息管理系统开发平台》Windows环境安装说明
服务器·数据库·windows·低代码·c#·bootstrap·.netcore
北欧人写代码36 分钟前
MySQL 数据库备份与恢复
mysql
计算机学长felix37 分钟前
基于SpringBoot的“大学生社团活动平台”的设计与实现(源码+数据库+文档+PPT)
数据库·spring boot·后端
木与子不厌1 小时前
微服务自定义过滤器
运维·数据库·微服务
派可数据BI可视化1 小时前
连锁餐饮行业数据可视化分析方案
大数据·数据库·数据仓库·数据分析·商业智能bi
dbcat官方1 小时前
1.微服务灰度发布(方案设计)
java·数据库·分布式·微服务·中间件·架构
青年有志1 小时前
深入浅出 MyBatis | CRUD 操作、配置解析
数据库·tomcat·mybatis
数据的世界011 小时前
SQL创建和操纵表
数据库·sql
Echo flower1 小时前
mybatis-plus自动填充时间的配置类实现
java·数据库·mybatis