数据库的外键约束、多表查询

目录

1、外键的应用

2、多表查询

3、子查询

1、创建外键:

--主表:建立一个班级表,记录班级的名称
create table class(
 cNumber number primary key,
className  varchar(20)
);
--从表:建立一个学生表
create table student(
classNumber number,
name varchar(20) not null,
grade float
);
--为学生表的classNumber(班级编号)创建一个外键,而这个学生表中的classNumber应该受班级表中cNumber的限制

--添加外键的写法:alter table 表名 add constraint FK_ID foreign key(你的外键字段名) REFERENCES 外表表名(对应的表的主键字段名);
alter table student add constraint FK_ID  foreign key(ClassNumber) references class(cNumber);
--因为受外键的限制,所有先要将数据插入到主表中
insert into class(cNumber,className)values(1,'高一(1)班');
insert into class(cNumber,className)values(2,'高一(2)班');
insert into class(cNumber,className)values(3,'高一(3)班');
insert into class(cNumber,className)values(4,'高一(4)班');
insert into student(classNumber,name,grade)values( 1,'张三',98.5);
insert into student(classNumber,name,grade)values( 2,'李四',96.5);
insert into student(classNumber,name,grade)values( 4,'王五',97.5);
insert into student(classNumber,name,grade)values( 3,'赵六',90.5);
select *from class order by cNumber
select *from student

2、多表查询

--笛卡尔积查询
select *from class,student;
--内连接查询
    --隐式内连接查询
          select *from class,student where cNumber=ClassNumber;
          --给表取别名,效果和上面语句一样
          select *from class c,student s where c.cNumber=s.ClassNumber;
    --显示内连接查询
           select *from class c inner join student s on c.cNumber=s.ClassNumber;
    二者区别:
    隐式内连接:在查询的基础上去做的where条件筛选
    显示内连接:带着条件去查询结果,效率高一些
--外连接查询
       --左外连接(显示左边表格所有的数据。)
             select *from class c left outer join student s on c.cNumber=s.ClassNumber;
       --右外连接
             select *from class c right outer join student s on c.cNumber=s.ClassNumber;

3、子查询

--子查询
例如:查询高一班的所有同学的信息
1、查询班级表中id为1

select *from class where className='高一(1)班'

2、再得出CNumber=1的所有学生信息
select *from student where classNumber=1

3、得到子查询

select *from student where classNumber=(select cNumber from class where className='高一(1)班')

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章