一.数据库的约束
1.not null(指示某列不能存储null值)
在创建表的时候我们可以指定某一列不能存储null值.
上述我们指定"id"这一列不能为null值,当我们添加元素的时候,如果id这一列为null的话就会报错.
2.unique(保证某列的每行必须有唯一的值)
以"id"这一列为例,当我们插入一个"id"为1的时候,显示插入成功,当我们第二次再次插入"id"为1的时候,就会显示"重复录入了key是1的数据"
3.default(规定给列赋值时的默认值)
4.主键(重要) primary key(not null和unique的结合,确保某列有唯一的标识)
这里我们只需要指定插入姓名,因为"id"这一列已经主键约束,而"primary key auto_increment"就是自增主键,不用我们再指定id,自增主键会帮助我们指定.
注意:一张表只能有一个primary key
5.外键 (foreign key)
外键是为了解决不科学的不合法的.
创建好外键就要求本表中这个列的数据必须要在引用的外面的表的对应列中存在
我们可以认为班级表约束了学生表
把班级表这种约束别人的表,称为"父表"
把学生表这种被别人约束的表叫做"子表"
不仅父表约束子表,子表也可以约束父表.
二.聚合查询
聚合查询就是"行和行"之间的运算,但是有一定的限制.
select count(*) from student;
查询操作:
1)先执行select * from
2)再执行count
使用count(*)的时候,即使全部是null的,也是加入计数的.
三.分组查询(group by)
就是把这个指定的列,值相同的记录,划分到一组,针对这些组就可以分别进行聚合查询了.
四.联合查询(多表查询)
笛卡尔积得到的是一个更大的表
笛卡尔积的列数,就是之间两个表的列数之和
笛卡尔积的行数,就是之间两个表的行数之积
select * from student,class;
将student和class表进行笛卡尔积后得出上述结果,但是上述结果很多都是没有意义的,所以我们要加入一些限制条件
加入限制条件后结果都是准确的
select * from student,class where student.classId=class.classId;
联合查询的过程:
1)笛卡尔积
2)指定连接条件
3)指定其他条件
4)针对列进行精简
进行夺标查询还有一种写法
select * from 表1 join 表2 on 连接条件;
介绍内连接,外连接:
内连接:
select * from student inner join class on student.id=class.classId;
内连接的结果
外连接分为左外连接(left)和右外连接(right)
左外连接
select * from student left join class on student.id=class.classId;
右外连接
select * from student right join class on student.id=class.classId;