美文网首页
Mysql数据库-SQL语句

Mysql数据库-SQL语句

作者: 许大水 | 来源:发表于2020-04-17 13:36 被阅读0次

    数据库-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|+--------------------+10rowsinset

    删除数据库:

    drop database 数据库名称;Query OK,0rows affected

    选择数据库:

    在操作某个数据库之前,必须要切记选择某个数据库

    use数库名称;Database changed

    查看某个数据库中有多少表:

    show tables;+-----------------+|Tables_in_mydb1|+-----------------+|students|+-----------------+

    2、DDL—表的操作

    创建一个表

    create table 表名(字段1属性,字段2属性,字段3属性.......);例如:create tablestu(idint(4)not null primary key,namechar(20),ageint(4),sexvarchar(10),classint(4),addressvarchar(50),chinesefloat(5,2),englishfloat(5,2),mathfloat(5,2));Query OK,0rows affected

    删除一个表库

    drop table 表名;Query OK,0rows 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||+---------+-------------+------+-----+---------+-------+9rowsinset

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

    增加一个字段

    alter table 表名add字段名 字段属性;例如:alter table stu2addageint(4);

    删除一个字段

    alter table 表名 drop 字段名;例如:alter table stu2 drop age;

    修改一个字段

    alter table change 老字段名 新字段名 字段属性;例如:alter table stu2 change id idint(4)primary key;alter table stu2 change id idint(4)auto_increment;

    把某个字段设定为主键

    alter table stu2addprimarykey(id);

    删除一个主键

    alter table stu2 drop primary key;

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

    insertinto表名values(值1,值2.....);例如:insertintostudentsvalues(1,'张三',20,'男',1949,'广东深圳',99.8,80.5,77);

    insert into 表名(name,sex,class,address,chinese,math)values('王麻子','女',1948,'湖南永州',99,88);例如:insert intostudents(name,sex,class,address,chinese,math)values('王麻子','女',1948,'湖南永州',99,88);

    deletefrom表名where条件

    update 表名 set 字段=值 where 条件;

    select*from表名where条件;例如:select*fromstudents;# 查询表中的所有学生的所有信息

    查询练习

    表:

    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,314、显示数学成绩大于85分其中的5~8行              #200行15、查询1704班的成绩信息16、id为12、10、2修改他们的class=171317、查询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);#在什么里面,相当于orlimit2,3;#从第3行开始,总共3行  注意不需要跟whereorder by 字段;#升序            注意不需要跟whereorder by 字段 desc;#降序排列order byage(字段1)asc,(chinese+english+math)(字段2)desc;groupbyclass;#分组            注意不需要跟where函数:max(字段)min(字段)avg(字段)count(字段)distinct 字段        #针对某个字段进行去重处理。having              #在通过函数计算出来的字段用作条件的时候,不能使用where只用havinghavingcount(sex)>1;

    删除练习:沿用前面的students表

    1.请删除没有家庭住址的学生信息2.查名字为张三,年龄最小的。3.删除年龄为22的学生4.求出语文成绩最小的值为多少5.删除语文成绩最差的学生6.删除湖南的男生7.删除姓小的学生8.删除广东深圳的男生9.删除id为偶数的学生10.删除语文成绩小于80分的11.删除女性年龄大于2312.删除总成绩小于150分的学生13.展示学生信息,学生的班级升序排序,数学成绩降序排序14.展示出所有班级号,班级号不重复

    课堂作业:

    CREATETABLE`avengers`(`eno`int(11)NOTNULLPRIMARYKEY,`name`varchar(255)DEFAULTNULL,`sex`varchar(255)DEFAULTNULL,`sal`decimal(10,0)DEFAULTNULL,`comm`decimal(10,0)DEFAULTNULL,)

    插入数据: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的员工的奖金为1008.展示除灭霸以外的其他员工的所有信息9.计算出员工的日薪(包含奖金)10.删除工资为9000,奖金为700的员工的信息11.删除名为'灭霸'的员工信息12.修改卡魔拉的奖金为5000

    家庭作业

    CREATETABLE`emp`(`EMPNO`int(11)NOTNULLPRIMARYKEY,`ENAME`varchar(10)COLLATElatin1_german1_ciDEFAULTNULL,`JOB`varchar(9)COLLATElatin1_german1_ciDEFAULTNULL,`MGR`int(11)DEFAULTNULL,`HIREDATE` dateDEFAULTNULL,`SAL` doubleDEFAULTNULL,`COMM` doubleDEFAULTNULL,`DEPTNO`int(11)DEFAULTNULL);

    插入数据:INSERTINTO`emp`VALUES('7369','SMITH','CLERK','7902','1980-12-17','800',null,'20');INSERTINTO`emp`VALUES('7499','ALLEN','SALESMAN','7698','1981-02-20','1600','300','30');INSERTINTO`emp`VALUES('7521','WARD','SALESMAN','7698','1981-02-22','1250','500','30');INSERTINTO`emp`VALUES('7566','JONES','MANAGER','7839','1981-04-02','2975',null,'20');INSERTINTO`emp`VALUES('7654','MARTIN','SALESMAN','7698','1981-09-28','1250','1400','30');INSERTINTO`emp`VALUES('7698','BLAKE','MANAGER','7839','1981-05-01','2850',null,'30');INSERTINTO`emp`VALUES('7782','CLARK','MANAGER','7839','1981-06-09','2450',null,'10');INSERTINTO`emp`VALUES('7788','SCOTT','ANALYST','7566','1987-07-03','3000',null,'20');INSERTINTO`emp`VALUES('7839','KING','PRESIDENT',null,'1981-11-17','5000',null,'10');INSERTINTO`emp`VALUES('7844','TURNER','SALESMAN','7698','1981-09-08','1500','0','30');INSERTINTO`emp`VALUES('7876','ADAMS','CLERK','7788','1987-07-13','1100',null,'20');INSERTINTO`emp`VALUES('7900','JAMES','CLERK','7698','1981-12-03','950',null,'30');INSERTINTO`emp`VALUES('7902','FORD','ANALYST','7566','1981-12-03','3000',null,'20');INSERTINTO`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 tablescore(idint(4)notnullprimary key auto_increment,序列号stu_idint(4)notnull,学号c_namevarchar(10),课程名称gradefloat(4,2),分数foreignkey(stu_id)referencesstudent1(id)外键);create tablestudent1(idint(4)notnullprimary key,学号namevarchar(10),名字sexvarchar(10),性别birthvarchar(10),生日departmentvarchar(10),专业addressvarchar(10)家庭地址);

    ------------------------添加数据----------------------------------insertintoscorevalues(1,901,'计算机',98);INSERTINTOscoreVALUES(2,901,'英语',80);INSERTINTOscoreVALUES(3,902,'计算机',65);INSERTINTOscoreVALUES(4,902,'中文',88);INSERTINTOscoreVALUES(5,903,'中文',95);INSERTINTOscoreVALUES(6,904,'计算机',70);INSERTINTOscoreVALUES(7,904,'英语',92);INSERTINTOscoreVALUES(8,905,'英语',94);INSERTINTOscoreVALUES(9,906,'计算机',90);INSERTINTOscoreVALUES(10,906,'英语',85);INSERTINTOscoreVALUES(11,907,'计算机',98);insertintostudent1values(901,'张老大','男',1984,'计算机系','北京市海淀区');INSERTINTOstudent1VALUES(902,'张老二','男',1987,'中文系','北京市昌平区');INSERTINTOstudent1VALUES(903,'张三','女',1991,'中文系','湖南省永州市');INSERTINTOstudent1VALUES(904,'李四','男',1993,'英语系','辽宁省阜新市');INSERTINTOstudent1VALUES(905,'王五','女',1990,'英语系','福建省厦门市');INSERTINTOstudent1VALUES(906,'王六','男',1989,'计算机系','湖南省衡阳市');INSERTINTOstudent1VALUES(907,'老七','男',1991,'计算机系','广东省深圳市');INSERTINTOstudent1VALUES(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.查询每个科目的最高分的学生信息。

    作者:老张_Jason

    链接:https://www.jianshu.com/p/ce9e78a831da

    来源:简书

    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

    相关文章

      网友评论

          本文标题:Mysql数据库-SQL语句

          本文链接:https://www.haomeiwen.com/subject/ktwevhtx.html