软测百科之 日常测试工作中哪些是必须知道的 SQL 语句?

news2025/1/12 16:14:18

SQL 简介

  • SQL(Structured Query Language,结构化查询语言)是一套用于管理关系数据库管理系统(RDBMS),基于 ANSI(American National Standards

    Institute 美国国家标准化组织)标准的计算机语言,比较重要的版本是 SQL92

  • 除了支持标准的 SQL,各数据库产品厂商都有基于自己产品特性的 SQL 语言扩展,扩展部分相互之间并不兼容

  • 标准的 SQL 将针对数据进行操作的语句进行了分类,包括

    数据定义语言(DDL,Data Definition Language)

    数据操作语言(DML,Data Manipulation Language)

    数据查询语言(DQL: Data Query Language)

    数据控制语言(DCL,Data Control Language)

    事务控制语言(TCL,Transaction Control Language)

    指针控制语言(CCL,Cursor Control Language)

通过上述的语言,基本可以完成一个关系型数据库的基本操作,大部分需要掌握

 如果你想学习自动化测试,我这边给你推荐一套视频,这个视频可以说是B站播放全网第一的接口自动化测试教程,同时在线人数到达1000人,并且还有笔记可以领取及各路大神技术交流:798478386  

【已更新】B站讲的最详细的Python接口自动化测试实战教程全集(实战最新版)_哔哩哔哩_bilibili【已更新】B站讲的最详细的Python接口自动化测试实战教程全集(实战最新版)共计200条视频,包括:1.【接口自动化】目前软件测试的市场行情以及测试人员能力标准。、2.【接口自动化】全面熟练Requests库以及底层方法调用逻辑、3.【接口自动化】接口自动化实战及正则和JsonPath提取器的应用等,UP主更多精彩视频,请关注UP账号。https://www.bilibili.com/video/BV17p4y1B77x/?spm_id_from=333.337&vd_source=488d25e59e6c5b111f7a1a1a16ecbe9a

数据定义语言(DDL)

  • 主要负责数据库、数据表、视图、键、索引等结构化的操作

  • 常用的语句有:CREATE DATABASE、CREATE TABLE、ALTER TABLE 等

  • 字段的常用约束有:PRIMARY KEY、FOREIGN KEY、NOT NULL、UNIQUE、AUTO_INCREMENT、DEFAULT

  • 常用的数据定义语言示例如下


-- 【1、数据库操作】
-- 创建数据库
-- 字符集:字符串存储方式;DEFAULT CHARACTER SET定义字符集,mb4就是most bytes 4的意思,兼容Emoji
-- 校对规则:字符串比较方式;COLLATE定义校对规则,general表示遗留的校对规则,不可扩展,但效率高,ci(case insensitive)表示大小写不敏感
-- 字符集和校对规则都有4个级别的设置:服务器级、数据库级、数据表级、字段级
CREATE DATABASE IF NOT EXISTS db_demo DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; 
-- 删除数据库
DROP DATABASE db_demo;
-- 切换当前数据库
USE db_demo;
-- 【2、数据表操作】可以对数据表中的字段加上相应约束,常用的约束有:PRIMARY KEY、FOREIGN KEY、NOT NULL、UNIQUE、AUTO_INCREMENT、DEFAULT
-- 示例操作产品表
DROP TABLE IF EXISTS tb_product;
CREATE TABLE tb_product
(
id INT  NOT NULL AUTO_INCREMENT,  -- 设置id列为非空、自增
product_code CHAR(200) NOT NULL UNIQUE DEFAULT 'Normal',  -- 设置编码列为非空、唯一、默认值为Normal
product_name VARCHAR(50) NOT NULL,
quantity INT(3) DEFAULT 0,
price DECIMAL(6,2),
address VARCHAR(50),
remark VARCHAR(500),
PRIMARY KEY (id),-- 指定主键列
  INDEX idx_product_name (product_name)-- 定义索引
);
-- 示例操作产品表
DROP TABLE IF EXISTS tb_order;
CREATE TABLE tb_order
(
id INT(10)  NOT NULL AUTO_INCREMENT,  -- 设置id列为非空、自增
order_price DECIMAL(6,2),
city VARCHAR(50),
remark VARCHAR(500),
product_id INT(10),
PRIMARY KEY (id),-- 指定主键列
FOREIGN KEY (product_id) REFERENCES tb_product(id)  -- 指定外键id
);
-- 修改数据表
ALTER TABLE tb_product
ADD COLUMN description VARCHAR(2000), -- 添加列
MODIFY COLUMN product_name VARCHAR(200) NULL,-- 修改列
DROP COLUMN remark,  -- 删除列
CHANGE address city VARCHAR(20),   -- 重命名字段
ADD INDEX idx_product_code (product_code),-- 添加索引
DROP INDEX idx_product_name;-- 移除索引
-- 删除数据表
DROP TABLE tb_product;
DROP TABLE tb_order;
-- 【3、视图操作】广泛应用于报表操作
-- 创建视图
CREATE VIEW v_product AS
SELECT tb_product.id,tb_product.product_code,tb_product.product_name,tb_order.id as order_id,tb_order.order_price
FROM tb_product LEFT JOIN tb_order ON tb_order.product_id = tb_product.id
-- 修改视图
ALTER VIEW v_product AS
SELECT tb_product.id,tb_product.product_code,tb_product.product_name,tb_order.order_price
FROM tb_product LEFT JOIN tb_order ON tb_order.product_id = tb_product.id
-- 删除视图
DROP VIEW v_product

