MySQL

理论知识

修改数据表

1.修改表名

格式:Alter table 旧表名 rename [to] 新表名;

如下:Alter table tb_grade rename to grade;

2.修改字段名

格式:Alter table 表名 change 旧字段名 新字段名 新数据类型;

如下:Alter table grade change name username varchar(20);

3.修改字段的数据类型

格式: Alter table 表名 modify 字段名 数据类型;

如下:Alter table grade modify id int(20);

4.添加字段

  格式:Alter table 表名 add 新字段名 数据类型

如下:Alter table grade add age int(10);

5.删除字段

格式:Alter table 表名 drop 字段名;

如下:Alter table grade drop age;

6.修改字段的排列位置

格式:Alter table 表名 modify 字段名 1 数据类型 first|after 字段名2

如下:Alter table grade modify username varchar(20) first;  //将username,该为表的第一个字             段

Alter table grade modify id int(20) after grade;//将id字段插入到grade字段后面

7.添加数据

格式:Insert into 表名(字段名1,字段名2,….)

values(值1,值2,……);

Create database school;

Use school;

Create table student(

id int(4),

name varchar(20) not null,

grade float

);

Insert into student(id,name,grade)values(1,’zhangsan’,98.5);

Insert into student(name,grade,id)values(’lisi’,95.5,2);

(2)为表的指定字段添加数据

Insert into 表名(字段1,字段2,…)values(值1,值2,…)

Insert into student(id,name)values(4,’zhaoliu’);

Insert into student(id,grade)values(5,97);//name字段没有指定默认值,并且添加了非null约束。

(3)同时添加多条记录

Insert into 表名[(字段名1,字段名2,…)]

values(值1,值2,…),(值1,值2,…),…

Insert into student values

(6,’lilei’,99),

(7,’hanmeimei’,100),

(8,’lihua’,50);

//如果指定字段,则可以只为指定字段添加值

8.更新数据

Update 表名

set 字段名1=值1[,字段名2=值2,…]

[where 条件表达式]

Update student set name=‘laozhang’,grade=50 where id = 1;

更新全部数据

如:Update student set grade = 80;

9.删除数据

1.Delete删除部分数据

删除部分数据是指根据指定条件删除表中的某一条或者某几条记录,需要使用where子句来指定删除记录的条件。

Insert into student values(11,’xiaowang’,80);

Select * from student where id = 11;

Delete from student where id = 11;

Delete from student where id > 5;

2.Delete删除全部数据

在delete语句中如果没有使用where子句,则会将表中的所有记录都删除

Select * from student;

Delete from student;

二 单表查询

1.在select语句中指定所有字段

Select 字段1,字段2,…from 表名

Create table student2(

id int(3) primary key auto_increment,

name varchar(20) not null,

grade float,

gender char(2)

); //插入一些数据

Select id,name,grade,gender from student2;

2.在select语句中使用星号(“*”)通配符代表所有字段

Select * from 表名;

Select * from student2

2.按条件查询

查询student2表中id为4的学生姓名:

Select  id,name from student2 where id = 4;

(1.)带in关键字

查询student表中id值为1、2、3的记录:

Select * from student2 where id in (1,2,3);

查询student表中id值不为1、2、3的记录:

Select * from student2 where id not in (1,2,3);

(2)带between and 关键字的查询

查询student表中id值在2~5之间的学生姓名

select * from student where id between 2 and 5;

(3)空值查询

查询student2表中gender为空值的记录

Select * from student where gender is null;

查询student2表中gender不为空值的记录

Select * from student where gender is not null;

(4)带distinct关键字的查询

查询student2表中gender字段的值,要求不能出现重复数据:

Select distinct gender from student2;

(5)带like关键字的查询

1.百分号(%)通配符

匹配任意长度的字符串,包括空字符串。

查找student表中name字段以字符“z”开头的学生id:

Select id,name from student2 where name like ‘z%’;

查找student表中name字段以字符“z”开头,以“n”结尾的学生id:

Select id,name from student2 where name like ‘z%n’;

查找student表中name字段包含字符“y”的学生id:

Select id,name from student2 where name like ‘%y%’;

2.下划线(_)通配符

查询student2表中name字段值以字符串“zhan”开始,以字符串“san”结束,并且两个字符串之间只有一个字符的记录:

Select * from student2 where name like ‘zhan_san’;

查询student2表中name字段值包含8个字符,并且以字符串“san”结束的记录:

Select * from student2 where name like ‘_____san’;

注意:查询student表中name字段值包括“%”的记录:(\%)

select * from student where like ‘%\%%’

(6)带and关键字的多条件查询

查询student2表中id字段值在1,2,3,4之中,name字段值以字符串“san”结束,并且grade字段值小于80的记录:

Select id,name,grade,gender from student2

where id in(1,2,3,4) and name like ‘%san’ and grade <80;

(7)带or关键字的多条件查询

查询student2表中id字段值小于3,或者gender字段值为“女”的学生姓名:

Select id,name,gender from student2 where id<3 or gender=‘女’;

Or和and一起使用的情况

注意:and的优先级高于or,因此当两者在一起使用时,应该先运算and两边的条件,再运算or两边的条件

