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

本文详细介绍了SQL(结构化查询语言),包括其分类(DDL、DML、DQL、TCL、CCL)、常用语句和操作示例,强调掌握基础的DDL、DML和DQL是日常工作的重点。

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',  -- 设置编码列为非空、唯一、默认值为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)

你对哪些SQL语句熟悉呢

当前,全球经济格局深刻调整,数字化浪潮席卷各行各业,智能物流作为现代物流发展的必然趋势和关键支撑,正迎来前所未有的发展机遇。以人工智能、物联网、大数据、云计算、区块链等前沿信息技术的快速迭代与深度融合为驱动,智能物流不再是传统物流的简单技术叠加,而是正在经历一场从自动化向智能化、从被动响应向主动预测、从信息孤岛向全面互联的深刻变革。展望2025年,智能物流系统将不再局限于提升效率、降低成本的基本目标,而是要构建一个感知更全面、决策更精准、执行更高效、协同更顺畅的智慧运行体系。这要求我们必须超越传统思维定式,以系统化、前瞻性的视角,全面规划和实施智能物流系统的建设。本实施方案正是基于对行业发展趋势的深刻洞察和对未来需求的精准把握而制定。我们的核心目标在于:通过构建一个集成了先进感知技术、大数据分析引擎、智能决策算法和高效协同平台的综合智能物流系统,实现物流全链路的可视化、透明化和智能化管理。这不仅是技术层面的革新,更是管理模式和服务能力的全面提升。本方案旨在明确系统建设的战略方向、关键任务、技术路径和实施步骤,确保通过系统化部署,有效应对日益复杂的供应链环境,提升整体物流韧性,优化资源配置效率,降低运营成本,并最终为客户创造更卓越的价值体验。我们致力于通过本方案的实施,引领智能物流迈向更高平,为构建现代化经济体系、推动高质量发展提供强有力的物流保障。
电源题电赛单相并网离网软件硬件锁相环单极性双极性调制等代码及仿真环路计算资料+原理图PCB内容概要:本文档是一份关于电力电子与能源系统仿真研究的技术资料集合,涵盖单相并网/离网系统、软件与硬件锁相环设计、单极性与双极性调制技术、虚拟同步机控制建模、P2G-CCS耦合系统、微电网优化调度、光伏风电联合运行、储能配置及需求响应等多个电力系统核心主题。文档提供了大量基于Matlab/Simulink的代码实现与仿真模型,包括LLC谐振变换器小信号分析、永磁同步电机控制、DC-AC变换器设计、光伏阵列故障仿真、直流微电网建模等,并附有原理图与PCB设计资源。同时整合了智能优化算法(如遗传算法、粒子群、灰狼优化器)、机器学习模型(如LSTM、CNN-GRU-Attention)在负荷预测、故障诊断、路径规划等领域的应用案例,形成一个跨学科的科研资源包。; 适合人群:电气工程、自动化、能源系统及相关专业的研究生、科研人员以及从事电力电子、微电网、新能源控制方向的工程师;具备Matlab/Simulink编程基础和一定电力系统理论知识者更佳。; 使用场景及目标:① 支持电赛或科研项目中对并网逆变器、锁相环、调制策略的设计与验证;② 用于复现高平论文(如EI/SCI)中的优化调度、控制算法与仿真模型;③ 辅助开展微电网能量管理、储能配置、需求响应策略等课题的研究与代码开发;④ 提供可直接调用的算法模板与仿真平台,提升科研效率。; 阅读建议:建议按照文档结构逐步浏览,优先下载并整理网盘中的完整资源包,结合具体研究方向选取对应代码与模型进行调试与二次开发;对于复杂算法(如NSGA-II、ADMM、MPC),应配合文献理解其数学原理后再实施仿真;关注其中“论文复现”类内容以提升学术研究规范性与技术深度。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值