数据操作语言(DML)

  • 主要负责数据表数据的新增、修改、删除操作

  • 常用的语句有:INSERT INTO、UPDATE、DELETE 等

  • 注意:修改和删除操作时注意添加 WHERE 条件

  • 常用的数据操作语言示例如下


-- 新增数据,字段顺序、数据顺序一定要一致;非空列一定要有;类型也要匹配
INSERT INTO tb_product(product_code,product_name,quantity,price,city,description)
VALUES('tv','电视机',150,43.27,'长沙','这是一台计算机。');
INSERT INTO tb_product(product_code,product_name,quantity,price,city,description)
VALUES('iPhone','苹果手机',100,8999,'北京','这是一台苹果手机。');
INSERT INTO tb_product(product_code,product_name,quantity,price,city,description)
VALUES('xiaomi','小米手机',13,2999,'上海','这是一台小米手机。');
INSERT INTO tb_product(product_code,product_name,quantity,price,city,description)
VALUES('oppo','欧泊手机',70,2499,'广州','这是一台欧泊手机。');
INSERT INTO tb_product(product_code,product_name,quantity,price,city,description)
VALUES('vivo','维沃手机',98,2199,'深圳','这是一台维沃手机。');
INSERT INTO tb_product(product_code,product_name,quantity,price,city,description)
VALUES('tt','锤子手机',NULL,NULL,'上海','这是一台锤子手机。');


INSERT INTO tb_order(order_price,city,remark,product_id) VALUES(7999,'天津','一次愉快的购买。',1);
INSERT INTO tb_order(order_price,city,remark,product_id) VALUES(1555,'长沙','一次愉快的购买。',2);
INSERT INTO tb_order(order_price,city,remark,product_id) VALUES(2800,'重庆','一次不愉快的购买。',4);
INSERT INTO tb_order(order_price,city,remark,product_id) VALUES(1200,'杭州','重复购买。',4);
INSERT INTO tb_order(order_price,city,remark,product_id) VALUES(1200,'武汉','下次再买。',5);


select * from tb_product;
select * 
-- 修改数据
UPDATE tb_product SET description = CONCAT(description,'特价甩卖...');
UPDATE tb_product SET description = CONCAT(description,'低到1块...') WHERE product_code='xiaomi';


-- 删除数据
DELETE FROM tb_product WHERE product_code='xiaomi';


-- 删除全表数据
DELETE FROM tb_order;
DELETE FROM tb_product;
TRUNCATE TABLE tb_product;

 

数据查询语言(DQL)

  • 主要负责数据表数据的查询操作

  • 常用的语句有:SELECT,查询操作在 SQL 中使用非常多,还有一些复杂的如排序、多表查询、分组等处理

  • 常用的数据查询语言示例如


-- 【1、查询系统参数】
-- 端口、目录、数据存放目录、服务器id
SELECT @@port,@@basedir,@@datadir,@@server_id;


-- 【2、查询常用函数】
SELECT NOW(),USER(),CONCAT('同志们,','大家好!','欢迎光临。') AS welcome;


-- 【3、查询条件】
-- 查询所有
SELECT * FROM tb_product;
-- 按条件查询,可以使用运算符进行操作
SELECT * FROM tb_product WHERE product_code ='iPhone';
SELECT * FROM tb_product WHERE product_code like '%i%';
SELECT * FROM tb_product WHERE quantity BETWEEN 50 AND 100;
SELECT * FROM tb_product WHERE quantity IS NOT NULL;
SELECT * FROM tb_product WHERE product_code in ('tt','xiaomi');


