软件测试基础篇——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数据库表的操作

image-20230812174108599

  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)

    image-20230717161926055

  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个列

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

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

image-20230812174039936


回顾

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.删除任意两张表中的联合主键

        image-20230718114153965

        • 唯一约束 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.删除任意两张表的唯一约束

          image-20230718150258388

    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默认约束

      image-20230718160109661

      1. 非空约束 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.创建一张表,让该表参照引用已经建立好的任意两张表,建立外键约束关系

image-20230719111418479

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

​ 格式: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 表名;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/88562.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ORB-SLAM2第二节---双目地图初始化

比起单目初始化&#xff0c;而双目实现地图的初始化非常简单&#xff0c;只需要一帧&#xff08;左右目图像&#xff09;即可完成初始化。 行特征点统计。考虑用图像金字塔尺度作为偏移量&#xff0c;在当前点上下正负偏移量&#xff08;r)内的纵坐标值都认为是匹配点可能存在…

【MySQL】并发执行事务可能存在的问题, 事务的四种隔离级别

文章目录 前言一、并发执行事务可能存在的问题1, 脏读问题2, 不可重复读3, 幻读 二、MySQL 的四种隔离级别1, READ UNCOMMITTED 读未提交2, READ COMMITTED 读已提交3, REPEATABLE READ 可重复读 (MySQL 的默认事务隔离级别)4, SERIALIZABLE 串行化 总结 前言 各位读者好, 我是…

web会话跟踪以及JWT响应拦截机制

目录 JWT 会话跟踪 token 响应拦截器 http是无状态的&#xff0c;登录成功后&#xff0c;客户端就与服务器断开连接&#xff0c;之后再向后端发送请求时&#xff0c;后端需要知道前端是哪个用户在进行操作。 JWT Json web token (JWT), 是为了在网络应用环境间传递声明而…

WebAPIs 第三天

DOM 事件进阶 事件流事件委托其他事件元素尺寸与位置 一.事件流 事件流与两个阶段说明事件捕获事件冒泡阻止冒泡解绑事件 1.1 事件流与两个阶段说明 ① 事件流&#xff1a;指的是事件完整执行过程中的流动路径 ② 事件流分为捕获阶段和冒泡阶段 1.2 事件捕获 从DOM根元素…

探讨uniapp的生命周期问题

在uniapp中,生命周期函数分为应用生命周期函数、页面生命周期函数和组件生命周期函数. 1应用声明周期 应用生命周期函数只能在 App.vue 中监听有效&#xff0c;在其他页监听无效。 onLaunch&#xff1a;当uni-app 初始化完成时触发&#xff08;全局只触发一次&#xff09;on…

AI 绘画Stable Diffusion 研究(七) 一文读懂 Stable Diffusion 工作原理

大家好&#xff0c;我是风雨无阻。 本文适合人群&#xff1a; 想要了解AI绘图基本原理的朋友。 对Stable Diffusion AI绘图感兴趣的朋友。 本期内容&#xff1a; Stable Diffusion 能做什么 什么是扩散模型 扩散模型实现原理 Stable Diffusion 潜扩散模型 Stable Diffu…

VMware Workstation中安装了Windows7系统但是VMware Tools选项为灰色及无法安装的解决方法

一、问题描述 当我们在使用VMware Workstation安装好了Windows7系统后;该安装好的Windows7系统并不能自动适配WMware的界面,只能在中间显示很小的一部分内容;此时我们就需要给Windows7系统安装VMware Tools工具; 问题一:WMware中的【安装VMware Tools】选项则是灰色的无法…

邻接表创建无向表(C++ 代码)

#include<iostream>//邻接表创建无向表 #define MVNum 100 using namespace std; typedef char VerTexType; typedef struct Arcnode//边节点 {int adjvex;//该边所指向的顶点的位置struct Arcnode* nextarc;//指向下一条边的指针 }Arcnode; typedef struct vnode//顶点节…

【瑞吉外卖】Linux学习

Linux常用命令 Linux命令初体验 Linux的命令都是由一个或几个单词的缩写构成的 命令对应英文作用lslist查看当前目录下的内容pwdprint work directory查看当前所在目录cd [目录名]change directory切换目录touch [文件名]touch如果文件不存在&#xff0c;新建文件mkdir [目录…

软件测试基础篇——LAMP环境搭建

