Oracle视图课后练习题

1. 使用表employees创建视图employee_vu,其中包括姓名(LAST_NAME),员工号(EMPLOYEE_ID),部门号(DEPARTMENT_ID).

a) create or replace view employee_vu

b) as

c) select last_name,employee_id,department_id

d) from employees

语句:

clip_image002

创建成功:

clip_image004

创建后的查询结果:

clip_image006

2. 显示视图的结构

desc employee_vu;

查询结果图:

clip_image008

3. 查询视图中的全部内容

SELECT * FROM employee_vu;

查询结果图:

clip_image010

4. 将视图中的数据限定在部门号是80的范围内

a) create or replace view employee_vu

b) as

c) select last_name,employee_id,department_id

d) from employees

e) where department_id = 80

创建代码:

clip_image012

查询结果:

clip_image014

5. 将视图改变成只读视图

create or replace view employee_vu

as

select last_name,employee_id,department_id

from employees

where department_id = 80

with read only

clip_image016

Oracle约束课后练习题

1. 向表emp2的id列中添加PRIMARY KEY约束(my_emp_id_pk)

ALTER table emp2

ADD constraint my_emp_id_pk primary key(id);

clip_image002

2. 向表dept2的id列中添加PRIMARY KEY约束(my_dept_id_pk)

ALTER table dept2

ADD constraint my_dept_id_pk primary key(id)

先添加一列

clip_image004

clip_image006

3. 向表emp2中添加列dept_id,并在其中定义FOREIGN KEY约束,与之相关联的列是dept2表中的id列。

ALTER table emp2

ADD (dept_id number(10) constraint emp2_dept_id_fk references dept2(id));

准备工作:

create table emp2 as select employee_id id, last_name name, salary from employees

create table dept2 as select department_id id, department_name dept_name from departments

Oracle数据处理课后练习题

1. 运行以下脚本创建表my_employees

Create table my_employee ( id number(3),

first_name varchar2(10),

Last_name varchar2(10),

User_id varchar2(10),

Salary number(5));

clip_image002

表的结构

clip_image004

2. 显示表my_employees的结构

DESC my_employees;

clip_image004[1]

3. 向表中插入下列数据

ID

FIRST_NAME

LAST_NAME

USERID

SALARY

1

patel

Ralph

Rpatel

895

2

Dancs

Betty

Bdancs

860

3

Biri

Ben

Bbiri

1100

4

Newman

Chad

Cnewman

750

5

Ropeburn

Audrey

Aropebur

1550

INSERT INTO my_employee

VALUES(1,’patel’,’Palph’,’Rpatel’895);

clip_image006

插入数据后的查询结果

clip_image008

4. 提交

COMMIT;

clip_image010

5. 将3号员工的last_name修改为“drelxer”

UPDATE my_employees

SET last_name = ‘drelxer’

WHERE id = 3;

clip_image012

6. 将所有工资少于900的员工的工资修改为1000

UPDATE my_employees

SET salary = 1000

WHERE salary< 900

clip_image014

7. 检查所作的修正

SELECT * FROM my_employees

WHERE salary < 900

clip_image016

8. 提交

COMMIT;

clip_image018

9. 删除所有数据

DELETE FROM my_employees;

clip_image020

10. 检查所作的修正

SELECT * FROM my_employees;

clip_image022

11. 回滚

ROLLBACK;

clip_image024

12. 清空表my_employees

TRUNCATE TABLE my_employees

clip_image026

能够回滚成功,但是数据都被清空了,实际上是失败的.

Oracle创建和管理表课后练习题

1. 创建表dept1

name

Null?

type

id

Number(7)

name

Varchar2(25)

create table dept1(

id number(7),

name varchar2(25)

)

分析:

表名:dept1

表元素:id number(7),name varchar2(25)

解题:create table dept1(id number(7),name varchar2(25))

clip_image002

2. 将表departments中的数据插入新表dept2中

a) create table dept2

b) as

c) select * from departments

分析:

表名:dept2

数据:departments中的数据

解题:create table dept2 as select *from departments

clip_image004

3. 创建表emp5

name

Null?

type

id

Number(7)

First_name

Varchar2(25)

Last_name

Varchar2(25)

Dept_id

Number(7)

