常用SQL命令

应用经常需要处理用户的数据,并将用户的数据保存到指定位置,数据库是常用的数据存储工具,数据库是结构化信息或数据的有序集合,几乎所有的关系数据库都使用 SQL 编程语言来查询、操作和定义数据,进行数据访问控制,作为测试人员,掌握SQL语言是必要的。

我们一般对数据库的数据表进行增删改查的操作,以下是一些常用的SQL命令。

数据表增加数据

我们可以通过insert into语句向表中插入新记录

使用该命令有2种方式:

命令形式 描述
INSERT INTO table_name VALUES (value1,value2,value3,...),(value1_2,value2_2,value3_2,...),...,(value1_n,value2_n,value3_n,...); 无需指定要插入数据的列名,只需提供被插入的值即可,但需要注意,被插入的表中有多少个字段(即列),则值就必须有多少个,且需要按照表字段排序进行赋值
INSERT INTO table_name (column1,column2,column3,...) VALUES (value1,value2,value3,...),(value1_2,value2_2,value3_2,...),...,(value1_n,value2_n,value3_n,...); 需要指定列名及被插入的值 ,column与value一一对应,即column1=value1,column2=value2

数据表删除数据

可以用DELETE命令删除指定的数据(工作中慎用,即使使用,必须检查where语句是否正确)

命令:DELETE FROM table_name WHERE xxx;

数据表修改数据

如果需要修改表中一些数据,可以使用UPDATE命令

SQL 复制代码
UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE condition;

数据表查询数据

数据表操作最多的就是查询了,即SELECT语句,

命令形式 描述
SELECT column1, column2, ... FROM table_name [where xxx]; 查询table_name表符合xxx条件的数据的指定字段值
SELECT * FROM table_name [where xxx]; 查询table_name表符合xxx条件的数据的所有字段值

函数

SELECT语句中,经常会用一些函数对数据进行统计,常用函数如下:

函数 说明
COUNT() 返回符合条件的数据量
MAX() 返回最大值
MIN() 返回最小值
DISTINCT() 在表中,一个列可能会包含多个重复值,该函数返回所在列去重后的所有值
ROUND() 把数值字段四舍五入入为指定的小数位数
COUNT()

COUNT(column_name) 函数返回指定列的值的数目(NULL 不计入)

函数 说明
SELECT COUNT(*) FROM table_name[where xxx]; 返回表中符合where条件的数据的总量
SELECT COUNT(column_name) FROM table_name[where xxx]; 返回表中符合where条件的,且列column_name的值不为NULL的总量,类似于 SELECT COUNT(*) FROM table_name where column_name is not NULL[ and xxx];
SELECT COUNT(condition) FROM table_name[where xxx]; 返回表中符合where条件,且满足condition!=null的数据量
SELECT COUNT(condition or NULL) FROM table_name[where xxx]; 返回表中符合where条件,且满足condition的数据量
COUNT(*)和COUNT(column_name)
COUNT(condition)

前面说了,COUNT()函数是统计指定条件不为NULL的数据,所以对于SELECT COUNT(condition) FROM table_name[where xxx];语句,只要符合where条件的数据,在condition不为NULL,就会被统计进去,有几种比较常用的用法

我们有时会碰到COUNT(数字)的用法,因为统计指定条件不为NULL的数据,而数字肯定不是NULL,所以COUNT(数字)相当于统计符合where条件的数据量

另一种就是条件表达式,我们需要统计的数据量除了要符合where条件外,还需要符合指定条件

如下图所示,在COUNT()函数里加上了条件表达式,但是条件表达式需要注意的一点是:COUNT()函数是根据值是否为NULL去统计的,所以条件表达式要根据结果为NULL去判断,即如果条件表达式得到的结果是true或false,对于COUNT()函数来说,都是可统计的,因为true和false都不是NULL,所以如果需要统计符合条件的,可以在条件表达式后加上or NULL,如果前面的条件表达式为true时,不会走后面为NULL的设置,如果为false时,则会走后面为NULL的设置

注意:可能有人会有疑问,如果还需要符合指定条件,为什么不在where条件中加上,而是在count()函数中指定?因为有些查询可能比较复杂,比如需要从不同的维度去查询的时候,where条件会将数据范围固定在某些条件中,count()则可以在指定的符合where条件的数据范围中去统计不同维度的数据,具体按照实际需要去使用即可,如下:

如统计男性中grade>20和grade<=20的数据量

MAX()和MIN()
命令 使用说明
SELECT MAX(column_name) FROM table_name[where xxx]; 传入的是列名,结果是返回指定列的最大值
SELECT MIN(column_name) FROM table_name[where xxx]; 传入的是列名,结果是返回指定列的最小值
DISTINCT()

命令行:SELECT DISTINCT column1, column2, ... FROM table_name[ where xxx];

描述:将column1, column2, ...等字段值均不重复的数据返回(即去重)

有时候DISTINCT()函数会和其他函数如COUNT()、SUM()一起使用

ROUND()

命令:SELECT ROUND(column_name,decimals) FROM TABLE_NAME;

说明:将column_name列的数值按照指定小数位(decimals)四舍五入

LIMIT

命令行:select * from table_name [where xxx] limit [offset,] rows

描述:用于限制查询结果返回的数量,常用于分页查询

  • offset:偏移量,即从哪个位置开始,如果未提供,则默认从0开始(数据表查询结果的位置从0开始算),如果offset超过了符合where条件的数据量或表的总数据量,则结果返回为空
  • rows:取行数量,即最多取多少行

