集合查询

发表时间:2017-05-11 16:49:08 浏览量( 23 ) 留言数( 0 )

学习目标:

1、了解Java的历史

2、为什么要学习Java语言

3、端正学习态度


学习过程:

一、建立今天课程所需要的数据库

1、建表

我们先设计今天要操作的表的结构,使用powerDesigner设计的E-R图如下:

attcontent/a0e1482b-1e5f-4306-8447-c0a969de9834.png

2、生成sql语言如下:

create table department 
(
   dep_id             INT                  not null,
   dep_name           VARCHAR(200),
   constraint PK_DEPARTMENT primary key (dep_id)
);

create table employee 
(
   employee_id        int                  not null,
   dep_id             INT,
   employee_num       CHAR(10),
   employee_name      VARCHAR(50),
   salary             NUMBER(9,2),
   job_id             VARCHAR(200)         not null,
   constraint PK_EMPLOYEE primary key (employee_id)
);

create table job_history 
(
   his_id             INT                  not null,
   employee_id        int,
   job_id             VARCHAR(200),
   job_date           DATE,
   constraint PK_JOB_HISTORY primary key (his_id)
);

create table emp_result 
(
   emp_result_id          int                  not null,
   employee_id        int,
   emp_source_id          int,
   point              NUMBER(5,2),
   constraint PK_emp_result primary key (emp_result_id)
);

create table emp_source 
(
   emp_source_id          int                  not null,
   emp_source_name        VARCHAR2(100),
   constraint PK_emp_source primary key (emp_source_id)
);

alter table employee
   add constraint FK_EMPLOYEE_DEPARTME foreign key (dep_id)
      references department (dep_id);

alter table job_history
   add constraint FK_HIST_REFERENCE_EMPLOYEE foreign key (employee_id)
      references employee (employee_id);

alter table emp_result
   add constraint FK_Result_REFERENCE_EMPLOYEE foreign key (employee_id)
      references employee (employee_id);

alter table emp_result
   add constraint FK_Result_REFERENCE_Source foreign key (emp_source_id)
      references emp_source (emp_source_id);

3、初始化数据如下:

insert into department(dep_id,DEP_NAME) values(1,'软件开发部');
insert into department(dep_id,DEP_NAME) values(2,'销售部门');

insert into employee(employee_id,DEP_ID,EMPLOYEE_NAME,SALARY,JOB_ID)  values(1,1,'刘德华',2500,'java程序员');
insert into employee(employee_id,DEP_ID,EMPLOYEE_NAME,SALARY,JOB_ID)  values(2,1,'张学友',6000,'DBA');
insert into employee(employee_id,DEP_ID,EMPLOYEE_NAME,SALARY,JOB_ID)  values(3,1,'谢霆锋',2000,'网页美工');
insert into employee(employee_id,DEP_ID,EMPLOYEE_NAME,SALARY,JOB_ID)  values(4,1,'奥巴马',2000,'项目经理');
insert into employee(employee_id,DEP_ID,EMPLOYEE_NAME,SALARY,JOB_ID)  values(5,2,'刘备',6000,'销售经理');
insert into employee(employee_id,DEP_ID,EMPLOYEE_NAME,SALARY,JOB_ID)  values(6,2,'张飞',1200,'业务员');

insert into JOB_HISTORY(HIS_ID,EMPLOYEE_ID,JOB_ID,JOB_DATE) values(1,1,'java程序员',to_date('2002-1-1','yyyy-mm-dd'));
insert into JOB_HISTORY(HIS_ID,EMPLOYEE_ID,JOB_ID,JOB_DATE) values(2,2,'DBA',to_date('2002-1-1','yyyy-mm-dd'));
insert into JOB_HISTORY(HIS_ID,EMPLOYEE_ID,JOB_ID,JOB_DATE) values(3,1,'java程序员',to_date('2012-1-1','yyyy-mm-dd'));
insert into JOB_HISTORY(HIS_ID,EMPLOYEE_ID,JOB_ID,JOB_DATE) values(4,1,'java程序员',to_date('2010-1-1','yyyy-mm-dd'));
insert into JOB_HISTORY(HIS_ID,EMPLOYEE_ID,JOB_ID,JOB_DATE) values(5,2,'DBA',to_date('2002-1-1','yyyy-mm-dd'));

insert into emp_source(EMP_SOURCE_ID,EMP_SOURCE_NAME) values(1,'语文');
insert into emp_source(EMP_SOURCE_ID,EMP_SOURCE_NAME) values(2,'数学');

insert into emp_result(EMP_RESULT_ID,EMPLOYEE_ID,EMP_SOURCE_ID,POINT) values(1,1,1,90);
insert into emp_result(EMP_RESULT_ID,EMPLOYEE_ID,EMP_SOURCE_ID,POINT) values(2,1,2,70);
insert into emp_result(EMP_RESULT_ID,EMPLOYEE_ID,EMP_SOURCE_ID,POINT) values(3,2,1,50);
insert into emp_result(EMP_RESULT_ID,EMPLOYEE_ID,EMP_SOURCE_ID,POINT) values(4,2,1,40);

大家可以先把表建好,插入初始化数据后再做进行学习。

二、集合查询

我们先学习第一个比较简单的内容就是数据库的集合查询,这里集合和我们数学的集合论是一样的。这里主要学习的就是并、交、差几个集合运算。如下图:

attcontent/cbf5b50c-cc5b-4c78-83fe-530f8aab788a.png

如下面两个查询语句,第一个查询员工表的员工id和工作id。

select employee_id ,job_id from employee

输入为:

attcontent/c7cbbb00-ee49-45eb-b3e2-ce8a65b8d7eb.png

第二个查询员工的工作记录表的员工id和工作id。

select employee_id ,job_id from job_history 

attcontent/040ad201-5b7a-4dfc-aaa6-51586e60d992.png



下面分别对其进行集合运算

1、UNION并集运算符

UNION运算符从两个查询中返回消除重复之后的结果,注意union和union all的区别。

--union 去重复数据
--union all 不会去重复数据
select employee_id ,job_id from employee
union 
select employee_id ,job_id from job_history

输入结果如下:

attcontent/4bb0e9f1-df34-425e-9ee7-e969eb96e240.png

2、INTERSECT交集运算符

交集就是显示两个集合都有数据,如下面的代码:

select employee_id ,job_id from employee
INTERSECT
select employee_id ,job_id from job_history

运算结果如下:

attcontent/bd90ec34-1a75-459b-9dc6-038c44f6f233.png

3、MINUS差集运算符

差集和上面介绍的两个运算不同,它不满足交换律,也就是说两天查询语句先后顺序不同,得到的结果是不一样的。如下面代码:

select employee_id ,job_id from employee
MINUS
select employee_id ,job_id from job_history

运算结果如下:

attcontent/5bc20110-47e2-42dc-9c86-ec0a8d0e8f8e.png