Mysql数据库-SQL语句

数据库-Mysql初级

一、应用场景

1、数据校验:在测试过程中,经常需要检查前台后台数据是否一致。

  • 比如:就拿当时做过的一个注册功能,注册完成之后,我们需要检查数据是否有相关的记录

  • 比如:要搜索某个商品,前端会展示所有相关商品的信息,但是我们需要检查商品的数量是否与数据库的数据是否一致。例外,还检查商品信息是否与数据库中的商品是否一致

  • 再比如:删除前端一个数据,检查后台数据库中的数据是否发生变化

  • 比如,删除数据库中的一条记录,看前端页面是否实时更新。

2、在某种时候,为了达到某个测试目的,需要构造一些测试场景,数据不够,这需要我们在数据库中去数据的增,删,改等操作。

  • 比如:搜索分页查看功能的测试场景

  • 比如:删除数据库的某条记录,看前端是否会实时更新

  • 比如:做性能测试的时候,需要模拟1000个用户同时并发进行登录操作。

二、搭建数据库

1、安装数据库服务器

C:\桌面\试听软件安装\xampp-win32-1.7.1-installer(数据库文件安装).rar

解压,点击直接安装即可

2、安装数据库连接工具—NavicatForMySql

C:\桌面\试听软件安装\NavicatforMySQL(mysql数据库连接工具).rar

解压,点击直接安装即可

三、连接数据库

1、Leader给你数据库的权限:

数据库服务器的IP地址:192.168.5.171
账号:root
密码:
端口:3306

image.png

四、数据库服务器,数据库,表,数据四者之间的关系

  • 数据库服务器中会有很多的数据库,一般一个项目对应一个数据库,也可能对应多个数据库。
  • 一个数据库中可能对应多张表
  • 数据表中存放的都是一些数据,不同的表存放的数据是不一样的。

五、NavicatForMysql客户端工具使用

1、连接属性的修改

连接属性->高级

image.png

2、如何创建数据库?

image.png

3、如何创建表?

image.png
image.png
image.png

数据类型:

int: 整数类型

char:字符类型 char(20) 不管是否会占用20个字符空间,都会占用。

varchar:字符类型 varchar(20) 如果只占用了10个字符的空间,剩余10个字符空间会释放。

float:浮点数类型

主键:一旦把某列设定为主键了,那么这一列的数据不能重复。

六、SQL语句:

1、DDL —数据库操作

DDL:数据定义语句 Data Definition Language

  • 创建数据库:
create database 数据库名称;

Query OK, 1 row affected
  • 查看有多少数据库:
show databases;

+--------------------+
| Database           |
+--------------------+
| information_schema |
| cdcol              |
| fanwe              |
| mydb1              |
| mydb2              |
| mysql              |
| phpmyadmin         |
| test               |
| user               |
| webauth            |
+--------------------+
10 rows in set
  • 删除数据库:
drop database 数据库名称;

Query OK, 0 rows affected
use 数库名称;

Database changed
  • 查看某个数据库中有多少表:
show tables;

+-----------------+
| Tables_in_mydb1 |
+-----------------+
| students        |
+-----------------+

2、DDL—表的操作

  • 创建一个表
create table 表名(字段1 属性,字段2 属性,字段3 属性.......);

例如:
create table stu(id int(4) not null primary key,
name char(20),
age int(4),
sex varchar(10),
class int(4),
address varchar(50),
chinese float(5,2),     
english float(5,2),
math float(5,2));

Query OK, 0 rows affected
  • 删除一个表库
drop table 表名;

Query OK, 0 rows affected
  • 查看表的结构
desc 表名;
例如:
desc stu;

域/列名/字段名   类型       是否允许空 主键            额外数据
+---------+-------------+------+-----+---------+-------+
| Field   | Type        | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+-------+
| id      | int(4)      | NO   | PRI | NULL    |       |
| name    | char(20)    | YES  |     | NULL    |       |
| age     | int(4)      | YES  |     | NULL    |       |
| sex     | varchar(10) | YES  |     | NULL    |       |
| class   | int(4)      | YES  |     | NULL    |       |
| address | varchar(50) | YES  |     | NULL    |       |
| chinese | float(5,2)  | YES  |     | NULL    |       |
| english | float(5,2)  | YES  |     | NULL    |       |
| math    | float(5,2)  | YES  |     | NULL    |       |
+---------+-------------+------+-----+---------+-------+
9 rows in set

