mysql小课(6)

foreign key 外键

class表:
create table class(classId int primary key auto_increment,className varchar(20));
student表:
mysql> create table student(studentId int primary key auto_increment,name varchar(20),classId int,
-> foreign key(classId) references class(classId));

建立外键之后:要求student表中的每个记录的clasId得在class表的classId中存在
student表受到class表的约束,那么class表就成为student表的父表,student表就是class表的子表

查询与插入操作

insert into student2 select * from student;
将查询结果作为values插入到另一张表当中

注意:

需要 查询结果得到的列数与类型 和 插入的表的列数与类型 匹配
列的名字不一样没事 但是列的个数与类型一定要一样

聚合查询

在查询过程中,需要将表的行与行之间进行一定的运算
需要依赖聚合函数(也就是sql提供的库函数)

五巨头:
1、count
2、sum
3、avg
4、max
5、min

1、
select count(*) from student; 计算结果行数
这句代码:先去执行select * 
然后再去计算select * 查询结果的行数
注意:count()会自动忽略null
2、
sum 求和
只是针对数字列有效,如果是字符串列,那么就无法计算
create table exam_result(id int,name varchar(20),chinese decimal(3,1),math decimal(3,1),english decimal(3,1));

insert into exam_result(id,name,chinese,math,english) values(1,'唐三藏',67,98,56),(2,'孙悟空',87.5,78,77),(3,'猪悟能',88,98,90),(4,'曹孟德',82,84,67),(5,'刘玄德',55.5,85,45),(6,'孙权',70,73,78.5),(7,'宋公明',75,65,30);

select sum(chinese) from exam_result;
注意:sum()会自动跳过null
3、
avg() 求平均值
select avg(chinese) from exam_result;

聚合函数还可以搭配表达式使用:

求总分的平均分: select avg(chinese+math+english) as goal from exam_result;

聚合函数默认是针对这个表里的所有列进行聚合 有时候还需要分组聚合

按照指定的字段,把记录分成若干组,每一组分别使用聚合函数

分组查询group by

求出每个岗位的平均薪资

指定一个列就会把列里的值,相同的分到同一组当中

select role,avg(salary) from emp group by role;
注意:

select指定的列 要么是带有聚合函数的 要么就是指定的group by的列 不可以指定一个非聚合或者非group by的列 因为没有意义

在分组的时候可以指定条件筛选:

1、搞清楚筛选条件是分组前还是分组后
2、如果是分组前筛选使用where条件

求每个岗位的平均薪资,并且去掉孙悟空同学的
select role,avg(salary) from emp where name <> '孙悟空' group by role;
select role,avg(salary) from emp where name != '孙悟空' group by role;

3、如果是分组后筛选使用having条件

求每个岗位的平均薪资,并且去掉老板的
select role,avg(salary) from emp where role != '老板' group by role;
或者
select role,avg(salary) from emp group by role having role != '老板';

4、还可以同时在分组前和分组后筛选

select role,avg(salary) from emp where name != '孙悟空' group by role having role != '老板';

联合查询(多表查询)

笛卡尔积
笛卡尔坐标系 也就是 平面直角坐标系

你可能感兴趣的:(#,mysql小课,mysql,数据库,sql)