学习笔记

·数据库表的创建及查询

任务过程

第一步:分析需求

每张表的 字段、类型、 约束等;

  1. 需要创建学生表—student,年级表—Grade,学科表—subject
  2. 学生表中字段有studentno ( varchar )( pk ),gradeid( int ),name ( varchar )(not null) , sex(char) ,age( int ) ,city ( varchar ) ,phone ( int )
  3. 年级表中字段有gradeid ( int ) (pk),gradename ( varchar )(unique)
  4. 学科表中字段有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的外键。

复习
    1. 建库

      create database practice; – 表示创建名字为practice的数据库
      drop database practice; – 表示删除名字为practice的数据库

    2. 建表

      create table 表名 (
      字段名1 数据类型,
      字段名2 数据类型,
      字段名3 数据类型,
      … …
      );

    3. 向表格中增加字段

      alter table 表名 add 字段名 数据类型;

    4. 实现表格中字段的改变

      alter table 表名 change 旧字段名 新字段名 数据类型;

    5. 实现表格中字段的删除

      alter table 表名 drop 字段名;

    6. 实现表格名称的重命名

      alter table 表名 rename to 新的表名;

    7. 新增数据

      insert into 表名 [(字段名1, 字段名2, …)] values (值1, 值2, …);

    8. 更改数据

      update 表名 set 字段名1 = 值1 [where 条件];

    9. 删除数据

      delete from 表名 [where 条件];

    10. 基本查询
      select 字段名1, 字段名2, … from 表名;

    11. 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];------------字段排序

    12. between… and …、

    13. 按照条件进行模糊查询 …where first_name like ‘%拉’;

    14. 内连接:

      select [表名1.]字段名1, [表名2.]字段名2, … from 表名1 inner join 表名2 on 连接条件;

    15. 左外连接:

      select [表名1.]字段名1, [表名2.]字段名2, … from 表名1 left outer join 表名2 on 连接条件;

    16. 右外链接:

      ​ select [表名1.]字段名1, [表名2.]字段名2, … from 表名1 right outer join 表名2 on 连接条件;

    17. 分页查询

     select 字段名1 [as 别名1], 字段名2 [as 别名2], ... from 表名    limit 初始位置(下标默认从0开始), 记录的条数;
    


join 表名2 on 连接条件;

  1. 右外链接:

    ​ select [表名1.]字段名1, [表名2.]字段名2, … from 表名1 right outer join 表名2 on 连接条件;

  2. 分页查询

   select 字段名1 [as 别名1], 字段名2 [as 别名2], ... from 表名    limit 初始位置(下标默认从0开始), 记录的条数;


Logo

更多推荐