测试人员必备数据库技术之数据库高级操作(四)

 

目录

创建表

查看数据库(仓库)中全部的表 

查看表结构

插入语句

向全部列插入数据

向指定列插入数据

批量插入数据(MySQL) --了解

更新语句

删除表中数据

删除表

查询语句 ---> 重点

普通(简单)查询语句

(1)查询表中,全部列的数据

(2)查询表中,指定列的数据

给"列"起别名

去掉重复的列值(distinct)

限制查询(limit)

排序(order by)

条件查询

(1)查询列值为NULL的情况

(2)查询列值不为NULL的情况

(3)between....and

(4)in ---> 重点

(5)模糊查询 ---> 重点

聚合(分组)函数

(1)count(*/列名)

(2)sum(列名)

(3)avg(列名)   求平均数

(4)min(列名)   求最小值

(5)max(列名)  求最大值

分组查询

having语句

子查询(嵌套查询)

MySQL数据库-函数

数值类型函数

(1)round(数值,位数) 四舍五入函数

(2)truncate(数值,位数) 截取函数

(3)rand(n) 随机数函数

(4) sqrt(n) 平方根函数

(5)mod(n,m) 余数函数

字符类型函数-->重点

(1)length(列名/字符串)

(2)trim(列名/字符串)

(3)substring(参数1,参数2,参数3)

(4)reverse(列名/字符串)

(5)concat(列名1/字符串1, 列名2/字符串2,..... 列名n/字符串n)

日期类型函数

(1)curdate()  获取系统当前日期

(2)curtime() 获取系统当前时间

(3)sysdate() 获取系统当前日期时间

(4)year(date) 获取年份

(5)month(date)  获取月份


创建表

语法格式:

create table 表名(

列名1 数据类型 primary key,

列名2 数据类型,

列名3 数据类型,

......,

列名n 数据类型

);

说明:

  1. 表名不可以重复
  2. primary key表示主键,可以省略
  3. 列名不可以重复

(d)创建表格式中,最后一行不加逗号

案例:创建一张表,表名为test01

use 数据库名称;

create table test01(

id int(8),

name varchar(30),

sex char(3)

);

查看数据库(仓库)中全部的表 

语法格式:show tables;

查看表结构

语法格式:desc 表名;

案例:查看test01表的,表结构

desc test01;

插入语句

向全部列插入数据

语法格式:

insert into 表名 values(列值1,列值2,列值3....列值n);

说明:

  1. 列值与列值之间使用逗号分隔
  2. values中的列值,必须和表结构中的列名是一一对应的(数量、顺序、类型)

验证: select * from 表名;

案例:向test01表中,插入数据

(1)查看test01的表结构

desc test01;

(2)根据语法格式,插入数据

insert into test01 values(

1001,'rose','');

insert into test01 values(

1002,'jack','');

说明:在插入数据时,字符类型和日期类型需要加单引号

(3)验证数据是否插入成功

select * from test01;

向指定列插入数据

语法格式:

insert into 表名(列名1,列名2,....列名n)values(列值1,列值2,...列值n);

说明:

  1. 列名和列名之间使用逗号分隔
  2. values中的列值必须和表名中的列名是一一对应的(数量、顺序、类型)

验证:select * from 表名;

案例:向test03表中,插入数据         

        id  name   sex   age  score   stime 

1   rose         20   85

2   tom     男   22

3           女   18         2020-7-4

4                31         2020-8-1

5   jack    男                      

(1)查看test03表的,表结构

desc test03;

(2)根据语法格式,插入数据

insert into test03(

id,name,age,score) values(1, 'rose',20,85);

insert into test03(

id,sex,age,stime) values(3, '',18, '2020-7-4');

insert into test03(id,name,sex,age) values(2,'tom', '',22);

insert into test03(id,age,stime) values(4,31,'2020-8-1');

insert into test03(id,name,sex) values(5, 'jack', '');

(3)验证数据是否插入成功

select * from test03;

批量插入数据(MySQL) --了解

语法格式1:

insert into 表名 values(列值1,列值2,列值3....列值n),(列值1,列值2,列值3....列值n),(列值1,列值2,列值3....列值n)...(列值1,列值2,列值3....列值n);

案例:向test01表中,插入数据

select * from test01;

insert into test01 values(1003,'张三', ''),(1004,'李四', ''),(1005,'丽丽', '');

select * from test01;

语法格式2:

