学习mysql的第5天

数据操作

2、删

格式:delete from 表名 where 条件;
示例:delete from student where id=4;
注意:没有条件是全部删除,慎用!
在这里插入图片描述

3、改

格式:update 表名 set 列1=值1, 列2=值2, … where 条件;
示例:update student set age=16 where id=7;
注意:没有条件是全部的列修改,慎用!
在这里插入图片描述

4、查

格式:select * from 表名;
示例:select * from student;
说明:查询表中的全部数据

①基本语法

格式:select * from 表名;
说明:
a、from关键字后面是表名,表示数据来源于这张表
b、select后面写表中的列名,如果是 * 表示在结果集中显示表中的所有列
c、在select后面的列名部分,可以使用 as 为列 起别名,这个别名显示在结果集中
d、如果要查询多个列,之间使用逗号分隔
示例:

select * from student;
select name, age from student;
select name as a, age from student;

在这里插入图片描述

②消除重复行

在select后面列前面使用distinct可以消除重复的行(只留不同)
示例:

select gender from student;
select distinct gender from student;

在这里插入图片描述

③条件查询

a、语法

	select * from 表名 where 条件

b、比较运算符

	等于	=
	大于	>
	小于	<
	大于等于 >=
	小于等于 <=
	不等于	!=或<>

需求:查询id值大于8的所有数据
示例:select * from student where id>8;
在这里插入图片描述
c、逻辑运算符

and	并且  	
or	或者 	
not	非

需求:查询id值大于7的女同学
示例:select * from student where id>7 and gender=0;
在这里插入图片描述
先插入3条数据

扫描二维码关注公众号,回复: 11547548 查看本文章
insert into student values(0, "李白", 18, 1,  "北京", 0), (0, "李信", 18, 1,  "武汉", 0), (0, "李清照", 18, 0,  "北京", 0);

d、模糊查询
like
%接任意多个任意字符
_接一个任意字符
需求1:查询姓李的同学
示例:select * from student where name like "李%";
需求2:查询姓1个李的同学
示例:select * from student where name like "李_";
在这里插入图片描述e、范围查询

in					表示在一个非连续的范围内
between...and...	表示在一个连续的范围内

需求:查询编号8、10、12的学生
实例:select * from student where id in(8, 10, 12);
需求:查询编号为6到8的学生
示例:select * from student where id between 6 and 8;
在这里插入图片描述
先插入1条数据

insert into student(name, age, gender) values(“公孙离”, 19, 0);

f、 空查询

注意:	 null 与 ""不同
判断空:	 is null
判断非空:is not null

需求:查询没有地址的同学
示例:select * from student where address is null;
在这里插入图片描述
g、优先级

小括号 > not非 > 比较运算符 > 逻辑运算符
and比or优先级高,如果同时出现并希望 先选 or ,
需要结果()来使用

④聚合

为了快速得到统计数据,提供5个聚合函数
a、count(*)	表示计算总行数,括号中可以写 * 和列名

需求:查询学生的总成绩
示例:select count(*) from student;

b、max()	计算此列的最大值

需求:查询女生的编号最大值
示例:select max(id) from student where gender=0;

c、min()	计算此列的最小值

需求:查询女生的编号最小值
示例:select min(id) from student where gender=0;

d、sum()	计算此列的和

需求:查询所有学生的年龄和
示例:select sum(age) from student;

e、avg()	计算此列的平均值

需求:查询所有女生的年龄的平均值
示例:select avg(age) from student where gender=0;
在这里插入图片描述

⑤分组

按照字段分组,表示此字段相同的数据会被放在一个集合中。
分组后,只能查询出相同的数据列,对于有差异的数据列无法显示在结果集合中
可以对分组后的数据进行统计,做聚合运算

语法:select 列1, 列2, 集合... from 表名 group by 列1, 列2, 列3, ...;

需求:查询男女生总数
示例:

 select gender, count(*) from student group by gender; 
 select name, gender, count(*) from student group by gender, age;
分组后的数据筛选:select 列1, 列2, 聚合... from 表名 group by 列1, 列2, 列3, ... having 列1, ... 聚合... ;

示例:

select gender, count(*) from student group by gender having gender;
where与having的区别:
where	是对from后面指定的表进行筛选,属于对原始数据的筛选
having	是对group by的结果进行筛选

在这里插入图片描述

⑥排序

语法:select * from 表名 order by 列1 asc|desc, 列2 asc|desc, ...;

说明:

a、将数据按照列1进行排序,如果某些列1的值相同,则按照列2进行排序
b、默认按照从小到大的顺序排排序(默认asc升序)
c、asc	升序
d、desc	降序

需求:按照年龄排序
示例:

select * from student order by age;
select * from student order by age asc;

需求:将没有被删除的数据按年龄排序

select * from student where isDelete=0 order by age;
select * from student where isDelete=0 order by age asc;

在这里插入图片描述

⑦分页

语法:select * from 表名 limit start, count;
说明:start索引从0开始, count计数要看几条
示例:

select * from student limit 0,3;
select * from student limit 3,3;
select * from student where gender=1 limit 0,3;

在这里插入图片描述

5、关联

建表语句:
1、先建一个class表

create table class(id int auto_increment primary key, name varchar(20) not null, stuNum int not null);

在这里插入图片描述
2、

create table students(id int auto_increment primary key, name varchar(20) not null, gender bit default 1, classid int not null, foreign key(classid) references class(id));

在class班级表插入一些数据

insert into class values(0, "mysql01", 55), (0, "mysql02", 66), (0, "mysql03", 77), (0, "mysql05", 88);

在students表插入一些数据

insert into students values(0, "tom", 1, 1);   --插入成功
insert into students values(0, "大乔", 0, 2);  --插入成功
insert into students values(0, "妲己", 1, 10); --插入失败,因为 10classid 是外键,关联是class班级表的id(范围1-4) 没有10的.

查询 students学生表所有数据 select * from students;

关联查询

select students.name, class.name from class inner join students on class.id=students.classid;

学生的名字, 和在哪个班级 from从 class班级表中 inner join关联 students表 on由 class.id=students.classid
(students学生表的classid 对于 的是 班级class的id)
在这里插入图片描述

分类

1、表A inner join 表B

表A与表B匹配的行会出现在结果集中

2、表A left join 表B

表A与表B匹配的行会出现在结果集中,外加表A中独有的数据,未对于的数据使用NULL填充
select students.name, class.name from class left join students on class.id=students.classid;

在这里插入图片描述
首先在插入几个学生

insert into students values(0, "西施", 0, 3), (0, "孙尚香", 0, 3), (0, "瑶", 0, 2), (0, "蔡文姬", 0, 3), (0, "貂蝉", 0, 3);

3、表A right join 表B

表A与表B匹配的行会出现在结果集中,外加表B中独有的数据,未对于的数据使用NULL填充
select students.name, class.name from class right join students on class.id=students.classid;

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qiufengyue_/article/details/107835628