查询student2表中gender字段值为“女”或者gender字段值为“男”,并且grade字段值为100的学生姓名:

Select name,grade,gender from student2 where gender = ‘女’ or gender = ‘男’ and grade=100;

三 聚合函数

实际开发中,经常需要对某些数据进行统计,例如统计某个字段的最大值,最小值,平均值等,为此,MySql中提供了一些函数来实现这些功能。

1.count()函数

Count()函数用来统计记录的条数

Select count(*) from 表名

2.sum()函数

Sum()是求和函数,用于求出表中某个字段所有值的总和

Select sum(字段名) from 表名;

3.avg()函数

Avg()函数用于求出某个字段所有值的平均值

Select avg(字段名) from 表名

4.max()函数

Max()函数是求最大值的函数,用于求出某个字段的最大值

Select max(grade) from 表名;

5.min()函数

Min()函数是求最小值的函数,用于求出某个字段的最小值

Select min(grade) from 表名;

四 对查询结果排序

从表中查询出来的数据可能是无序的,或者其排列顺序不是用户期望的。为了使查询结果满足用户的需求,可以使用order by对查询结果进行排序

Select 字段名1,字段名2,… from 表名 order by 字段名1, [asc|desc],字段名2 [asc|desc]…

1.查出student2表中的所有记录,并按照grade字段进行排序

2.查出student2表中的所有记录,使用参数asc按照grade字段升序排列

3.查出student2表中的所有记录,使用参数desc按照grade字段降序排列

4.查出student2表中的所有记录,按照gender字段的升序和grade字段的降序进行排列

五 分组查询

在对表中数据进行统计时,也可能需要按照一定的类别进行统计。在mysql中可以使用group by按某个字段或者多个字段中的值进行分组,字段中值相同的为一组:

Select 字段名1,字段名2,…from 表名

group by字段名1,字段名2,..[having 条件表达式]

1.单独使用group by分组

Select * from student2 group by gender;

每个分组只返回一条结果

2.group by和聚合函数一起使用

Group by和聚合函数一起使用,可以统计出某个或者某些字段在一个分组中最大值、最小值、平均值等

将student2表按照gender字段值进行分组查询,计算出每个分组中各有多少名学生:

Select count(*) ,gender from student2 group by gender;

3.group by和having关键字一起使用

Having关键字和where关键字的作用相同,都用于设置条件表达式对查询结果进行过滤,两者的区别在于,having关键字后可以跟聚合函数,而where不能,通常情况下having关键字都和group by 一起使用,用于对分组后的结果进行过滤。

将student2表按照gender字段进行分组查询,查询出grade字段值之和小于300的分组:

Select sum(grade),gender from student2 group by gender having sum(grade)<300;i

六 使用limit限制查询结果的数量

查询student2表的前4条记录:

Select * from student2 limit 4;

七 为表和字段取别名

1.为表取别名

为student2表起一个别名,并查询student2表中gender字段值为“女”的记录

Select * from student2 as s2 where s2.gender=‘女’;

2.为字段取别名

查询student2表中的所有记录的name和gender字段值,并为这两个字段起别名为stu_name和stu_gender:

Select name as stu_name,gender as stu_gender from student2;

具体实践

2、创建如下表


MySQL_第1张图片

a )插入数据,使表内容如下所示


MySQL_第2张图片

b)修改李四的SERVLET为65、JSP为73


MySQL_第3张图片

c)查询并显示ID、USERNAME这两个字段的值


MySQL_第4张图片

d)将c的结果用下图所示别名显示

MySQL_第5张图片

e)查询并以如下结果显示


MySQL_第6张图片

f)查询并显示每个学生的SERVLET和JSP的总成绩


MySQL_第7张图片

g)查询并显示不重复的ADDRESS字段的值


MySQL_第8张图片

h)查询ID为2且姓名为李四的学生


MySQL_第9张图片

i)查询ID为2,或者姓名为张三的学生


MySQL_第10张图片

J) 查询SERVLET成绩大于70分的学生,并显示所有字段信息


MySQL_第11张图片

K)查询SERVLET 成绩大于60分小于80分的学生,并显示所有字段信息


MySQL_第12张图片

L)查询姓名不等于张三的记录,并显示所有字段信息


MySQL_第13张图片

M)查询ADDRESS为空的记录,并显示所有字段信息


MySQL_第14张图片

N)查询ADDRESS不为空的记录,并显示所有字段信息


MySQL_第15张图片

O)查询李姓学生的所有信息


MySQL_第16张图片

P)查询所有学生SERVLET总成绩


MySQL_第17张图片

Q)查询所有学生SERVLET的平均分


MySQL_第18张图片

R)查询SERVLET的最高分和最低分


MySQL_第19张图片


MySQL_第20张图片

S)查询前两条记录


MySQL_第21张图片

T)将表按SERVLET由大到小显示


MySQL_第22张图片

U)将表按JSP小到大显示


MySQL_第23张图片

V)查询每个地区的人数


MySQL_第24张图片

W)查询分组后区域人数超过1个人的区域


MySQL_第25张图片

x)查询id是1,2,3的记录


MySQL_第26张图片

X���3x�t�ݬ�

你可能感兴趣的:(MySQL)