insert into 表名(列名1,列名2,....列名n)values(列值1,列值2,...列值n), (列值1,列值2,...列值n),.... (列值1,列值2,...列值n);

案例:向test02表中,插入数据

      id     name      age   sal 

111    肉丝       20

112    杰克       23

113    西红柿     25

114    土豆丝     27

115    金庸       88

116    古龙       86

 insert into test02(id,name,age) values(111,'肉丝',20),(112,'杰克',23),(113,'西红柿',25);

select * from test02;

insert into test02(id,name,age) values(114, '土豆丝',27),(115,'金庸',88),(116,'古龙',86);

select * from test02;

更新语句

语法格式:

update 表名 set 列名1=该列新值,列名2=该列新值,...列名n=该列新值 where 条件;

说明:

(a)如果没有where 条件,修改全部的列值

验证:select * from 表名;

案例:更新test03表,编号(id)是3号的记录,将姓名(name)更新为:田七

update test03 set name='田七' where id=3;

select * fromtest03;

案例:更新test03表,姓名(name)是jack的记录,将年龄(age)更新为25

update test03 set age=25 where name='jack';

select * fromtest03;

删除表中数据

语法格式:

delete from 表名 where 条件;

说明:如果没有where 条件,删除表中全部数据

验证:select * from 表名;

案例:删除test03表中,编号(id)是4号的记录

select * from test03;   删除前

delete from test03 where id=4;

select * from test03;   删除后

删除表

语法格式:drop table 表名;

案例:删除test03表,并验证

drop table test03;

show tables;

查询语句 ---> 重点

普通(简单)查询语句

(1)查询表中,全部列的数据

语法格式:

select * from 表名;

说明: * 表示全部的"列"

案例:查询emp表中,全部列数据

select * from emp;     

(2)查询表中,指定列的数据

语法格式:

select 列名1,列名2,....列名n from 表名;

案例:查询emp表中,员工编号(empno),姓名(ename),职位(job),工资(sal)的信息

select empno,ename,job,sal from emp;

给"列"起别名

语法格式:

select 列名1 as 别名1,列名2 as 别名2,....列名n as 别名n from 表名;

说明:可以去掉as,在列名和别名之间使用空格分隔

案例:查询emp表中,员工编号(empno),姓名(ename),职位(job),入职时间(hiredate),工资(sal),并给每列起别名显示

select empno as 编号,ename as 姓名,job as 职位,hiredate as 入职时间,sal as 工资 from emp;

select empno 编号,ename姓名,job职位,hiredate入职时间,

sal工资 from emp;

去掉重复的列值(distinct)

语法格式:

select distinct 列名 from 表名;

案例:查询emp表中,员工的职位(job),并去重显示

select * from emp;

select distinct job from emp;

限制查询(limit)

语法格式:

select */列名 from 表名 limit 初始位置,行数;

说明:

(a)初始位置表示从哪里开始查询,是一个可选值,默认值是:0,表示第一行记录

(b)行数表示要查询的记录(行)数

案例:查询emp表中,前5条记录

select * from emp limit 0,5;

或者

select * from emp limit 5;

案例:查询emp表中数据,从第3行开始,共查询6条记录

select * from emp limit 2,6;

排序(order by)

语法格式:

select */列名 from 表名 order by 列名1 asc/desc,列名2 asc/desc;

说明:

(a) asc 表示升序   desc 表示降序

(b)如果多列进行排序,先排第1列数据,如果第1列数据中,有相同的列值,在排第2列数据,反之不排。

案例:查询emp表中,员工编号(empno),姓名(ename),职位(job),工资(sal),根据员工编号降序排列

select empno,ename,job,sal

from emp

order by empno desc;

条件查询

语法格式:

select */列名 from 表名

where 条件

order by 列名1 asc/desc,列名2 asc/desc;

说明-条件:

(1)关系运算符

>、<、=、>=、<=、

<>或者 !=(不等于)

(2)逻辑运算符

and(与)、  or(或)、  not(非)

(3)特殊情况

案例:查询emp表中,部门编号(deptno)是30号的,员工编号(empno),姓名(ename),职位(job),部门编号(deptno)

select empno,ename,job,deptno

from emp

where deptno=30;

案例:查询emp表中,工资(sal)大于2000的,员工编号(empno),姓名(ename),工资(sal),奖金(comm)

select empno,ename,sal,comm

from emp

where sal > 2000;

