软件测试基础篇——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.mzph.cn/news/34274.shtml

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

相关文章

JavaScript类

JavaScript 类(class) 类是用于创建对象的模板。 我们使用 class 关键字来创建一个类&#xff0c;类体在一对大括号 {} 中&#xff0c;我们可以在大括号 {} 中定义类成员的位置&#xff0c;如方法或构造函数。 每个类中包含了一个特殊的方法 constructor()&#xff0c;它是类…

vue3项目中引入dialog插件,支持最大最小化、还原、拖拽

效果图&#xff1a; 上图是layui-vue组件库中的layer插件&#xff0c;我的项目使用的是element-plus组件库&#xff0c;在用不上layui组件库的情况下&#xff0c;就单独引入layui/layer-vue这个弹层插件就可以了 npm地址&#xff1a;layui/layer-vue - npm layui-vue组件库地址…

UnrealEngine - 网络同步之连接篇

1 连接过程 - 握手 传统的 C/S 架构下&#xff0c;Client 和 Server 通常会建立一条抽象的 Connection&#xff0c;用来进行两端的通信。 UE 的官方文档中提供了 Client 连接到 Server 的示例 &#xff0c;简单来说分为如下几步&#xff1a; 打包构建好 Client 和 Server 进程…

11-数据结构-栈和队列的应用(C语言)

栈和队列的应用 目录 栈和队列的应用 一、括号匹配&#xff08;栈&#xff09; 二、表达式的各种转换 (1)中缀转后缀(手工) (2)后缀转中缀表达式(手工) (3)中缀转后缀(栈) (4)中缀转后缀&#xff08;树&#xff09; (5)后缀表达式求值 (6)中缀表达式求值&#xff08;栈…

jackson库收发json格式数据和ajax发送json格式的数据

一、jackson库收发json格式数据 jackson库是maven仓库中用来实现组织json数据功能的库。 json格式  json格式一个组织数据的字符文本格式&#xff0c;它用键值对的方式存贮数据&#xff0c;json数据都是有一对对键值对组成的&#xff0c;键只能是字符串&#xff0c;用双引号包…

时序预测 | Matlab实现基于GRNN广义回归神经网络的电力负荷预测模型

文章目录 效果一览文章概述源码设计参考资料效果一览 文章概述 时序预测 | Matlab实现基于GRNN广义回归神经网络的电力负荷预测模型 1.Matlab实现基于GRNN广义回归神经网络的电力负荷预测模型 2.单变量时间序列预测; 3.多指标评价,评价指标包括:R2、MAE、MBE等,代码质量极高…

excel 之 VBA

1、excel和VBA 高效办公&#xff0c;把重复性的工作写成VBA代码&#xff08;VB代码的衍生物&#xff0c;语法和VBA相同&#xff09;。 首先打开开发工具模式&#xff0c;如果没有选显卡&#xff0c;需要手动打开 打开程序编辑界面 快捷键 altF11一般操作 程序调试&#xf…

概率论与数理统计:第二、三章:一维~n维随机变量及其分布

文章目录 Ch2. 一维随机变量及其分布1.一维随机变量1.随机变量2.分布函数 F ( x ) F(x) F(x)(1)定义(2)分布函数的性质 (充要条件)(3)分布函数的应用——求概率3.最大最小值函数 2.一维离散型随机变量及其概率分布(分布律)3.一维连续型随机变量及其概率分布(概率密度)4.一般类型…

深度学习关键要素:数据集汇总与分享

引言 在深度学习的应用中&#xff0c;数据被认为是最重要的因素之一。因此&#xff0c;选择一个好的数据集对于深度学习的成功至关重要。在选择数据集时&#xff0c;不仅需要关注数据量的大小、多样性以及质量&#xff0c;还要考虑数据集是否代表了所研究问题的真实情况。本文…

2023国赛数学建模B题思路分析

文章目录 0 赛题思路1 竞赛信息2 竞赛时间3 建模常见问题类型3.1 分类问题3.2 优化问题3.3 预测问题3.4 评价问题 4 建模资料 0 赛题思路 &#xff08;赛题出来以后第一时间在CSDN分享&#xff09; https://blog.csdn.net/dc_sinor?typeblog 1 竞赛信息 全国大学生数学建模…