LAMP 1、Linux系统的其他命令 find命令&#xff1a;在目录下查找文件 ​ 格式一&#xff1a;find 路径 参数 文件名 ​ 路径&#xff1a;如果没有指定路径&#xff0c;默认是在当前目录下 ​ 参数&#xff1a;-name 根据文件名来查找&#xff0c;区分大小写&#xff1b; -…

【多模态】25、ViLT | 轻量级多模态预训练模型(ICML2021)

文章目录 一、背景二、ViLT 方法三、效果3.1 数据集3.2 分类任务 VQA 和 NLVR23.3 Image Retrieval 论文&#xff1a;ViLT: Vision-and-Language Transformer Without Convolution or Region Supervision 代码&#xff1a;https://github.com/dandelin/vilt 出处&#xff1a;…

JVM相关知识

文章目录 JMM主内存与工作内存工作内存与主内存的交互的8种方法JVM内存结构运行时数据区 类加载机制类加载器类加载分类获取类加载器的途径双亲委派机制双亲委派的机制的弊端是什么?怎么打破双亲委派机制代码热替换、模块热部署自定义类加载器对类加载器的引用 String底层stri…

sentinel核心流程源码解析

sentinel的处理槽(ProcessorSlot) 可以说&#xff0c;sentinel实现的各种功能就是由各处理槽完成的 ,ProcessorSlot定义了四个方法&#xff1a; 当进入该处理槽时触发该方法 处理完 entry方法之后触发该方法 退出该处理槽时触发该方法 exit方法处理完成时触发该方法 sentinel的…

枚举缓存工具

此文章为笔记&#xff0c;为阅读其他文章的感受、补充、记录、练习、汇总&#xff0c;非原创&#xff0c;感谢每个知识分享者。 文章目录 1. 背景2. 枚举缓存3. 样例展示4. 性能对比5. 总结 本文通过几种样例展示如何高效优雅的使用java枚举消除冗余代码。 1. 背景 枚举在系统…

一文读懂HTML

文章目录 HTML的历史HTML的作用HTML的基本语言 HTML的历史 HTML&#xff08;HyperText Markup Language&#xff09;的历史可以追溯到20世纪90年代早期&#xff0c;它是互联网发展的重要里程碑之一。以下是HTML的历史概述&#xff1a; 早期阶段&#xff08;1980年代末 - 1990年…

创新引领城市进化:人工智能和大数据塑造智慧城市新面貌

人工智能和大数据等前沿技术正以惊人的速度融入智慧城市的方方面面&#xff0c;为城市的发展注入了强大的智慧和活力。这些技术的应用不仅令城市管理更高效、居民生活更便捷&#xff0c;还为可持续发展和创新奠定了坚实的基础。 在智慧城市中&#xff0c;人工智能技术正成为城市…

Unity使用C# Protobuf源码

目录 第一步&#xff1a;下载源码 第二步&#xff1a;运行C#构建文件 第三步&#xff1a;处理报错&#xff08;如果你已安装对应的SDK则不会报错&#xff09; 第四步&#xff1a;复制库文件到你的工程 第一步&#xff1a;下载源码 protobuf github源码https://github.com/p…

《甲午》观后感——GPT-3.5所写

《甲午》是一部令人深思的纪录片&#xff0c;通过生动的画面和真实的故事&#xff0c;向观众展示了中国历史上的一段重要时期。观看这部纪录片&#xff0c;我深受触动&#xff0c;对历史的认识也得到了深化。 首先&#xff0c;这部纪录片通过精心搜集的历史资料和珍贵的影像资料…

Xamarin.Android实现手写板的功能

目录 1、背景说明2、实现效果3、代码实现3.1 整体思路3.2 核心绘画类-PaintView.cs3.3 对话框类-WritePadDialog.cs3.4 前端实现类-MainActivity3.5 布局文件3.5.1 write_pad.xml3.5.2 activity_main布局文件 4、知识总结5、代码下载6、参考资料 1、背景说明 在实际使用过程中…

vector的模拟实现

什么是vector vector是一个封装了动态大小数组的顺序容器跟任意其它类型容器一样&#xff0c;它能够存放各种类型的对象。 模拟实现 实现前的准备 在实现vector之前&#xff0c;为了和库里的区分开需要将实现的vector放在一个自定义的命名空间里。而且vector需要实现成模版…