组合技
把新增插入语句和查询语句结合一起
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被外键引用时,也无法删除,他是一个互相约束的过程.在引用外键的时候,也会创建索引,来增加查询速度.
两个表的结构如上图所示.