3、DDL—修改表结构—增,删,查,改

  • 增加一个字段
alter table 表名 add 字段名 字段属性;
例如:
alter table stu2 add age int(4);
  • 删除一个字段
alter table 表名 drop 字段名;
例如:
alter table stu2 drop age;
  • 修改一个字段
alter table change 老字段名 新字段名 字段属性;
例如:
alter table stu2 change id id int(4) primary key;
alter table stu2 change id id int(4) auto_increment;
  • 把某个字段设定为主键
alter table stu2 add primary key(id);
  • 删除一个主键
alter table stu2 drop primary key;

4、DML—对表数据操作-增,删,查,改

insert into 表名 values(值1,值2.....);
例如:
insert into students values(1,'张三',20,'男',1949,'广东深圳',99.8,80.5,77);
insert into 表名(name,sex,class,address,chinese,math) values('王麻子','女',1948,'湖南永州',99,88);
例如:
insert into students(name,sex,class,address,chinese,math) values('王麻子','女',1948,'湖南永州',99,88);
delete from 表名 where 条件
update 表名 set 字段=值 where 条件;
select * from 表名 where 条件;
例如:
select * from students;                 # 查询表中的所有学生的所有信息
  • 查询练习

表:

create table stu(id int(4) not null primary key,
name char(20),
age int(4),
sex varchar(10),
class int(4),
address varchar(50),
chinese float(5,2),
english float(5,2),
math float(5,2));

数据:

insert into students values (4, '李帅', '22', '男', '江西', '1703', '89', '90', '81');
INSERT INTO students VALUES (5, '杨话梅', '29', '女', '湖南长沙', '1704', '98', '19', '88');
INSERT INTO students VALUES (6, '乐细洋', '23', '女', '广东深圳', '1702', '80', '87', '93');
INSERT INTO students VALUES (7, '李立', '27', '男', '广东广州', '1701', '82', '88', '92');
INSERT INTO students VALUES (8, '吴亮', '28', '男', '湖南益阳', '1713', '89', '67', '99');
INSERT INTO students VALUES (9, '王老五', '27', '男', '山西', '1714', '88', '57', '97');
INSERT INTO students VALUES (10, '王麻子', '25', '男', '新疆', '1715', '40', '38', '92');
INSERT INTO students VALUES (11, '隔壁老王', '24', '男', '北京', '1708', '33', '89', '93');
INSERT INTO students VALUES (12, '宁丽君', '23', '女', '黑龙江', '1706', '89', '92', '83');
INSERT INTO students VALUES (13, '刘钊伟', '23', '男', '湖北', '1717', '76', '94', '77');
INSERT INTO students VALUES (14, '张盼盼', '22', '女', '上西', '1703', '75', '99', '63');
INSERT INTO students VALUES (15, '周红亮', '21', '女', '贵阳', '1704', '78', '84', '62');
INSERT INTO students VALUES (16, '赵六', '22', '男', '湖南永州', '1718', '87', '77', '65');
INSERT INTO students VALUES (17, '张三', '21', '男', '广东深圳', '1720', '92', '76', '86');
INSERT INTO students VALUES (18, '田七', '23', '女', '广东东莞', '1722', '91', '96', '85');

4、查找英语或语文成绩大于90的学生信息
5、查找id小于12的学生的名字、数学成绩、总分
6、查找三门课程都不及格的学生信息   
7、查找学生总分大于250的学生信息
8、查找学生的平均分<80的学生信息
9、查找学生年龄在22-25岁之间的学生信息   [22,25]
10、查找姓王的学生信息
11、查找广东省学生信息
12、查找1701和1702的学生信息
13、显示学生信息的前面3~5行            2,3
14、显示数学成绩大于85分其中的5~8行               #200行
15、查询1704班的成绩信息
16、id为12、10、2修改他们的class=1713    
17、查询1713班,语文成绩大于10小于60的成绩信息
18、查询学生表中5到10行的数据
19、查询1701班与1703班,英语成绩小于90的学生信息
20、查询出1713班成绩并且按数学成绩排序
21、查看班级对应的人数    
22.总共有多少个班
23、查看英语最高分
23、计算语文成绩平均分
24、查看英语最高分的学生信息 【难】 
25. 求出学生语文成绩的平均分
26. 展示每个学生的姓名及总分成绩
27. 展示英语为最高分的学生信息
28. 获取数学成绩最低的学生姓名及分数
29. 找出总分最低的学生信息
30. 统计出student表中男生/女生的人数
31. 统计出student表有几个年龄层;
32. 找出student表中语文成绩>90分的人数在1人以上的班级
33. 查询平均分在前五名的男生的信息
34. 求出每个班数学成绩的平均分
35. 查询每个班中数学成绩最高分
36. 找出班级中女生人数超过1人的班级编号及班级人数
  • 总结:

