学习笔记
·数据库表的创建及查询
文章目录
学习笔记
任务过程
第一步:分析需求
第二步:新建数据库
第三步:新建表
1.Grade表
2.Student表
3.subject表
第三步:插入数据
1.Grade表
2.Student表
3.subject表
第四步:查询测试
1.查询学号为1001的学生所有信息
2.根据班级名称查询每个班级有哪些学生
3.根据 学生学号 查询学了哪些课程
4.每个年级的学生所学的课程
学习
一:三范式
二:主键、外键和索引的区别
复习
任务过程
第一步:分析需求
每张表的 字段、类型、 约束等;
需要创建学生表—student,年级表—Grade,学科表—subject
学生表中字段有studentno ( varchar )( pk ),gradeid( int ),name ( varchar )(not null) , sex(char) ,age( int ) ,city ( varchar ) ,phone ( int )
年级表中字段有gradeid ( int ) (pk),gradename ( varchar )(unique)
学科表中字段有subjectid ( int )( pk ),subjectname ( varchar )( notnull ), statyhour ( int ),gradeid( itn )
第二步:新建数据库
数据库名称 java
create database java;
第三步:新建表
1.Grade表
create table Grade(
gradeid int (5) primary key,
gradename varchar(20) unique
);
2.Student表
create table Student(
studentno varchar(10) primary key,
gradeid int(5) ,
name varchar(10) not null,
sex char(3) not null,
age int(3) not null,
city varchar(30) not null,
phone int (20) not null,
constraint Student_gradeid_fk foreign key(gradeid) references Grade(gradeid)
);
3.subject表
create table subject(
subjectid int(3) primary key,
subjectname varchar(20) not null,
statyhour int(10) ,
gradeid int(3),
constraint subject_gradeid_fk foreign key(gradeid) references Grade(gradeid)
);
第三步:插入数据
1.Grade表
insert into Grade(gradeid,gradename) values(1,"java33");
insert into Grade(gradeid,gradename) values(2,"java34");
insert into Grade(gradeid,gradename) values(3,"java35");
2.Student表
insert into student(studentno,gradeid,name,sex,age,city,phone) values("1001",1,"王可","男",20,"北京市石景山",12312344);
insert into student(studentno,gradeid,name,sex,age,city,phone) values("1002",1,"凌洋","女",20,"湖南省长沙",1244);
insert into student(studentno,gradeid,name,sex,age,city,phone) values("1003",2,"杨阳","男",20,"上海市长虹区",342344);
insert into student(studentno,gradeid,name,sex,age,city,phone) values("1004",2,"姜北","男",20,"河北省邯郸市",876554);
insert into student(studentno,gradeid,name,sex,age,city,phone) values("1005",3,"张三","女",20,"山东省济南市",234344);
insert into student(studentno,gradeid,name,sex,age,city,phone) values("1006",3,"王五","男",20,"湖州德清",7895674);
3.subject表
insert into subject(subjectid,subjectname,statyhour,gradeid)values(1,"Javase",40,3);
insert into subject(subjectid,subjectname,statyhour,gradeid)values(2,"HTML和CSS网页技术",60,2);
insert into subject(subjectid,subjectname,statyhour,gradeid)values(3,"mysql",70,1);
第四步:查询测试
1.查询学号为1001的学生所有信息
select * from student where studentno="1003";
2.根据班级名称查询每个班级有哪些学生
select gradename,name from Grade left outer join Student on Grade.gradeid=Student.gradeid;
3.根据 学生学号 查询学了哪些课程
select studentno,name,gradename from Student inner join Grade on Grade.gradeid=Student.gradeid where studentno=1002;
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-31qsIFzn-1575379512201)(1004.png)]
4.每个年级的学生所学的课程
select Grade.gradename,Student.name, subject.subjectname from
Grade inner join Student on Grade.gradeid = Student.gradeid
inner join subject on Grade.gradeid=subject.gradeid;
学习
一:三范式
解释:
1NF:原子性 字段不可再分,否则就不是关系数据库; ------------字段不可分;
2NF:唯一性 要求数据库表中的每个实例或行必须可以被惟一的区分; -----有主键,非主键字段依赖主键,不能部分依赖;
3NF:每列都与主键有直接关系,不存在传递依赖; -------非主键字段不能相互依赖;
二:主键、外键和索引的区别
定义:
主键:唯一标识一条记录,不能有重复,不允许为空。
外键:表的外键是另一表的主键,外键是可以有重复的,可以是空值。
索引:该字段没有重复值,但可以有一个空值。
作用:
主键:用来保证数据完整性
外键:用来和其他表建立联系,用于保持数据的一致性。
索引:用来提高查询排序的速度
个数:
主键:主键只能有一个。
外键:一个表可以有多个外键。
索引:一个表可以有多个唯一索引。
-- 外键约束
constraint A表_id字段_fk foreign key(id字段) references B表(id字段);
如:
constraint subject_gradeid_fk foreign key(gradeid) references Grade(gradeid);
subject表中的gradeid 是 Grade表中的主键,所以gradeid是subject的外键。
复习
建库
create database practice; – 表示创建名字为practice的数据库
drop database practice; – 表示删除名字为practice的数据库
建表
create table 表名 (
字段名1 数据类型,
字段名2 数据类型,
字段名3 数据类型,
… …
);
向表格中增加字段
alter table 表名 add 字段名 数据类型;
实现表格中字段的改变
alter table 表名 change 旧字段名 新字段名 数据类型;
实现表格中字段的删除
alter table 表名 drop 字段名;
实现表格名称的重命名
alter table 表名 rename to 新的表名;
新增数据
insert into 表名 [(字段名1, 字段名2, …)] values (值1, 值2, …);
更改数据
update 表名 set 字段名1 = 值1 [where 条件];
删除数据
delete from 表名 [where 条件];
基本查询
select 字段名1, 字段名2, … from 表名;
select [distinct] 字段名1 [as 别名1], 字段名2 [as 别名2], … from 表名
[where 查询条件]
[group by 字段名]
[having 条件]
[order by 字段名1 asc或desc];
[distinct]--------去重
[as …]---------别名
[group]--------分组查询
[having 条件]-------------分组后过滤
[order by 字段名1 asc或desc];------------字段排序
between… and …、
按照条件进行模糊查询 …where first_name like ‘%拉’;
内连接:
select [表名1.]字段名1, [表名2.]字段名2, … from 表名1 inner join 表名2 on 连接条件;
左外连接:
select [表名1.]字段名1, [表名2.]字段名2, … from 表名1 left outer join 表名2 on 连接条件;
右外链接:
select [表名1.]字段名1, [表名2.]字段名2, … from 表名1 right outer join 表名2 on 连接条件;
分页查询 select 字段名1 [as 别名1], 字段名2 [as 别名2], ... from 表名 limit 初始位置(下标默认从0开始), 记录的条数;
join 表名2 on 连接条件;
右外链接:
select [表名1.]字段名1, [表名2.]字段名2, … from 表名1 right outer join 表名2 on 连接条件;
分页查询
select 字段名1 [as 别名1], 字段名2 [as 别名2], ... from 表名 limit 初始位置(下标默认从0开始), 记录的条数;