create table emp5(

id number(7),

first_name varchar2(25),

last_name varchar2(25),

dept_id number(7)

)

分析:

表名:emp5

数据: id number(7),First_name varchar2(25),Last_name varchar2(25),Dept_id number(7)

解题:create table emp5(id number(7),First_name varchar2(25),Last_name varchar2(25),Dept_id number(7))

clip_image006

4. 将列Last_name的长度增加到50

a) alter table emp5

b) modify (last_name varchar2(50))

分析:

要修改的数据 Last_name

要修改的内容:长度增加到50

解题:

Alter table emp5 modify (last_name varchar2(50))

clip_image008

5. 根据表employees创建employees2

a) create table employees2

b) as

c) select * from employees

分析:

表名:employees2

数据:employees

解题:

Create table employees2 as select *from employees

clip_image010

6. 删除表emp5

drop table emp5;

分析:

要求:删除表emp5

解题:删除用drop,清空用delete或者truncate

Drop table emp5

clip_image012

7. 将表employees2重命名为emp5

rename employees2 to emp5

要求:重命名

分析:用rename to

解题:

Rename employees2 to emp5

clip_image014

8. 在表dept和emp5中添加新列test_column,并检查所作的操作

alter table dept

add(test_column number(10));

desc dept;

clip_image016

9. 在表dept和emp5中将列test_column设置成不可用,之后删除

a) alter table emp5

b) set unused column test_column

alter table emp5

drop unused columns

clip_image018

clip_image020

10. 直接删除表emp5中的列 dept_id

Alter table emp5

drop column dept_id

clip_image022

Oracle创建和管理表

本章目标

通过本章学习,您将可以:

• 描述主要的数据库对象

• 创建表

• 描述各种数据类型

• 修改表的定义

• 删除,重命名和清空表

常见的数据库对象

对象 描述

表 基本的数据存储集合,由行和列组成。

视图 从表中抽出的逻辑上相关的数据集合。

序列 提供有规律的数值。

索引 提高查询的效率

同义词 给对象起别名

数据类型

clip_image001

追加一个列

clip_image003

修改一个列

clip_image005

删除一个列

clip_image007

重命名一个列

clip_image008

彻底删除一个表

clip_image010

清空一个表

clip_image012

DDL 表的管理

DML 表数据的管理:查询是最重要的内容,也是用的最多的内容,分组查询,子查询,基本查询等

DDL

Number对应java中的int 基本数据类型 number(10,2)表示浮点型 varchar2(20)表示字符类型 date表示日期类型 blob是特殊的类型,可以存储最多4g的内容

白手起家:create table table_name()

依托于已经存在的表 create table table_name as 你从已经存在的表中查询的语句

查询表结果的语句

clip_image013

Truncate清空表,但是表结构还在

Delete也一样

Drop则是连同数据和表结构一起完全删除

Rollback是回滚的意思,类似于撤销的功能

clip_image014

Oracle子查询课后练习题

1. 查询和Zlotkey相同部门的员工姓名和雇用日期

a) select last_name,hire_date

b) from employees

c) where department_id = (

d) select department_id

e) from employees

f) where last_name = ‘Zlotkey’

g) )

h) and last_name <> ‘Zlotkey’

结果:

clip_image002

总结:什么是子查询,可以理解为一种嵌套查询.

比如说:在这个例子中,要查Zlotkey相同部门的人名和入职日期

第一步:找到和Zlotkey相同部门的人的员工id

第二步:把这些员工id作为查询条件查询对应的人名和入职日期

第三步:排除Zlotkey本人的信息

在这里:出了部门id以外,如果有其他的具备唯一性的属性,也可以作为查询条件.不过在这个例子中,查询相同部门,一个部门只有一个id,所以用部门id来查询是最优选择.

2. 查询工资比公司平均工资高的员工的员工号,姓名和工资。

a) select last_name,employee_id,salary

b) from employees

c) where salary > (select avg(salary)

d) from employees)

结果:

clip_image004

总结:

通过测试,这里用分组查询是无法实现的,所以用了子查询.

如果要用单行函数,需要连续查询两次.子查询简化了这种步骤,直接把一个查询结果作为另一个查询的查询条件

实现步骤分析:

1. 查询需要查询的数据

2. 查找需要查询的条件

3. 将查询条件的语句赋值给第一步的条件