案例:查询emp表中,工资在1000

~5000之间的,员工的编号(empno),姓名(ename),工资(sal),部门编号(deptno)

select empno,ename,sal,deptno

from emp

where sal>1000 and sal<5000;

说明:and表示并且的意思,通过and可以连接多个条件。

例如:条件1 and 条件2 and 条件3..........        

案例:查询student表中,分数(score)大于70分或者地址(address)是杭州的,学员的编号(sid),姓名(sname),分数(score),地址(address)

select sid,sname,score,address

from student

where score>70 or address='杭州';

说明:or表示或者的意思,通过or可以连接多个条件

例如:条件1 or 条件2 or 条件3.....

案例:查询emp表中,工资(sal)不等于1250的,员工的编号(empno),姓名(ename),工资(sal),入职时间(hireda

te),根据入职时间降序排列

select empno,ename,sal,hiredate

from emp

where sal<>1250

order by hiredate desc;

------------------------------------

select empno,ename,sal,hiredate

from emp

Where not sal=1250

order by hiredate desc;

说明:not表示取反意思,一般情况下,not添加在列名前

(1)查询列值为NULL的情况

案例:查询emp表中,没有上级领导编号(mgr)的,员工信息

select * from emp where mgr is null;

练习:查询emp表中,奖金(comm)为null的,员工信息

select * from emp where comm is null;

(2)查询列值不为NULL的情况

案例:查询emp表中,有上级领导编号(mgr)的,员工信息

select * from emp where mgr is not null;

(3)between....and

查询从某个范围之间的数值

语法格式:

select 列名 from 表名 where 列名 between 初值 and 终值;

案例:查询emp表中,工资(sal)在1000~5000之间的,员工的编号(empno),姓名(ename),工资(sal)

select empno,ename,sal

from emp

where sal between 1000 and 5000;

说明:使用between...and查询的数值包含初值和终值。

select empno,ename,sal

from emp

where sal >=1000 and sal<=5000;

(4)in ---> 重点

比较一个列中,是否存在要查找的几个列值

语法格式:

select 列名 from 表名 where 列名 in(列值1,列值2,.....列值n);

案例:查询emp表中,员工编号(empno)是7521、7654、7902的员工信息

select * from emp

where empno in(7521,7654,7902);

------------------------------------

select * from emp where empno=7521 or empno=7654 or empno=7902;

练习:查询student表中,地址(address)是北京、上海、成都、杭州的学员信息

select * from student where address in('北京','上海','成都','杭州');

(5)模糊查询 ---> 重点

语法格式:

select 列名 from 表名 where 列名 like 条件;

说明-条件:

  1. % 表示0个或者多个任意字符
  2. _ 表示任意1个字符

案例:查询emp表中,员工姓名(ename)以M开头的(首字母/第1个字母),员工的编号(empno),姓名(ename),职位(job)

分析: Mabc  M --->M%

select empno,ename,job

from emp

where ename like 'M%';

案例:查询emp表中,员工姓名(ena

me)包含(含有)字母N的,学员编号(empno),姓名(ename),职位(job)

分析:Ndf   N   ferN  rtrNdfd

----->%N%

select empno,ename,job

from emp

where ename like'%N%';

聚合(分组)函数

count  sum   avg   min   max

(1)count(*/列名)

*:表示统计某张表中,数据的总条数

列名:表示统计某列中,列值不为NULL的,数据的总条数

案例:查询emp表中,员工的总数量

并起别名显示

select count(*) as 员工总数 from emp;

案例:查询emp表中,奖金(comm)不是NULL的,员工的总数量

select count(comm) from emp;

(2)sum(列名)

统计某列中,列值的累加之和

案例:查询emp表中,员工的工资(sal)总和并起别名显示

select sum(sal) 工资总和 from emp;

(3)avg(列名)   求平均数

案例:查询emp表中,员工的平均工资(sal)

select avg(sal) from emp;

(4)min(列名)   求最小值

案例:查询emp表中,员工的最低工资(sal)

select min(sal) from emp;

(5)max(列名)  求最大值

案例:查询emp表中,员工的最高工资(sal)

select max(sal) from emp;

分组查询

分组查询就是,根据表中的某一"列",把数据分成几组(列值相同的分成一组),然后对每一组数据使用聚合函数,

聚合函数经常和分组查询一起使用。

语法格式:

select 列名/聚合函数 from 表名