注意:并不是所有的数据库都支持LIMIT,也不是所有支持LIMIT语法的数据库,其LIMIT的用法都一致

ORDER BY

命令行:SELECT column1, column2, ... FROM table_name [where xxx] ORDER BY column1, column2, ... ASC|DESC;

描述:对结果集按照一个列或者多个列进行排序(默认升序排序)

  • ASC:表示按升序排序。
  • DESC:表示按降序排序。

分组查询GROUP BY和HAVING 子句

分组,即按照指定特征(列),将特征相同(字段值相同)的分为同一个组,不同的特征分为不同组,在数据表中,可以理解为按照某些列中,每一行数据的指定列的值进行区分,若这些列的值相同,则分为同一组,不相同,则不在同一个组。在用来分组的列上我们可以使用 COUNT()、 SUM()、MAX()等函数进行数据统计。

命令行:SELECT column1, aggregate_function(column2) FROM table_name WHERE condition GROUP BY column1;

注意,如果SQL语句里有where子句,GROUP BY是对where子句筛选后的数据进行分组,不是对整张表进行分组

有时候我们需要对分组后的数据进行过滤,则可以使用HAVINGHAVING是对分组后的数据进行过滤

命令行:SELECT column_1, aggregate_function(column_2) FROM table_name WHERE condition GROUP BY column_1,...,cloumn_n HAVING aggregate_function(column_xx)xxx;

EXISTS 运算符

命令行:SELECT xx FROM table_name WHERE [not] EXISTS (SELECT xxx);

描述:EXISTS用于判断查询子句是否有记录,如果有至少一条记录存在返回 True,否则返回 False(如果where子句返回True,则显示该数据行,如果where子句返回False,则不显示该数据行)

如下图所示,select 1=2select NULL都会返回1行记录,根据EXISTS子句如果有至少1条记录返回True,得到where子句一直为True,所有数据行被返回;由于select * from demo;返回了空集合(即1条记录都没有),所以EXISTS子句返回了False,即where子句一直为False,所以数据行都没有被返回。

根据上面的例子,可以很容易理解以下的例子:


JOIN子句

JOIN相关子句是用于将两个或者多个表结合起来,再进行相关操作

函数 说明
inner join 内连接,以连接条件(on t1.column1=t2.column1)作为判断,如果column1对应的值在2个表中都有数值,则进行数据行连接并返回,如果在其中一个表中没有对应值,则不返回
left join 左连接,以左表为核心进行连接,即以连接条件(on t1.column1=t2.column1)作为判断,如果左表的column1字段值在右表column1字段中有同样的值,则进行数据行连接并返回,如果在右表column1字段中有没有同样的值,则以右表所有字段值为NULL与左表对应数据行进行连接然后返回
right join 右连接,以右表为核心进行连接,即以连接条件(on t1.column1=t2.column1)作为判断,如果右表的column1字段值在左表column1字段中有同样的值,则进行数据行连接并返回,如果在左表column1字段中有没有同样的值,则以左表所有字段值为NULL与右表对应数据行进行连接然后返回




操作符

IN和NOT IN

命令 说明
SELECT/UPDATE/DELETE xxx WHERE column IN (value1, value2, ...); 指定列(column)的值要在IN指定的范围内
SELECT/UPDATE/DELETE xxx WHERE column NOT IN (value1, value2, ...); 指定列(column)的值要不在IN指定的范围内

LIKE

命令:SELECT/UPDATE/DELETE xxx WHERE column LIKE pattern;

描述:column列的值要模糊匹配指定模式

模式设置的有2个较常用的符号:

命令 说明
% 匹配0个或多个字符
_ 匹配一个字符

AS别名

别名,是为了让列名称或表名称的可读性更强,而给字段名称或表取的名称

给列名称取别名命令:SELECT column_name1 AS 别名1, column_name2 AS 别名2,... FROM table_name;

有时候一个SQL执行语句中有多张表,这个时候就需要给表取别名来增强可读性

给表取别名命令:SELECT 别名.column_name1, 别名.column_name2,... FROM table_name [as] 别名;

嵌套子查询

嵌套子查询可以简单理解为在where语句中嵌套了select语句

命令行:SELECT/UPDATE/DELETE xxx WHERE column IN/=/like (select column from xxx [where xxx]);

注意:嵌套的select语句查询的结果集必须是指定列column的结果集

相关推荐
Kk.61636 分钟前
SQL编程题复习(24/9/20)
数据库·sql·pta考试·专本贯通
2401_864476931 小时前
无线领夹麦克风哪个降噪好?一文搞懂麦克风什么牌子的音质效果好
javascript·git·sql·github·mssql
丶重明3 小时前
【2024】MySQL账户管理
sql
Deryck_德瑞克5 小时前
mysql笔记—sql性能分析
笔记·sql·mysql
知识分享小能手15 小时前
mysql学习教程,从入门到精通,SQL DISTINCT 子句 (16)
大数据·开发语言·sql·学习·mysql·数据分析·数据库开发
NaZiMeKiY21 小时前
SQLServer数据分页
数据库·sql·sqlserver
码爸21 小时前
java 执行es中的sql
java·sql·elasticsearch
中文很快乐21 小时前
springboot结合p6spy进行SQL监控
java·数据库·sql
666786661 天前
Mysql高级篇(中)—— SQL优化
linux·运维·服务器·数据库·sql·mysql
知识分享小能手1 天前
mysql学习教程,从入门到精通,SQL 删除数据(DELETE 语句)(19)
大数据·开发语言·数据库·sql·学习·mysql·数据开发