条件后面可以使用数据运算符

+
-
>
<
>=
<=
!=
=
*
/                   # 除,求商
%                   # 求余

and                 # 并且
or                  # 或者

between x and y     #[x,y]

字段 like ‘王%’      #模糊查询

in (1701,1702);     #在什么里面,相当于or

limit 2,3;          #从第3行开始,总共3行  注意不需要跟where

order by 字段;        #升序             注意不需要跟where
order by 字段 desc;   #降序排列

order by age(字段1) asc,(chinese+english+math)(字段2) desc;

group by class;      #分组             注意不需要跟where

函数:
max(字段)
min(字段)
avg(字段)
count(字段)

distinct 字段        #针对某个字段进行去重处理。

having              #在通过函数计算出来的字段用作条件的时候,不能使用where只用having
having count(sex)>1;
  • 删除练习:沿用前面的students表
1.请删除没有家庭住址的学生信息
2.查名字为张三,年龄最小的。
3.删除年龄为22的学生
4.求出语文成绩最小的值为多少
5.删除语文成绩最差的学生
6.删除湖南的男生
7.删除姓小的学生
8.删除广东深圳的男生
9.删除id为偶数的学生
10.删除语文成绩小于80分的
11.删除女性年龄大于23
12.删除总成绩小于150分的学生
13.展示学生信息,学生的班级升序排序,数学成绩降序排序
14.展示出所有班级号,班级号不重复
  • 课堂作业:
CREATE TABLE `avengers` (
  `eno` int(11) NOT NULL PRIMARY KEY ,
  `name` varchar(255) DEFAULT NULL,
  `sex` varchar(255) DEFAULT NULL,
  `sal` decimal(10,0) DEFAULT NULL,
  `comm` decimal(10,0) DEFAULT NULL,
)
插入数据:
INSERT INTO `avengers` VALUES ('1001', '美国队长', 'male', '12000', '2000');
INSERT INTO `avengers` VALUES ('1002', '灭霸', 'male', '18000', '4000');
INSERT INTO `avengers` VALUES ('1003', '黑豹', 'male', '9000', '2000');
INSERT INTO `avengers` VALUES ('1004', '钢铁侠', 'male', '15000', '1000');
INSERT INTO `avengers` VALUES ('1005', '绿巨人', 'male', '8000', '1000');
INSERT INTO `avengers` VALUES ('1006', '黑寡妇', 'female', '12000', '3000');
INSERT INTO `avengers` VALUES ('1007', '幻灭', 'male', '7000', '0');
INSERT INTO `avengers` VALUES ('1008', '蚁人', 'male', '8000', '500');
INSERT INTO `avengers` VALUES ('1009', '雷神', 'male', '14000', '3000');
INSERT INTO `avengers` VALUES ('1010', '绯红女巫', 'female', '9000', '800');
INSERT INTO `avengers` VALUES ('1011', '卡魔拉', 'female', '13000', '1000');
INSERT INTO `avengers` VALUES ('1012', '星爵', 'male', '8000', '0');
INSERT INTO `avengers` VALUES ('1013', '奇异博士', 'male', '12000', '3000');
INSERT INTO `avengers` VALUES ('1014', '鹰眼', 'male', '10000', '1500');
INSERT INTO `avengers` VALUES ('1015', '黄蜂女', 'female', '10000', '0');
INSERT INTO `avengers` VALUES ('1016', '蜘蛛侠', 'male', '12000', '900');
INSERT INTO `avengers` VALUES ('1017', '星云', 'female', '9000', '700');
题目:
1.找出名为蜘蛛侠的信息
2.找出有奖金的员工的信息
3.找出基本工资大于等于10k的员工的信息
4.展示基本工资大于12k且奖金大于1k的员工的信息
5.展示员工的总工资(包含基本工资和奖金)
6.找出总工资等于22k的员工,展示他的姓名\基本工资\奖金
7.修改没有奖金或者工资低于10k的员工的奖金为100
8.展示除灭霸以外的其他员工的所有信息
9.计算出员工的日薪(包含奖金)
10.删除工资为9000,奖金为700的员工的信息
11.删除名为'灭霸'的员工信息
12.修改卡魔拉的奖金为5000
  • 家庭作业
