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

目录

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)班')

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值