where 条件

group by 列名

order by 列名1/聚合函数 asc/desc,列名2/聚合函数 asc/desc;

案例:查询student表中,学员的性别(sex),每个性别的人数

select sex,count(*)

from student

group by sex;

having语句

having语句就是对分组后的数据,再次进行过滤,使用having语句,

having语句必须和group by一起使用。

语法格式:

select 列名/聚合函数 from 表名

where 条件

group by 列名

having 条件

order by 列名1/聚合函数 asc/desc,列名2/聚合函数 asc/desc;

where和having的区别:

  1. where是对整张表中的数据,进行过滤,可以单独使用
  2. having是对分组后的数据,进行过滤

不可以单独使用,必须和group by一起使用。

案例:查询emp表中,部门的平均工资高于2000的,部门的编号(deptno),部门的人数,部门的平均工资

select deptno,count(*),avg(sal)

from emp

group by deptno

having avg(sal)>2000;

说明:如果是表中存在的"列",使用where,不存在的"列",使用having

子查询(嵌套查询)

子查询就是在一条SQL语句内部,又包含一条SQL语句

案例:查询emp表中,工资高于平均工资的,员工的编号(empno),姓名(ena

me),职位(job),工资(sal)

(1)先求出emp的平均工资

select avg(sal) from emp;

(2)合成

select empno,ename,job,sal

from emp

where sal>(select avg(sal) from emp);

MySQL数据库-函数

数值类型函数

(1)round(数值,位数) 四舍五入函数

如果位数>0,保留小数点后几位小数

如果位数=0,不保留小数

如果位数<0,小数点前第几位,进行四舍五入

select round(35.376,2);  --35.38

select round(35.376,1);  --35.4

select round(35.776,0);  --36

select round(35.376,-1);  --40

select round(35.376,-2);  --0

select round(75.376,-2);  --100

select round(35.376,0);   --35

(2)truncate(数值,位数) 截取函数

如果位数>0,保留小数点后几位小数

如果位数=0,不保留小数

如果位数<0,舍弃小数点前第几位

select truncate(45.937,2); --45.93

select truncate(45.937,1); --45.9

select truncate(45.937,0); --45

select truncate(45.937,-1); --40

select truncate(45.937,-2); --0

select truncate(75.937,-2); --0

(3)rand(n) 随机数函数

rand随机数函数,可以生成0~1之间的随机数,当n数值固定不变时,生成的随机数也固定不变

select rand();

select rand(5);

select rand()*100;

(4) sqrt(n) 平方根函数

select sqrt(2);

select sqrt(3);

select sqrt(4);

(5)mod(n,m) 余数函数

select mod(10,3);

select mod(10,4);

字符类型函数-->重点

(1)length(列名/字符串)

统计列值/字符串中字符的长度(个数)

案例:查询emp表中,员工姓名以及姓名的长度

select ename,length(ename) from emp;

案例:查询HelloPython字符串的长度

select length('HelloPython');

(2)trim(列名/字符串)

去掉列值/字符串2端的空格

案例:去掉字符串北京欢迎你2端的空格

select trim(' 北京 欢迎您  ');

(3)substring(参数1,参数2,参数3)

用于字符串/列值的截取

说明:

参数1:被截取的字符串/列名

参数2:从哪里开始截取

如果是正数,表示从正数第几位开始截取

如果是负数,表示从倒数第几位开始截取

参数3:截取字符串/列值的长度

截取字符串/列值的方向是自左向右截取

案例:截取字符串HelloPython

select substring('HelloPython',3,5);

select substring('HelloPython',-5,3);

练习:查询emp表中,员工姓名,以及姓名最后2个字母

select ename,substring(ename,-2,2) from emp;

(4)reverse(列名/字符串)

字符串逆序函数

案例:将字符串abcde逆序显示

select reverse('abcde');

(5)concat(列名1/字符串1, 列名2/字符串2,..... 列名n/字符串n)

字符串拼接函数

案例:字符串拼接

select concat('百川东到海', '何时复西归', '少壮不努力', '老大徒伤悲');

日期类型函数

(1)curdate()  获取系统当前日期

select curdate();

(2)curtime() 获取系统当前时间

select curtime();

(3)sysdate() 获取系统当前日期时间

select sysdate();

(4)year(date) 获取年份

select year(sysdate());

(5)month(date)  获取月份

select month('2020-11-11');

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

謹言

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值