软件测试常⽤的sql语句⼀.数据库基础(mysql)
1.windows命令⾏连接服务器
mysql -h&ip -p&port -u&⽤户名 -p
-h (host) 连接的ip localhost
-p (port) 端⼝号 3306
-u (username) ⽤户名 root
-p (password) 密码 123456
如果在本地登录,直接写mysql -uroot -p
2.数据库的执⾏原理
数据服务器提供服务,客户端连接到数据库服务器。向服务器发送sql语句,服务器执⾏SQL,返回结果。3.字段类型
整型
sql软件长什么样整型占⽤字节范围范围
tinyint1-27~27-1-128~127
smallint2-215~215-1-32768~32767
mediumint3-223~223-1-8388608~8388607
int4-231~231-1 -2147483648~2147483647
bigint8-263~263-1
显⽰宽度:最⼩的显⽰位数,⽐如int(11),最少⽤11位数字显⽰值。
显⽰的时候不够11位以0填充
显⽰宽度必须结合zerofill才起作⽤
⽆符号数(unsigned)
⽆符号数就是没有负数,⽆符号数的正数的范围是有符号数正数范围的2倍
create table t4(
id tinyint(255)unsigned
);
unsigned的在sql中的使⽤⽅法:
tinyint unsigned
mediumint unsigned
int unsigned;
浮点数
浮点数占⽤字节范围
float(单精度)4-3.4E+38~3.4E+38
double(双精度)8-1.8E+308~1.8E+308
浮点数的声明:float(M,D),double(M,D)
M:总位数 D:⼩数位数 M-D:整数位数
例如:float(9,3) ⼀共9位数,⼩数3位,整数6位.
double(9,3) ⼀共9位数,⼩数3位,整数6位.
精度问题:float 只有 6~7位可信数
double 有 14~15位可信数据
定点型-保存⼩数
主要⽤于存储⾦额
decimal(M,D) 存D位⼩数,M-D位整数,总共M位
M的最⼤值是65,D的最⼤值是30,默认是(10,0)
4.字符型
字符集:字符到⼆进制的编码的集合,叫字符集
latin1 使⽤1个字节表⽰字符,gbk使⽤2个字节表⽰字符,utf8使⽤3个字节表⽰字符,如果有6个字节,在gbk中可以存3个汉字,utf8可以存两个汉字
mysql⽀持 40种字符集,查询语法:show charset;
客户端设置字符集是为了告诉服务器,我要⽤哪个字符集来跟服务器沟通,设置字符集:set names utf8;
定长和变长字符串
定长char(L):有多少空间就占⽤少空间,不会回收剩余的空间。L的最⼤长度是255字符,utf8中⼀个字符相当于3个字节,gbk中⼀个字符相当于2个字节变长varchar(L):如果空间没⽤完,剩余的空间,mysql会回收。L:最多字符数,理论最⼤长度是65535字节,但事实上达不到
⼀般我们不能确定插⼊的值的长度,要⽤varchar
text型-保存长⽂本
数据类型描述
char(L)定长字符
varchar(L)可变长度字符
tinytext⼤段⽂本(⼤块数据) 28-1=255个字符
text⼤段⽂本(⼤块数据) 216-1=65535个字符
mediumtext224-1
longtext232-1
枚举enum-相当于单选
语法:enum(选项)
意义:只能选择指定的值的⼀个
优点可以控制插⼊的数据;节省保存数据的空间;可以提⾼查询的速度。
集合set-相当于多选
语法:set('值1','值2',,,)
创建表
插⼊数据
⽇期时间
数据类型描述
datetime⽇期时间占8个字节
0001-01-01 00:00:01 ~ 9999-12-31 23:59:59
date⽇期
time时间
year年份,占⽤1个字节
timestamp时间戳,占⽤4个字节
最⼤值1970-01-01 00:00:01 ~ 2038-01-19 11:14:07
5.列属性
6.运算符
运算符
算数运算符:+ - * / % 取余/取模
关系运算符:> ≥ < ≤ !=
逻辑运算符
&& 与 and 两个条件都满⾜
|| 或 or 两个条件满⾜⼀个
! ⾮ not 取反
⼩括号()
⼩括号内优先级最⾼
别名as
可以对表名,字段名使⽤as来取别名,可以解决重名问题。取别名as可省略
7.索引
⼆.基础语句(sql)
1.语法
select 选项 from 表名 [where 条件] [group by 字段名] [having 条件] [order by 字段] [limit 参数];
2.字段列表
from⼦句;distinct;聚合函数-做⼀些统计
聚合函数描述
sum()求和
avg()求平均值
max()最⼤值
min()最⼩值
count()记录数
3.where条件
关系和逻辑运算:对值进⾏过滤,符合条件的就查询出来。所有的关系运算,都可以使⽤到where条件⾥⾯。
空和⾮空:is null和is not null
在和不在:in和not in
in 在......范围内:where 字段 in('值1','值2')
not in 不在......范围内:where 字段 not in('值1','值2')
between和not between
在什么范围 -- 数值型,⽇期时间
语法: ....where 字段 between 值1 and 值2. 在什么范围之内
语法: ....where 字段 not between 值1 and 值2. 不在什么范围之内
通配符
下划线(_):匹配⼀个字符
百分号(%):匹配多个字符(包括没有字符)
模糊查询(like)
......where 字段 like '值'; 值⼀般使⽤通配符
group by 分组: ......[where 条件] group by 字段
select sex,group_concat(name) name from stu group by sex;通过分组显⽰男的所有成员的姓名和⼥的所有成员的姓名,使⽤group_concat()函数将同⼀组的值连接起来
having条件:对查询结果进⾏筛选
where:查的范围是当前表中的字段
having:查的范围是select后⾯的选项(即查询结果)作为条件查
order by排序:...表名 order by 字段 as || desc
asc:升序,默认,从⼩到⼤,可省略不写
desc:降序,从⼤到⼩
limit限制:...... limit 起始位置,个数; 如果开始位置为0,可以省略
select * from stu order by age desc limit 3;⾸先降序
limit m,n:从m开始向后取n条数据
从表中查询的结果都是从0开始排序
4.数据库操作
创建数据库:creat database [if not exists] '数据库名' charset=字符编码;
数据库名是关键字或特殊符号需要,⼀般不需要反引号
if not exists,创建了⼀个已经存在的数据库,此命令不报错且不覆盖
查看数据库:show database;
数据的本质是⽂件夹
查看创建数据库的sql语句:show creat database 数据库名;
数据库修改-修改字符集:alter database 数据库名 charset-字符集;
删除数据库:drop database [if exists] '数据库名';
if exists删除之前判断⼀下,存在就删除
5.表的操作
数据库的选择:use '数据库名';
创建表:creat table 表名(字段列表) [values('','',,,)]
creat table ceshi(id int);
表也是以⽂件的形式保存的
查看所有表:show tables;
查看创建表的sql语句:show creat table 表名[\G];
加上\G则不需要分号
查看表结构:desc 表名;
desc即describe
修改表名:alter table 原表名 rename to 新表名;
修改表的字符集:alter table 表名 charset=新字符集;
修改字段属性:alter table 表名 modify 字段名新数据类型;
修改字段名称和属性:alter table 表名 change 原字段新字段新属性;
表引擎修改:alter table 表名 engine=新引擎;
mysql引擎分为:MyISAM:查询的速度⽐较快; InnoDB:新的引擎,主要维护数据的安全。
删除表:drop table [if exists] 表名;
删除多个表:drop table 表1,表2,,,;
添加表字段:alter table 表名 add 字段名数据类型;
删除字段:alter table 表名 drop 字段;
修改字段:alter table 表名 change 字段名新字段名新数据类型;
6.数据操作
创建⼀个表:
creat table ceshi(
id int,
name varchar(20),
hobby varchar(10),
addr char(10)
);
插⼊1-n条数据:
insert into 表名(字段列表) values(字段列表1),(字段列表2),,,
值和字段⼀定⼀样,他俩⼀致则再添加可以省略字段
insert into ceshi(id,name,hobby,addr) values(1,'⽟环','吃荔枝','唐朝');
查看表数据:select * from 表名 [where 条件];
汉字乱码要给显⽰框设置字符集:set names utf8;
更新数据:update 表名 set 字段1=值1,字段2=值2,,, where 条件;
删除数据:delete from 表名 where 条件;
注意添加where条件,没有条件则全表删除
给字段(或者表)起别名:select id as '新id',name as '新名字,hobby as '新爱好',addr as '新地址' from ceshi;
去除重复的数据:select distinct name,hobby from ceshi;
7.⼦查询
在⼀个select语句中,嵌⼊了另外⼀个select语句,那么被嵌⼊的select语句称之为⼦查询语句
select * from stu where math>(select avg(math) from stu);
......where 字段=some || any || all(⼦查询);
some:⼀些,any:任何,all:所有
some和any等同于in,not in可以写成!=all
......where exists || not exists
exists:存在,not exists:不存在
8.连表查询
连接的作⽤:当查询结果的列表来源于多张表时,需要将多张表连接⼀个⼤的数据集,再选择合适的列返回内连接查询:查询的结果为两个表重叠部分匹配到的数据
左连接查询:查询的结果为两个表匹配到的数据加左表特有的数据,对于右表中不存在的数据使⽤null填充右链接查询:查询的结果为两个表匹配到的数据加右表特有的数据,对于左表中不存在的数据使⽤null填充内连接:select 选项 from 表1 inner join 表2 on 表1.相同字段=表2.相同字段;
左连接:select 选项 from 表1 left join 表2 on 表1.相同字段=表2.相同字段;
左表数据全部取出,右表只要符合条件的,没有的⽤null
右连接:select 选项 from 表1 right join 表2 on 表1.相同字段=表2.相同字段;
右表数据全部取出,左表只要符合条件的数据,没有的⽤null
两张表中的字段名是⼀样的可以简写成using形式
select * from student right join scores using(studentno);
笛卡尔积:多表中数据排列组合,结果是字段连接,⾏数相乘,通过where条件,可以筛选出我们需要的数据select * from table1,table2 where 连接条件
9.事务
10.视图view
11.函数
select 函数名() from ...;
聚合函数:
sum(expr): 求和
avg(expr): 求平均数
max(expr) 求最⼤值
min(expr) 获取最⼩
数值处理:rand()随机数
随机排序:select * from 表名 order by rand(); 随机数:select rand()...
四舍五⼊round():select round()
字符处理:
左边截取:left('字段',长度)
右边截取:right('字段',长度)
查看字节长度:select length('字段') '字节长度';
查看字符长度:select char_length('字段') '字符长度';
字段拼接:select group_concat(字段) from 表名;
加密函数
select md5(密码);
select password(密码);
12.外键
⼆.⼯作中遇到的较复杂语句(postgresql)
1.with
sql语句
WITH type as (select DISTINCT on(kbid) * from rptsvc_leak_event ORDER BY kbid,event_time desc) SELECT leak_type,count(*) FROM type GROUP BY leak_type
解释
括号中的语句:select DISTINCT on(kbid) * from rptsvc_leak_event ORDER BY kbid,event_time desc,按照event_time降序、且对kbid去重后,返回所有内容。注意:order by之后⼀定要加kbid,不然报错。
with后⽤as 将括号中的sql语句赋值给type,即type是⼀个新表。
这整个with语句可以替换成:
SELECT leak_type,count(*) FROM (select DISTINCT on(kbid) * from rptsvc_leak_event ORDER BY kbid,event_time desc) as type GROUP BY leak_type,
同样也要注意加as,不然语句不正确
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论