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

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)

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

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

相关文章

Redis小计(4)

目录 1.Set和Get操作 2.mset和mget 3.mset,mget,set后加参数的优点 4.incr,incrby,incrbyfloat 1.Set和Get操作 flushall:清除所有k-v键值对。(删库跑路小技巧) set k v[ex | px]:设置超时…

Spring Beans的魔法门:解密多种配置方式【beans 四】

欢迎来到我的博客,代码的世界里,每一行都是一个故事 Spring Beans的魔法门:解密多种配置方式【beans 四】 前言XML配置方式1. 声明和配置Bean:2. 构造函数注入:3. 导入其他配置文件: java注解方式1. 使用Co…

Vue2 - computed 和 method 的原理区别

目录 1,简单对比2,原理的不同1,method 的处理2,computed 的处理实现缓存触发更新 3,触发更新时的问题 1,简单对比 computed 当做属性使用,method 当做方法使用。computed 可以提供 getter 和 s…

spring模块(二)IOC容器之BeanFactory

在Spring中实现控制反转的是IoC容器 (1)IoC 不是一种技术,只是一种思想,一个重要的面向对象编程的法则,它能指导我们如何设计出松耦合、更优良的程序。传统应用程序都是由我们在类内部主动创建依赖对象,从…

Spring Boot Admin健康检查引起的Spring Boot服务假死

问题现象 最近在spring boot项目中引入了 spring-boot-starter-actuator 后,测试环境开始出现服务假死的现象, 且这个问题十分怪异,只在多个微服务中的简称A的这个服务中出现,其他服务都没有出现这个问题, 之所以说…

爬取彼案壁纸

代码展现: 具体代码: import requests import re import os filename 壁纸\\ if not os.path.exists(filename): os.mkdir(filename) for i in range(2,11): url fhttp://www.netbian.com/index_{i}.htm headers {User-Agent: …

iOS实时查看App运行日志

目录 一、设备连接 二、使用克魔助手查看日志 三、过滤我们自己App的日志 📝 摘要: 本文介绍了如何在iOS iPhone设备上实时查看输出在console控制台的日志。通过克魔助手工具,我们可以连接手机并方便地筛选我们自己App的日志。 &#x1f4…

CMake支持的编译平台和IDE

😈「CSDN主页」:传送门 😈「Bilibil首页」:传送门 😈「本文的内容」:CMake入门教程 😈「动动你的小手」:点赞👍收藏⭐️评论📝 文章目录 简介支持的IDEVisual…

vue3 鲜为人知的知识点

该篇文章是个人觉得在平常开发过程中没怎么注意到&#xff08;新增加&#xff09;的知识点&#xff0c;每个章节的内容在官网中不只文章提到的这些。 &#x1f495; 模板语法 ✔ 动态参数 <script setup> import { ref } from vueconst attributeName ref(msg) const …

[JavaWeb玩耍日记] 数据库

mysql版本&#xff1a;5.7.24 使用Navicat for MySQL辅助学习(2015年版)&#xff0c;这个在粘贴本博客的块引用内容时会有额外的不可见内容导致sql运行出问题&#xff0c;不过有影响的地方笔者已排除 目录 一.数据库创建 二.使用数据库与创建表 三.表内列的数据类型 四.修…

解决Android Studio The path ‘X:\XXX‘ does not belong to a directory.

目录 前言 一、问题描述 二、解决方法 前言 在移动应用开发领域&#xff0c;Android Studio作为一款功能强大的集成开发环境&#xff0c;为开发人员提供了丰富的工具和功能。然而&#xff0c;在使用Android Studio的过程中&#xff0c;有时也会遇到各种各样的问题和错误。 &…

SpringCloud微服务

微服务技术对比 DubboSpringCloudSpringCloudAlibaba注册中心zookeeper,RedisEureka、ConsulNacos、Eureka服务远程调用Dubbo协议Feign(http协议)Dubbo、Feign配置中心无SpringCloudConfigSpringCloudConfig,Nacos服务网关无SpringCloudGateway、ZuulSpringCloudGateway、Zuul…

西门子PLC联网数据采集:借助HiWoo Box实现高效监控与管理

在工业自动化领域&#xff0c;西门子PLC作为一种广泛应用的控制器&#xff0c;对于工厂的生产线具有至关重要的作用。如何实现西门子PLC的联网数据采集&#xff0c;提高生产效率和管理水平&#xff0c;成为了许多企业的关注焦点。而HiWoo Box作为一款功能强大的工业网关&#x…

STM32-03-STM32HAL库

文章目录 STM32HAL库1. HAL库介绍2. STM32Cube固件包3. HAL库框架结构4. 新建HAL版本MDK工程 STM32HAL库 1. HAL库介绍 HAL库 HAL&#xff0c;英文全称 Hardware Abstraction Layer&#xff0c;即硬件抽象层。HAL库是ST公司提供的外设驱动代码的驱动库&#xff0c;用户只需要调…

数字孪生在增强现实(AR)中的应用

数字孪生在增强现实&#xff08;Augmented Reality&#xff0c;AR&#xff09;中的应用可以提供更丰富、交互性更强的现实世界增强体验。以下是数字孪生在AR中的一些应用&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff…

性能优化-OpenMP概述(一)-宏观全面理解OpenMP

本文旨在从宏观角度来介绍OpenMP的原理、编程模型、以及在各个领域的应用、使用、希望读者能够从本文整体上了解OpenMP。 &#x1f3ac;个人简介&#xff1a;一个全栈工程师的升级之路&#xff01; &#x1f4cb;个人专栏&#xff1a;高性能&#xff08;HPC&#xff09;开发基础…

添加jdk 11到环境变量的一种方法

添加jdk 11到环境变量的一种方法 1.jdk11可以直接在android studio 中下载&#xff0c; File --> Settings --> Build, Execution, Deployment --> Build Tools --> Gradle 下载jdk 11 &#xff0c;确认好下载路径 2.jdk11 添加到环境变量添加到环境变量 多个…

【AI视野·今日NLP 自然语言处理论文速览 第六十六期】Tue, 31 Oct 2023

AI视野今日CS.NLP 自然语言处理论文速览 Tue, 31 Oct 2023 (showing first 100 of 141 entries) Totally 100 papers &#x1f449;上期速览✈更多精彩请移步主页 Daily Computation and Language Papers The Eval4NLP 2023 Shared Task on Prompting Large Language Models a…

日程安排小程序实战教程

日常中我们经常有一些事情需要提醒自己&#xff0c;使用日历的形式比较符合实际的使用习惯。本篇我们就利用微搭低代码工具带着大家开发一款日程安排的小程序。 1 创建数据源 登录微搭低代码控制台&#xff0c;打开数据模型&#xff0c;点击创建 输入数据源的名称日程安排 …

Erupt即开即用的后台管理系统【告别前端代码】

一、引子 【零前端代码&#xff0c;几行Java注解&#xff0c;搞定后台管理系统】 如果只是自己内部公司使用的话&#xff0c;大多数功能都可以满足&#xff0c;剩下的就是自己添砖加瓦了。 我用这个主要是简单快捷&#xff0c;10分钟搭建一个简易的后台管理系统。 二、基本…