-- 【4、排序】
SELECT * FROM tb_product ORDER BY price DESC;
SELECT * FROM tb_product ORDER BY product_code DESC;


-- 【5、多表联合查询】
-- 左连接
SELECT * FROM tb_product LEFT JOIN tb_order ON tb_order.product_id = tb_product.id;
-- 右连接
SELECT * FROM tb_product RIGHT JOIN tb_order ON tb_order.product_id = tb_product.id;
-- 完全连接
SELECT * FROM tb_product JOIN tb_order ON tb_order.product_id = tb_product.id;
-- 笛卡尔积连接
SELECT * FROM tb_product,tb_order;


-- 【6、分组】
SELECT tb_order.product_id,tb_product.product_code,COUNT(1),SUM(tb_order.order_price),AVG(tb_order.order_price)
FROM tb_order LEFT JOIN tb_product on tb_product.id = tb_order.product_id
GROUP BY tb_order.product_id,tb_product.product_code
HAVING COUNT(1)>1


-- 【7、分页】
SELECT * FROM tb_product;
SELECT * FROM tb_product LIMIT 2,2;  -- 起始、条数
SELECT * FROM tb_product ORDER BY product_code LIMIT 3 OFFSET 2 ;  -- 条数、偏移量


-- 【8、UNION】
-- UNION,会去重
SELECT city FROM tb_product
UNION
SELECT city FROM tb_order;
-- UNION ALL,不会去重
SELECT city FROM tb_product
UNION ALL
SELECT city FROM tb_order;

数据控制语言(DCL)

  • 主要负责用户创建、授权、权限回收操作,一般主要由 DBA 来操作

  • 常用的语句有:CREATE USER、GRANT、REVOKE 等

  • 常用的数据控制语言示例如下

-- 创建用户,localhost:只允许从本地ip访问;%:允许从所有的ip访问
CREATE USER 'a1'@'%' IDENTIFIED BY 'Password^';
-- 用户授权,权限可以包括、insert、update、delete、references、create、alter、drop、create view、execute等,多个用逗号分隔
-- 尾部添加WITH GRANT OPTION,可让被授权者也能将这个权限授予其他人
GRANT ALL PRIVILEGES ON  db_demo.* TO 'a1'@'%' IDENTIFIED BY 'Password^';  -- 所有权限
-- GRANT SELECT ON  db_demo.* TO 'a1'@'%' IDENTIFIED BY 'Password^';   -- 只有查询权限
-- 回收权限
REVOKE INSERT ON db_demo.* from 'a1'@'%';  -- 回收新增权限
-- 删除用户
DROP USER 'a1'@'%';


-- 刷新权限,配置完后都要刷新
FLUSH PRIVILEGES;


-- 查询表中数据
select * from mysql.user


-- 查看用户权限
SHOW GRANTS FOR 'a1'@'%'

事务控制语言(TCL)

  • 主要负责用多条语句形成原子性的事务操作

  • 常用的语句有:SET AUTOCOMMIT、ROLLBACK、COMMIT、SAVEPOINT 等

  • 常用的事务控制语言示例如下


-- 【方式1】
-- 开启显式事务
SET AUTOCOMMIT = 0;
-- 查看数据
SELECT * FROM tb_product;
-- 插入一条数据
INSERT INTO  tb_product(product_code,product_name,quantity,price,description) 
VALUES('c10','n10',50,1523.58,'d10'); 
-- DDL,会默认提交事务
-- create table tb_demo
-- (
--   id INT,
--   name VARCHAR(20)
-- );
-- 查看数据
SELECT * FROM tb_product; 
-- 回滚显示事务
ROLLBACK;
-- 提交事务
COMMIT;
-- 查看数据
SELECT * FROM tb_product;  
-- 关闭显式事务
SET AUTOCOMMIT = 1;


-- 【方式2】
-- 开启事务
START TRANSACTION;
-- 查看数据
SELECT * FROM tb_product; 
-- 插入一条数据
INSERT INTO  tb_product(product_code,product_name,quantity,price,description) 
VALUES('z1','z1',40,1223.58,'z1'); 
-- 查看数据
SELECT * FROM tb_product; 
-- 设置回滚点
SAVEPOINT my_point;
-- 插入另一条数据
INSERT INTO  tb_product(product_code,product_name,quantity,price,description) 
VALUES('z9','z9',40,1223.58,'z9');
-- 查看数据
SELECT * FROM tb_product; 
-- 回滚全部
-- ROLLBACK;
-- 回滚到回滚点
ROLLBACK TO my_point;
-- 查看数据
SELECT * FROM tb_product; 
-- 提交结束事务
COMMIT;

