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

news2024/12/24 3:06:14

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)

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

数据定义语言(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',  -- 设置编码列为非空、唯一、默认值为Normalproduct_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_productADD 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 ASSELECT tb_product.id,tb_product.product_code,tb_product.product_name,tb_order.id as order_id,tb_order.order_priceFROM tb_product LEFT JOIN tb_order ON tb_order.product_id = tb_product.id-- 修改视图ALTER VIEW v_product ASSELECT tb_product.id,tb_product.product_code,tb_product.product_name,tb_order.order_priceFROM 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、查询系统参数】-- 端口、目录、数据存放目录、服务器idSELECT @@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_idGROUP BY tb_order.product_id,tb_product.product_codeHAVING 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_productUNIONSELECT city FROM tb_order;-- UNION ALL,不会去重SELECT city FROM tb_productUNION ALLSELECT 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/1361300.html

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

相关文章

2023 最火的是什么? 超维计算 + 神经网络

从chatgpt开始,人工智能进步的步伐似乎势不可挡,但支撑这些程序的人工神经网络遇到了一些重大限制,其他的很难推理但是人类的大脑能够通过类比进行推理,当我们看到新事物时,我们不必生长新的神经元,我们可以…

飞凌全志T113-i开发板视频编码测试

前言 本文测试OK113i-S开发板-视频编解码的功能 OK113i-S开发板是支持视频的编解码的,下面是官方介绍的编解码功能 T113-i 是一种为多媒体解码平台设计的高级应用处理器。T113-i 集成了64位玄铁C906 RISC-V CPU, 双核 Cortex - A7 CPU 和 HiFi4 DSP&a…

Java反射篇----第三篇

系列文章目录 文章目录 系列文章目录前言一、反射使用步骤(获取 Class 对象、调用对象方法)二、获取 Class 对象有几种方法三、利用反射动态创建对象实例前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章…

所有单片机使用的汇编语言是统一的吗?

所有单片机使用的汇编语言是统一的吗? 在开始前我有一些资料,是我根据网友给的问题精心整理了一份「单片机的资料从专业入门到高级教程」, 点个关注在评论区回复“888”之后私信回复“888”,全部无偿共享给大家!&…

跑通大模型领域的 hello world

跑通书生浦语大模型的 3 个趣味 demo(InternLM-Chat-7B 智能对话、Lagent工具调用解简单数学题、浦语灵笔多模态图文创作和理解)视频和文档。 1、两个框架 InternLM 是⼀个开源的轻量级训练框架,旨在⽀持⼤模型训练⽽⽆需⼤量的依赖。 Lage…

TSINGSEE青犀智能分析网关V4在智慧园区车辆违停检测场景中的应用

一、背景与需求 园区作为企业办公、生产制造的重要场所,主要道路车辆违停等违规行为会对园区的安全造成隐患,并且在上下班高峰期内,由于发现不及时,车辆违停行为会造成出入口拥堵现象,这也成为园区管理的棘手问题。为了…

提升软件质量与效率:UI自动化测试的重要性

在软件开发领域,UI自动化测试工具被广泛应用,其意义不仅仅体现在节省时间和资源上,更关系到软件质量的提升、团队效率的增加,以及用户体验的改善。本文将探讨使用UI自动化测试工具的重要性,以及它在软件开发生命周期中…

JVM知识总结(简单且高效)

1. JVM内存与本地内存 JVM内存:受虚拟机内存大小的参数控制,当大小超过参数设置的大小时会报OOM。本地内存:本地内存不受虚拟机内存参数的限制,只受物理内存容量的限制;虽然不受参数的限制,如果所占内存超过…

C语言学习NO.13-字符函数(三)-strncpy,strncat,strncmp长度受限制的字符串函数

长度受限制的字符串函数介绍 一、strncpy函数的使用 &#xff08;一&#xff09;strncpy使用 #include <stdio.h> #include <string.h>int main() {char arr1[20] "asdfgdfv";char arr2[7] "zxcvbn";strncpy(arr1, arr2, 4);printf("…

Origin无法使用主题管理器相关功能或报错:Err, Save Theme dialog error!

问题描述 在使用origin绘图时&#xff0c;往往需要进行大批量绘制同样类型的图。如果每个图都不断地去修改相关设置&#xff0c;无疑是浪费了许多宝贵的时间。为了提高绘图效率&#xff0c;了解到了主题管理器&#xff0c;可在“工具–主题管理器”找到。 然而&#xff0c;当我…

计算机毕业设计-----SSM宠物商城带后台管理系统

项目介绍 该项目为前后台项目&#xff0c;分为普通用户与管理员两种角色&#xff0c;前台普通用户登录&#xff0c;后台管理员登录&#xff1b; 用户角色包含以下功能&#xff1a; 加入购物车,发表留言,提交订单,查看订单信息,会员注册,登录页面等功能。 管理员角色包含以下…

静态网页设计——极乐迪斯科(HTML+CSS+JavaScript)

前言 声明&#xff1a;该文章只是做技术分享&#xff0c;若侵权请联系我删除。&#xff01;&#xff01; 感谢大佬的视频&#xff1a; https://www.bilibili.com/video/BV11k4y1X7mH/?vd_source5f425e0074a7f92921f53ab87712357b 使用技术&#xff1a;HTMLCSSJS&#xff08;…

C++补充内容--EasyX-UI界面

esay x 其他 地图打印(利用二维数组) 双缓冲 当我们绘制一张图 然后另一张图盖住前一张图的某个部分的时候 由于while的存在 会导致 两张图不停的闪烁 所以加入双缓冲可以解决这个问题 开启双缓冲 之后等待Flush或者End 才会进行图片的绘制 不然不会进行图片的绘制,这样就可…

Python学习之路——文件部分【文件的读取】

目录 先解释一下引文的答案 一、open()打开函数 二、mode常用的三种基础访问模式 三、读-操作相关方法 &#xff08;一&#xff09;read方法 &#xff08;二&#xff09;readlines方法 &#xff08;三&#xff09;with open 语法 &#xff08;四&#xff09;操作汇总 …

腾讯云2核2G3M服务器够用吗?腾讯云2核2G3M云服务器性能评测

阿里云轻量应用服务器2核2G3M带宽优惠价格62元一年&#xff0c;100%CPU性能&#xff0c;3M带宽下载速度384KB/秒&#xff0c;40GB SSD系统盘&#xff0c;月流量200GB&#xff0c;折合每天6.6GB流量&#xff0c;超出月流量包的流量按照0.8元每GB的价格支付流量费&#xff0c;地域…

【c++】vector模拟

> 作者简介&#xff1a;დ旧言~&#xff0c;目前大二&#xff0c;现在学习Java&#xff0c;c&#xff0c;c&#xff0c;Python等 > 座右铭&#xff1a;松树千年终是朽&#xff0c;槿花一日自为荣。 > 目标&#xff1a;能手撕vector模拟 > 毒鸡汤&#xff1a;在等待…

PCL提示无法读取强度信息(Failed to find match for field ‘intensity‘.)简单解决方法

问题&#xff1a; 使用CC或者其他软件将las或者其他格式点云转成PCD格式后&#xff0c;然后使用PCL的库进行读取&#xff0c;有时会碰到Failed to find match for field intensity.提示&#xff0c;解决方法如下&#xff1b; 处理方法&#xff1a; 一个比较简单的方法如下&…

对比开源大语言模型的自然语言生成SQL能力

背景 NL-to-SQL&#xff08;自然语言到结构化查询语言&#xff09;任务是自然语言处理&#xff08;NLP&#xff09;领域的一个难题。 它涉及将自然语言问题转换为 SQL 查询&#xff0c;然后可以针对关系数据库执行该查询来回答问题。 该任务是 NLP 中的一个专门子领域&#xf…

C++补充内容--语法篇

这里写目录标题 语法其他语法函数的存储类函数参数默认值格式默认参数位置重载函数的默认参数 指针名与正常指针的自增自减以及解引用与的优先级问题指针的赋值、加减数字、加减指针二维数组中的一些指针辨析输出调用字符指针时 会将该指针以及之后的元素全部输出二维数组未完全…

【力扣题解】P530-二叉搜索树的最小绝对差-Java题解

&#x1f468;‍&#x1f4bb;博客主页&#xff1a;花无缺 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! 本文由 花无缺 原创 收录于专栏 【力扣题解】 文章目录 【力扣题解】P530-二叉搜索树的最小绝对差-Java题解&#x1f30f;题目描述&#x1f4a1;题解&…