【Spring Boot】夺名连环问(持续更新ing)

Spring的了解与特性 简单介绍&#xff1a;快速开发Spring项目的脚手架。简化Spring应用的初始搭建以及开发过程。 特性 提供了很多内置的Starter结合自动配置&#xff0c;对主流框架的无配置集成、开箱即用。即不需要自己去引入很多依赖。 并且管理了常用的第三方依赖的版本&…

0001nginx简介、相关模型与原理

文章目录 一. 什么是Nginx二. ngnix的一些模型1、nginx的进程模型2、worker的抢占&#xff08;锁&#xff09;机制模型3. nginx事件处理模型 三. nginx加载静态资源的过程 一. 什么是Nginx Nginx是一个高性能HTTP反向代理服务器&#xff0c;以下是nginx的相关能力 反向代理&am…

(力扣)用两个队列实现栈---C语言

分享一首歌曲吧&#xff0c;希望在枯燥的刷题生活中带给你希望和勇气&#xff0c;加油&#xff01; 题目&#xff1a; 请你仅使用两个队列实现一个后入先出&#xff08;LIFO&#xff09;的栈&#xff0c;并支持普通栈的全部四种操作&#xff08;push、top、pop 和 empty&#…

ElasticSearch单节点部署

&#x1f388; 作者&#xff1a;互联网-小啊宇 &#x1f388; 简介&#xff1a; CSDN 运维领域创作者、阿里云专家博主。目前从事 Kubernetes运维相关工作&#xff0c;擅长Linux系统运维、开源监控软件维护、Kubernetes容器技术、CI/CD持续集成、自动化运维、开源软件部署维护…

大模型在金融医疗、生命系统和物理仿真领域的创新应用探索

点击蓝字 关注我们 AI TIME欢迎每一位AI爱好者的加入&#xff01; 在当今迅速发展的科技领域&#xff0c;大模型技术正日益成为金融医疗、生命系统和物理仿真等领域中的重要工具。2023年6月16日&#xff0c;AI TIME举办的青年科学家大模型专场活动邀请了国防科技大学理学院数学…

VUE+ElementUI的表单验证二选一必填项,并且满足条件后清除表单验证提示

上代码 <el-form-item label"出库单号" prop"ecode" ref"ecode" :rules"rules.ecode"><el-input v-model"queryParams.ecode" placeholder"出库单号和出库箱号至少填写一项" clearable style"width…

【Docker】AUFS、BTRFS、ZFS、储存池详解

洁洁的个人主页 我就问你有没有发挥&#xff01; 知行合一&#xff0c;志存高远。 前言 Docker 是一个开源的应用容器引擎&#xff0c;让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux或Windows操作系统的机器上,也可以实现虚拟化,容器是…

Node.js新手在哪儿找小项目练手?

前言 可以参考一下下面的nodejs相关的项目&#xff0c;希望对你的学习有所帮助&#xff0c;废话少说&#xff0c;让我们直接进入正题>> 1、 NodeBB Star: 13.3k 一个基于Node.js的现代化社区论坛软件&#xff0c;具有快速、可扩展、易于使用和灵活的特点。它支持多种数…

CDN(Content Delivery Network)内容分发网络

从DNS域名系统到CDN内容分发网络 DNS什么是DNS直接使用DNS的缺点 CDNCDN加速过程使用CDN的优势 DNS 什么是DNS 输入域名www.baidu.com后&#xff0c;浏览器先检查缓存和本地Host文件&#xff0c;看有没有对应的ip地址&#xff0c;有则直接使用&#xff0c;没有就会向本地DNS服…

[保研/考研机试] KY109 Zero-complexity Transposition 上海交通大学复试上机题 C++实现

描述&#xff1a; You are given a sequence of integer numbers. Zero-complexity transposition of the sequence is the reverse of this sequence. Your task is to write a program that prints zero-complexity transposition of the given sequence. 输入描述&#xf…