指针控制语言(CCL)

  • 主要负责用于数据遍历的操作

  • 常用的语句有:DECLARE…CURSOR…、OPEN、FETCH…INTO…、CLOSE 等

  • 常用的指针控制语言示例如下


-- 创建存储过程
-- 业务逻辑:取给定最小价格以上的产品总数
CREATE PROCEDURE my_proc(IN min_price DECIMAL(7,2),OUT quantity_total INT)
BEGIN
  -- 设置游标变量
  DECLARE _id INT;
  DECLARE _product_code VARCHAR(100);
  DECLARE _product_name VARCHAR(200);
  DECLARE _quantity INT;
  DECLARE _price DECIMAL(7,2);
  DECLARE _description VARCHAR(2000);
  -- 设置汇总数量
  DECLARE total INT DEFAULT 0;
  -- 标记默认为0
  DECLARE done INT DEFAULT 0; 
  -- 【1、定义游标】
  DECLARE cursor_product CURSOR FOR SELECT id,product_code,product_name,quantity,price,description FROM tb_product WHERE price > min_price;


--   #游标取完后的标志变量设置为1
   DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1 ;


  -- 【2、打开游标】
  OPEN cursor_product;


  -- 【3、读取游标】取下一行
  FETCH cursor_product INTO _id,_product_code,_product_name,_quantity,_price,_description;




  -- 循环
  WHILE done !=1 DO
      SET total = total + _quantity;
      -- 【3、读取游标】取下一行
      FETCH cursor_product INTO _id,_product_code,_product_name,_quantity,_price,_description;
  END WHILE;


  -- 输出汇总
  -- SELECT total;


  SET quantity_total = total;


  -- 【4、关闭游标】
  CLOSE cursor_product;
END;


-- 调用
CALL my_proc(35,@total);
select @total;

总结

  • SQL 语言标准中,定义了很多的语句、关键字、函数等

  • 在日常的测试工作中,并不会都使用,掌握常用的基础语句即可,慢慢再扩展一些组合查询等复杂查询语句

  • 在上述的 6 种 SQL 语句分类中,一般只要熟悉并控制数据定义语言(DDL)、数据操作语言(DML)、数据查询语言(DQL)

     

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

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

相关文章

Nginx:网站服务

目录 绪论 1、nginx的主要功能 1.1 静态文件服务 1.2 反向代理 1.3 处理动态内容 1.4 实现SSL和TLS加密 1.5 虚拟主机 1.6 URL重定向 1.7 缓存功能 1.8 日志功能 2、nginx如何实现高并发 3、同步,异步,阻塞,非阻塞的概念补充 4、…

安卓源码分析(10)Lifecycle实现组件生命周期管理

参考: https://developer.android.google.cn/topic/libraries/architecture/lifecycle?hlzh-cn#java https://developer.android.google.cn/reference/androidx/lifecycle/Lifecycle 文章目录 1、概述2、LifeCycle类3、LifecycleOwner类4、LifecycleObserver类 1、…

二、Qt的安装(Linux系统下安装Qt6过程)

一、Qt资源下载网址 网址:点击下载http://download.qt.io/ 下载:点击下载(CSDN) 二、下载二进制安装包 进入Qt资源下载网址,进入对应的资源目录,找对应系统平台的二进制安装包选择进行下载,在这这里我们选择Linux下的二…

MobaXterm

MobaXterm 简介下载安装 简介 MobaXterm 是一个功能强大的远程计算机管理工具,它集成了多种网络工具和命令行工具,用于在 Windows 系统上轻松进行远程访问、文件传输、X11 服务器和终端模拟等任务。MobaXterm 提供了一个集成的环境,使系统管…

【C# 基础精讲】继承、封装、多态

继承(Inheritance)、封装(Encapsulation)和多态(Polymorphism)是面向对象编程中的三大核心概念,它们构成了面向对象编程的基础,有助于创建更加模块化、可扩展和可维护的代码。这三个…

SpringBoot系列之基于Jersey实现文件上传API

前言 JAX-RS:JAX-RS是可以用可以用于实现RESTFul应用程序的JAVA API,给开发者提供了一系列的RESTFul注解Jersey:是基于JAX-RX API的实现框架,用于实现RESTful Web 服务的开源框架。 JAX-RX常用的注解: javax.ws.rs.Pa…

链表OJ详解

