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