CREATE TABLE `emp` (
  `EMPNO` int(11) NOT NULL PRIMARY KEY,
  `ENAME` varchar(10) COLLATE latin1_german1_ci DEFAULT NULL,
  `JOB` varchar(9) COLLATE latin1_german1_ci DEFAULT NULL,
  `MGR` int(11) DEFAULT NULL,
  `HIREDATE` date DEFAULT NULL,
  `SAL` double DEFAULT NULL,
  `COMM` double DEFAULT NULL,
  `DEPTNO` int(11) DEFAULT NULL
);
插入数据:
INSERT INTO `emp` VALUES ('7369', 'SMITH', 'CLERK', '7902', '1980-12-17', '800', null, '20');
INSERT INTO `emp` VALUES ('7499', 'ALLEN', 'SALESMAN', '7698', '1981-02-20', '1600', '300', '30');
INSERT INTO `emp` VALUES ('7521', 'WARD', 'SALESMAN', '7698', '1981-02-22', '1250', '500', '30');
INSERT INTO `emp` VALUES ('7566', 'JONES', 'MANAGER', '7839', '1981-04-02', '2975', null, '20');
INSERT INTO `emp` VALUES ('7654', 'MARTIN', 'SALESMAN', '7698', '1981-09-28', '1250', '1400', '30');
INSERT INTO `emp` VALUES ('7698', 'BLAKE', 'MANAGER', '7839', '1981-05-01', '2850', null, '30');
INSERT INTO `emp` VALUES ('7782', 'CLARK', 'MANAGER', '7839', '1981-06-09', '2450', null, '10');
INSERT INTO `emp` VALUES ('7788', 'SCOTT', 'ANALYST', '7566', '1987-07-03', '3000', null, '20');
INSERT INTO `emp` VALUES ('7839', 'KING', 'PRESIDENT', null, '1981-11-17', '5000', null, '10');
INSERT INTO `emp` VALUES ('7844', 'TURNER', 'SALESMAN', '7698', '1981-09-08', '1500', '0', '30');
INSERT INTO `emp` VALUES ('7876', 'ADAMS', 'CLERK', '7788', '1987-07-13', '1100', null, '20');
INSERT INTO `emp` VALUES ('7900', 'JAMES', 'CLERK', '7698', '1981-12-03', '950', null, '30');
INSERT INTO `emp` VALUES ('7902', 'FORD', 'ANALYST', '7566', '1981-12-03', '3000', null, '20');
INSERT INTO `emp` VALUES ('7934', 'MILLER', 'CLERK', '7782', '1981-01-23', '1300', null, '10');

题目:
Like与not Like的用法

1.找出名字中有字母O的员工名称
2.找出名称以字母B开头的员工信息
3.找出名称包含字母M以及以S开头的员工名称
4.找出工作为clerk,名称中包含A的员工的姓名,工作
5.找出名称第一个字母后为L的员工的编号和姓名
6.获取工作不以S开头的工作信息
7.获取名称不包含N和E的员工信息 
8.获取从事不以A开头,但以T结尾的工作的员工信息
9.获取名称为四个字符的员工的信息

in 与 not in 的用法

1.查询名字为'SMITH''BLAKE''KING'的员工信息
2.查询10部门员工的(经理)mgr的信息
3.查询出名字不为'SMITH''BLAKE''KING'的员工信息

between x and y 与 not between x and y的用法

1.查询基本工资在1000到1500之间的员工信息
2.查询基本工资在1500-3000之间并且没有奖金的员工
3.查询出基本工资不在1500-3000之前的员工基本工资信息
4.查找基本工资在1000到2000之间的员工姓名和基本工资  
5.查找基本工资在2000到3000以外的员工信息   
6.获取‘SMITH‘, ’WARD‘, ’BLAKE’这三个员工的信息
7.获取员工编号在7566到7839之间的员工信息    
8.获取员工SMITH 和BLAKE之间的员工信息
9.获取部门10员工的经理的信息    