题目一: 题目要求: 画图分析: 代码实现: struct ListNode* removeElements(struct ListNode* head, int val){struct ListNode*prev NULL,*cur head;//遍历while(cur){if(cur->val val)//相等{if(cur head)//头删{head…

ubuntu22.04+cuda11.5+gcc11.4第一个cuda程序示例

VisualStudio 2019是微软的集成开发环境(IDE),通常在Windows操作系统上使用。然而,并不直接支持在Linux上安装。如果想在Ubuntu上进行开发,可以考虑以下几个选项: 使用替代的IDE或文本编辑器: Ubuntu上有许多适用于C等编程语言的开发工具&…

【必看】时序逻辑仿真成组合逻辑?你知道原因吗?

对于初学者,一般会遇到这种情况,明明写的时序逻辑,结果仿真结果却是组合逻辑,然后看遍设计代码,始终找不到原因,交流群、知乎这种问题随处可见。但不要怀疑软件问题,modelsim这些专用软件基本不…

【100天精通python】Day33:使用python操作数据库_SQLite数据库的使用与实战

目录 专栏导读 1 SQLite 简介 2 SQLite数据库安装及使用 2.1 检查 SQLite 支持 2.2 创建数据库文件 2.2.1 使用 Python 创建数据库文件: 2.2.2 使用命令行创建数据库文件: 2.3 连接到 SQLite 数据库: 3 SQLite 中常用的SQL语句…

WebRTC音视频通话-实现iOS端调用ossrs视频通话服务

WebRTC音视频通话-实现iOS端调用ossrs视频通话服务 之前搭建ossrs服务,可以查看:https://blog.csdn.net/gloryFlow/article/details/132257196 这里iOS端使用GoogleWebRTC联调ossrs实现视频通话功能。 一、iOS端调用ossrs视频通话效果图 iOS端端效果图…

HTML详解连载(7)

HTML详解连载(7) 专栏链接 [link](http://t.csdn.cn/xF0H3)下面进行专栏介绍 开始喽结构伪类选择器作用 :nth-child(公式)作用举例 伪元素选择器作用注意: PxCoook作用盒子模型-重要组成部分 盒子模型-边框线属性名属性…

Java-运算符和控制语句(上)(基于c语言的补充)

算术运算符 关于求余 不管分子,分母是正还是负,对于分母,直接取正;对于分子若有负号,则先提取出来;剩下两个正的分子分母运算;最后,若刚才的分子有负号,对最后的结果添加…

fork:创建一个子进程

函数原型:pid_t fork(void); 返回值: 成功:返回子进程id给附近父进程,返回0给子进程 失败:返回-1,并且设置错误号,同时子进程不会被创建 注意&#xff1…

C++ QT(一)

目录 初识QtQt 是什么Qt 能做什么Qt/C与QML 如何选择Qt 版本Windows 下安装QtLinux 下安装Qt安装Qt配置Qt Creator 输入中文配置Ubuntu 中文环境配置中文输入法 Qt Creator 简单使用Qt Creator 界面组成Qt Creator 设置 第一个Qt 程序新建一个项目项目文件介绍项目文件*.pro样式…

锁与原子操作的底层原理

偏向锁 在一个系统当中,大部分时间都不存在并发问题,但频繁的加锁释放锁又会占用大量系统资源。因此为了让线程获得锁的代价更低而引入了偏向锁。 获得偏向锁 1)检查该锁是否被当前线程持有 2)通过CAS操作修改对象头 3&#…

python环境下载安装教程,python运行环境怎么下载

本篇文章给大家谈谈python安装步骤以及环境变量配置,以及下载python需要设置环境变量吗,希望对各位有所帮助,不要忘了收藏本站喔。 1.https://www.python.org/downloads/windows/ 下载适合自己电脑的python安装包 2.下载后安装即可 3.配置环…

Vue中如何更好地封装组件?

子组件接受父组件传递的事件 1.子组件使用事件名"$emit(父组件中传递的事件名,想给父组件传递的参数(可选))" click"$emit(click)" 2.子组件使用 v-on"$listeners" 父组件&#xff1a; <template><div id"app"><myCo…

Ceph分布式存储系统优化分析

Ceph支持多种存储访问接口&#xff0c;现有的多种性能测试工具都可用于Ceph的性能测试&#xff0c;如测试块接口性能的fio&#xff0c;iometer等&#xff1b;测试CephFS接口的filebench&#xff0c;fio等;测试对象接口的cosbench等。Ceph有专用的基准测试集CBT&#xff0c;其包…