3. 查询各部门中工资比本部门平均工资高的员工的员工号, 姓名和工资

a) select employee_id,last_name,salary

b) from employees e1

c) where salary > (

d) select avg(salary)

e) from employees e2

f) where e1.department_id = e2.department_id

g) group by department_id

h) )

结果:

clip_image006

总结:

这里用到了子查询和分组查询.在查询数据的时候,笔者分析出了一种方法,那就是将题目的条件和需要查询的数据分离,这里第一次使用,我也做一下思考笔记.

题目分析:

条件:各部门工资比本部门平均工资高

要查询的数据:员工号,姓名,工资

要查询的数据是最没有难度的,直接照抄,条件则需要思考一番.比如说这里,各部门这个关键词说明需要按照部门分组,平均工资说明要分组查询各部门的平均工资,高说明用>符号

解题:

1. 写查询数据

2. 按照部门id分组查询各部门平均工资

3. 工资>(2的语句)赋值给1

4. 查询和姓名中包含字母u的员工在相同部门的员工的员工号和姓名

a) select employee_id,last_name

b) from employees

c) where department_id in (

d) select department_id

e) from employees

f) where last_name like ‘%u%’

g) )

h) and last_name not like ‘%u%’

结果:

clip_image008

总结:

条件:姓名中包含字母u %u% 的员工

查询数据:员工号和姓名

分析:

1. 数据语句 select employee_id,last_name from employees where

2. 条件语句 last_name=%u%

解题:

select employee_id,last_name from employees where last_name=%u%

clip_image010

以上为自己的思考,是错误的.

标准答案:

clip_image012

5. 查询在部门的location_id为1700的部门工作的员工的员工号

select employee_id

from employees

where department_id in (

select department_id

from departments

where location_id = 1700

)

结果:

clip_image014

总结:

条件:location_id=1700的部门

数据:员工的员工号

解题:

1. select employee_id from employees where location_id=1700

标准答案:

clip_image016

6.查询管理者是King的员工姓名和工资

select last_name,salary

from employees

where manager_id in (

select employee_id

from employees

where last_name = ‘King’

)

结果:

clip_image018

总结:

条件:管理者是King

查询数据:员工姓名,工资

解题:

Select last_name,salary from employees where

标准答案:

clip_image020

Oracle分组函数课后练习题

1. 组函数处理多行返回一行吗?

2. 组函数不计算空值吗?

3. where子句可否使用组函数进行过滤?

不可以,用having替代

4. 查询公司员工工资的最大值,最小值,平均值,总和

a) select max(salary),min(salary),avg(salary),sum(salary)

b) from employees

clip_image002

5. 查询各job_id的员工工资的最大值,最小值,平均值,总和

a) select job_id,max(salary),min(salary),avg(salary),sum(salary)

b) from employees

c) group by job_id

clip_image004

6. 选择具有各个job_id的员工人数

a) select job_id,count(employee_id)

b) from employees

c) group by job_id

clip_image006

7. 查询员工最高工资和最低工资的差距(DIFFERENCE)

a) select max(salary),min(salary),max(salary)-min(salary) “DIFFERENCE”

b) from employees

clip_image008

8. 查询各个管理者手下员工的最低工资,其中最低工资不能低于6000,没有管理者的员工不计算在内

a) select manager_id,min(salary)

b) from employees

c) where manager_id is not null

d) group by manager_id

e) having min(salary) >= 6000

clip_image010

9. 查询所有部门的名字,location_id,员工数量和工资平均值

a) select department_name,location_id,count(employee_id),avg(salary)

b) from employees e right outer join departments d

c) on e.department_id = d.department_id

d) group by department_name,location_id

clip_image012

10. 查询公司在1995-1998年之间,每年雇用的人数,结果类似下面的格式

total

1995

1996

1997

1998

20

3

4

6

7

select count(*) “total”,

count(decode(to_char(hire_date,’yyyy’),’1995′,1,null)) “1995”,

count(decode(to_char(hire_date,’yyyy’),’1996′,1,null)) “1996”,

count(decode(to_char(hire_date,’yyyy’),’1997′,1,null)) “1997”,

count(decode(to_char(hire_date,’yyyy’),’1998′,1,null)) “1998”

from employees