group by用法

1.查询出所有的员工信息并按员工的基本工资降序排序
2.返回员工的信息并按工作降序,工资升序排列
3.查询出在表中前五行的员工信息
4.查询出基本工资属于最高的第3-6名的员工信息
5.查询学生来自哪几个地方
6.求出每月基本工资总成本
7.找出工资最低的员工,并展示员工信息
8.统计该公司女生人数
9.统计名字中包含'星'的员工人数
10.求出奖金最高和奖金最低的基本工资是多少
11.展示工资最高的五个员工的信息

Where-having练习题目:

1.求出每个部门的平均工资 
2.找出平均工资大于2000的部门
3.找出每月基本工资成本大于10000的部门
4.找出人数大于4人的部门
5.计算20部门的每月基本工资总成本
6.展示每个岗位的员工人数
7.展示岗位人数超过3人的岗位名称
8.求从事clerk工作的员工的总工资成本(总工资=sal+comm)
9.找出没有奖金的员工的平均工资

七、综合练习

  • 练习1:

创建一个表:score表
字段说明:
id 序列号
stu_id 学号
c_name 科目
grade 成绩

创建一个表:student表
字段说明:
id 学号
name 名字
sex 性别
birth 出生年月
department 系别
address 家庭住址

---------------------建立表格-------------------------------
create table score(id int(4) not null primary key auto_increment,  序列号
stu_id int(4) not null,         学号
c_name varchar(10),             课程名称
grade float(4,2),               分数
foreign key(stu_id) references student1(id)   外键
);

create table student1(id int(4) not null primary key,       学号
name varchar(10),   名字
sex varchar(10),    性别
birth varchar(10),  生日
department varchar(10), 专业
address varchar(10)     家庭地址
);
------------------------添加数据----------------------------------
insert into score values(1,901, '计算机',98);
INSERT INTO score VALUES(2,901, '英语', 80);
INSERT INTO score VALUES(3,902, '计算机',65);
INSERT INTO score VALUES(4,902, '中文',88);
INSERT INTO score VALUES(5,903, '中文',95);
INSERT INTO score VALUES(6,904, '计算机',70);
INSERT INTO score VALUES(7,904, '英语',92);
INSERT INTO score VALUES(8,905, '英语',94);
INSERT INTO score VALUES(9,906, '计算机',90);
INSERT INTO score VALUES(10,906, '英语',85);
INSERT INTO score VALUES(11,907, '计算机',98);

insert into student1 values(901,'张老大', '男',1984,'计算机系', '北京市海淀区');
INSERT INTO student1 VALUES( 902,'张老二', '男',1987,'中文系', '北京市昌平区');
INSERT INTO student1 VALUES( 903,'张三', '女',1991,'中文系', '湖南省永州市');
INSERT INTO student1 VALUES( 904,'李四', '男',1993,'英语系', '辽宁省阜新市');
INSERT INTO student1 VALUES( 905,'王五', '女',1990,'英语系', '福建省厦门市');
INSERT INTO student1 VALUES( 906,'王六', '男',1989,'计算机系', '湖南省衡阳市');
INSERT INTO student1 VALUES( 907,'老七', '男',1991,'计算机系', '广东省深圳市');
INSERT INTO student1 VALUES( 908,'老八', '女',1990,'英语系', '山东省青岛市');       
题目:
1.查询student表的第2条到4条记录
2.从student表查询所有学生的学号(id)、姓名(name)和院系(department)的信息
3.从student表中查询计算机系和英语系的学生的信息
4.从student表中查询年龄24~26岁的学生信息
5.从student表中查询每个院系有多少人 
6.从score表中查询每个科目的最高分。
7.计算每个学生的总成绩
8.计算每个考试科目的平均成绩
9.查询计算机成绩低于95的学生信息
10.查询同时参加计算机和英语考试的学生的信息
11.将计算机考试成绩按从高到低进行排序
12.查询姓张或者姓王的同学的姓名、院系和考试科目及成绩
13.查询都是湖南的学生的姓名、年龄、院系和考试科目及成绩
14.查询每个科目的最高分的学生信息。
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,590评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 86,808评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,151评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,779评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,773评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,656评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,022评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,678评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,038评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,659评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,756评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,411评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,005评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,973评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,053评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,495评论 2 343

推荐阅读更多精彩内容