MYSQL查询进阶

组合技

把新增插入语句和查询语句结合一起

insert into student select* from student2;

上述语句把student2查询到的结果直接作为參数传入student中,本质上还是一个插入语句

查询使用聚合函数

select count(*) from exam_result;

计算该表的总行数值

select count(chinese) from exam_result;

null值不算进去,算的是chinese列的有效值行数

查询总数

select sum(chinese) from exam_result;

计算总和

select sum(column_1_name+column_2_name...) from table_name;

计算某几列的行值总和

show warnings;

可查看最近的警告

sql语句只能对数字进行加减,对于字符串没有意义.

avg,min,max用法和sum类似

select avg(column_1_name)/min(column_1_name)/max(column_1_name)/sum(column_1_name) from table_name;

简单的用法上述所示

需要注意的一点是,在使用这些聚合函数的时候,列的顺序已经是被打乱的一个状态,当我们使用两个列名同时查询的时候,查到的往往并没有对应关系.

当然,如果有需要,我们可以使用聚合函数来进行分组.

select column_1,avg(column_2) from table_1 group by column_1;
//那么我们就会根据column_1来进行分组然后再次使用avg函数
select role ,avg(salary) from emp where name!='张三' group by role having avg(salary)<20000;
//需要注意的是在分组之前使用条件用where,在分组之后使用条件用having

约束

not null

create table student (id int not null,name varchar (20) not null);

desc student;

我们可以看到,在表的Null中,它显示的是no.

unique 

create table student (id int unique,name varchar(20));
这里的unique作用,用来让每个id都是不一样的,但是注意id为 null的时候可以重复
 desc student;
select*from student;

default

primary key

create table stident(id int primary key auto_increment,name varchar(20) default '无名氏');
 insert into stdudent (id) values (1),(2),(null),(null);
insert into stdudent (id) values (null),(null);
select*from stdudent;

我们发现这里的id值一直在增加,但不是逐渐递增,是因为我之前已经加入了但是又使用了delete from函数进行删除,但是id只能增加,即使删除了也依然不会往回退,当我们使用主键的priamry的时候

他会自动创建索引,加快我们的查询速度.

primary key指的是主键,既无法为空也无法重新重复,相当于把unique和not null结合起来了.

foreign key

create table class(id int primary key,name varchar(20));
create table student(id int primary key,name varchar(20),class_Id int,foreign key(class_Id) references class(id));
 insert into class values (1,'java100'),(2,'java101'),(3,'java102');
insert into student values(1,'wangwu',1),(2,'lisi',2);

如图所示,如果创建没有被外键引用的会自动报错,无法进行正常的insert;

反过来

 delete from class where id=1;
ERROR 1451 (23000): Cannot delete or update a parent row: a foreign key constraint fails (`java`.`student`, CONSTRAINT `student_ibfk_1` FOREIGN KEY (`class_Id`) REFERENCES `class` (`id`))

当班级里的id被外键引用时,也无法删除,他是一个互相约束的过程.在引用外键的时候,也会创建索引,来增加查询速度.

两个表的结构如上图所示.

  • 7
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值