软件测试基础篇——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 表名;

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

科技云报道:一波未平一波又起?AI大模型再出邪恶攻击工具

AI大模型的快速向前奔跑&#xff0c;让我们见识到了AI的无限可能&#xff0c;但也展示了AI在虚假信息、深度伪造和网络攻击方面的潜在威胁。 据安全分析平台Netenrich报道&#xff0c;近日&#xff0c;一款名为FraudGPT的AI工具近期在暗网上流通&#xff0c;并被犯罪分子用于编…

基于微信小程序的应届大学生招聘平台的设计与实现

伴随着社会以及科学技术的发展&#xff0c;互联网已经渗透在人们的身边&#xff0c;网络慢慢的变成了人们的生活必不可少的一部分&#xff0c;紧接着众多智能手机飞速的发展&#xff0c;小程序这一名词已不陌生&#xff0c;越来越多的企业、公司、高校、医院等机构都会使用小程…

C++学习笔记——从面试题出发学习C++

C学习笔记——从面试题出发学习C C学习笔记——从面试题出发学习C1. 成员函数的重写、重载和隐藏的区别&#xff1f;2. 构造函数可以是虚函数吗&#xff1f;内联函数可以是虚函数吗&#xff1f;析构函数为什么一定要是虚函数&#xff1f;3. 解释左值/右值、左值/右值引用、std:…

Clickhouse学习系列——一条SQL完成gourp by分组与不分组数值计算

笔者在近一两年接触了Clickhouse数据库&#xff0c;在项目中也进行了一些实践&#xff0c;但一直都没有一些技术文章的沉淀&#xff0c;近期打算做个系列&#xff0c;通过一些具体的场景将Clickhouse的用法进行沉淀和分享&#xff0c;供大家参考。 首先我们假设一个Clickhouse数…

EXPLAIN使用分析

系列文章目录 文章目录 系列文章目录一、type说明二、MySQL中使用Show Profile1.查看当前profiling配置2.在会话级别修改profiling配置3.查看profile记录4.要深入查看某条查询执行时间的分布 一、type说明 我们只需要注意一个最重要的type 的信息很明显的提现是否用到索引&…

单参数构造函数的隐式类型转化

单参数构造函数的隐式类型转化 如果你不想发生隐式类型的转化&#xff0c;可以在默认构造函数前加上关键字&#xff1a;explicit 多参数的玩法和单参数的是不一样的 c98 不支持多参数隐式类型的转化 c11 支持多参数隐式类型的转化 举个例子&#xff1a; 多参数可以这样写&…

考虑分布式电源的配电网无功优化问题研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

计算机视觉中的Transformer

几十年来&#xff0c;理论物理学家一直在努力提出一个宏大的统一理论。通过统一&#xff0c;指的是将被认为是完全不同的两个或多个想法结合起来&#xff0c;将它们的不同方面证明为同一基础现象。一个例子是在19世纪之前&#xff0c;电和磁被看作是无关的现象&#xff0c;但电…

SolidWorks不能使用选择如允许此选择将生成有冲突的前后关系

SolidWorks不能使用选择如允许此选择将生成有冲突的前后关系 1 SolidWorks不能使用选择如允许此选择将生成有冲突的前后关系 1 SolidWorks不能使用选择如允许此选择将生成有冲突的前后关系 https://www.swrjzxw.com/1556.html SolidWorks装配体时 显示 不能使用选择如允许此选…

CSS 中的优先级规则是怎样的?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐内联样式&#xff08;Inline Styles&#xff09;⭐ID 选择器&#xff08;ID Selectors&#xff09;⭐类选择器、属性选择器和伪类选择器&#xff08;Class, Attribute, and Pseudo-class Selectors&#xff09;⭐元素选择器和伪元素选择器…

2023.8.12号论文阅读

文章目录 TriFormer: A Multi-modal Transformer Framework For Mild Cognitive Impairment Conversion Prediction摘要本文方法实验结果 SwIPE: Efficient and Robust Medical Image Segmentation with Implicit Patch Embeddings摘要本文方法实验结果 TriFormer: A Multi-mod…

服务器安装Tomcat

下载Tomcat 下载地址在这&#xff1a; Tomcat官网 下载完成以后把压缩包上传到服务器中&#xff08;我传到了www/java&#xff09;,进行解压(解压到)&#xff0c;如果没有进行指定解压到哪里&#xff0c;默认是到root文件夹中 tar -zxvf /www/java/apache-tomcat-9.0.103.tar.…

掌握Python的X篇_32_使用python编辑pdf文件_pdfrw

本篇介绍利用python操作pdf文件&#xff0c;我们平时也会有合并和拆分pdf的需求&#xff0c;此时我们就可以使用本节内容。 文章目录 1. pdfrw的安装2. 切分pdf文件3. pdfrw官网及实现一版四面的实例 1. pdfrw的安装 pip install pdfrw官网地址&#xff1a;https://github.co…

QT之UDP通信

QT之UDP通信 UDP不分客户端口服务器,只需要使用一个类QUdpSocket QT += core gui networkgreaterThan(QT_MAJOR_VERSION, 4): QT += widgetsTARGET = udp TEMPLATE = app# The following define makes your compiler emit warnings if you use # any feature of Qt …

使用Openoffice或LibreOffice实现World、Excel、PPTX在线预览

使用Openoffice或LibreOffice实现World、Excel、PPTX在线预览 预览方案使用第三方服务使用前端库转换格式 jodconverterjodconverter概述主要特性OpenOfficeLibreOffice jodconverter的基本使用添加依赖配置创建DocumentConverter实例上传与转换预览启动上传与预览World 与Spri…

C#应用处理传入参数 - 开源研究系列文章

今天介绍关于C#的程序传入参数的处理例子。 程序的传入参数应用比较普遍&#xff0c;特别是一个随操作系统启动的程序&#xff0c;需要设置程序启动的时候不显示主窗体&#xff0c;而是在后台运行&#xff0c;于是就有了传入参数问题&#xff0c;比如传入/h或者/min等等。所以此…

配置vscode

配置vscode 设置相关 网址&#xff1a;https://code.visualstudio.com/ 搜索不要用百度用这个&#xff1a;cn.bing.com 1.安装中文包 Chinese (Simplified) (简体中文) 2.安装 open in browser 3.安装主题 Atom One Dark Theme 4. 安装图标样式 VSCode Great Icons 5.安装 L…

25. K 个一组翻转链表

25. K 个一组翻转链表 题目-困难难度示例1. 链表转列表 -> 计算 -> 列表转链表2. 反转合并 题目-困难难度 给你链表的头节点 head &#xff0c;每 k 个节点一组进行翻转&#xff0c;请你返回修改后的链表。 k 是一个正整数&#xff0c;它的值小于或等于链表的长度。如果…

Ansible Playbook快速部署一主多从MySQL集群

部署目标&#xff1a; 1、快速部署一套一主两从的mysql集群 2、部署过程中支持交互式定义安装目录及监听端口号 部署清单目录结构&#xff1a; rootmaster:/opt/mysql# tree . . ├── group_vars │ └── all.yml ├── hosts ├── mysql.yml └── roles└── mys…

WebRTC本地视频通话使用ossrs服务搭建

iOS开发-ossrs服务WebRTC本地视频通话服务搭建 之前开发中使用到了ossrs&#xff0c;这里记录一下ossrs支持的WebRTC本地服务搭建。 一、ossrs是什么&#xff1f; ossrs是什么呢&#xff1f; SRS(Simple Realtime Server)是一个简单高效的实时视频服务器&#xff0c;支持RTM…