where to_char(hire_date,’yyyy’) in (‘1995′,’1996′,’1997′,’1998’)

clip_image014

我的第二款安卓app

先上效果图

image

好累啊,直接贴源代码截图吧.

准备出去跑步溜达了,放松一下,眼睛疼.

第一个Activity

image

第二个Activity

image

第一个Activity处理器

image

image

第二个Activity处理器

image

这个是用Android studio开发的.上效果图

点击以后跳转到另一个页面,会把信息传到另一个页面,同时也能够把另一个页面的信息带回.

信息显示在文本框中.

Oracle多表查询课后练习题

1. 显示所有员工的姓名,部门号和部门名称。

a) select last_name,e.department_id,department_name

b) from employees e,departments d

c) where e.department_id = d.department_id(+)

总结:

clip_image001

在右边的条件后面加上一个(+)表示右链接查询,是一种联合查询方法

在这里:如果不加上这个符号,会少一个人,也就是有名字但是没有部门的人,如果加载左边,则会出现有部门没有名字的人.

显示效果:

clip_image003

方法二:

select last_name,e.department_id,department_name

from employees e left outer join departments d

on e.department_id = d.department_id

总结:

clip_image004

这种方法和前面的方法都能够达到查询效果,区别在于一个用了 left outer join … on 条件 这样的语法,在执行效率方面应该做了优化,效率更高.

还有一点值得注意,这种表达式没有where来做判断依据.

2. 查询90号部门员工的job_id和90号部门的location_id

a) select distinct job_id,location_id

b) from employees e left outer join departments d

c) on e.department_id = d.department_id

d) where d.department_id = 90

总结:

clip_image005

这个查询语句比上面一个多了一个where条件判断,也多了一个distinct

clip_image007

3. 选择所有有奖金的员工的

last_name , department_name , location_id , city

select last_name,department_name,d.location_id,city

from employees e join departments d

on e.department_id = d.department_id

join locations l

on d.location_id = l.location_id

where e.commission_pct is not null

总结:

clip_image008

可以发现:这个同时查询了三张表,直接用的join on的语法

clip_image010

4. 选择city在Toronto工作的员工的

last_name , job_id , department_id , department_name

select last_name , job_id , e.department_id , department_name

from employees e ,departments d,locations l

where e.department_id = d.department_id and l.city = ‘Toronto’ and d.location_id = l.location_id

总结:

clip_image012

当出现多张表有相同列名而又同时需要查询这个列名的时候,必须指定你要查询的列名是哪张表的列名.

这个案例也是多表查询,不过不难发现,并没有用到join on语法

利用where and and 实现了joinon的查询效果

clip_image014

5. 选择指定员工的姓名,员工号,以及他的管理者的姓名和员工号,结果类似于下面的格式

employees

Emp#

manager

Mgr#

kochhar

101

king

100

select e1.last_name “employees”,e1.employee_id “Emp#”,e2.last_name”Manger”,e2.employee_id “Mgr#”

from employees e1,employees e2

where e1.manager_id = e2.employee_id(+)

总结:

clip_image016

这个查询的是同一张表,但是却查询了两次,起了两个别名.

clip_image018

升级adt插件后,eclipse突然出现Unable to build: the file dx.jar was not loaded from the SDK folder 错误

image

升级adt插件后,eclipse突然出现Unable to build: the file dx.jar was not loaded from the SDK folder 错误

Unknown error: Unable to build: the file dx.jar was not loaded from the SDK folder!

升级adt插件后,eclipse突然出现上面错误,无法运行android项目。

网上搜索了很多方法试过了都不行,clean,换workspace目录,把tools下的dx.jar拷贝到对应platform下面也不行,重启eclipse,更新sdk都不行。

最终在stackoverflow上搜索到一个方法试了以后才可以

platform-tools\lib folder was missing after upgrade (my eclipse was open). close eclipse, using sdk manager uninstall and install “Android SDK platform-tools”.

即先关闭eclipse,打开sdk安装目录下的SDK Manager.exe 顶部Tools 下面的两个勾选上以后点击下面的 Install packages 按钮更新,更新完成后启动eclipse就可以了

注:后来在另外一台电脑发现,如果sdk没有更新到最新版Tools下面的两个包是安装不了的,所以必须先更新sdk然后再更新Tools才行。