甲骨文理论学习的详细讲解以及如何解决各种简单的运算实例

1.数据库的开发过程

层次模型->;网格模型->;关系模型->;对象关系模型

2.关于数据库的概念

DB:数据库(存储信息的仓库)

DBMS:数据库管理系统(管理数据库的工具)

RDBMS:关系数据库管理系统

ORDBMS:一个对象关系数据库管理系统

3.Oracle数据库的主要特性

1)支持多用户、大交易处理。

2)数据库安全性和完整性控制

3)支持分布式数据处理

4)便携性

4.有哪些关于4的常见问题?甲骨文?

1)如果我只有一个表,为什么要创建数据库?

SQL语言要求所有的表都放在数据库中。这个设计当然有它的好理由。SQL可以同时控制用户访问表的行为。能够授予或撤销对整个数据库的访问权限。这有时比控制每个表的权限简单得多。

2)创建库的命令的字母都是大写的。这有必要吗?

有些系统确实要求某些关键字必须大写。但是SQL本身是不区分大小写的。也就是说,写命令用小楷是可以的,但是命令大写是一个很好的SQL编程习惯。

3)数据库、表、列的命名有什么想法吗?

创建描述性名称通常很有效。有时需要不止一个词来命名。所有名称都不能包含空格,因此使用下划线可以创建更具描述性的名称。命名时最好避免大写,因为SQL是不区分大小写的。很有可能数据库会出错。

4)为什么BLOB不能直接作为所有文本值的类型?

因为这是浪费空间。VARCHAR或CHAR只会占用特定的空间。不超过256个字符。但是BLOB需要大量存储空间。随着数据库的增长,占用存储空间有耗尽硬盘空间的风险。此外,一些重要的字符串操作不能在BLOB数据上操作。只能用于VARCHAR或CHAR。

5)为什么需要INT、DEC等数值类型?

节省数据库存储空间关系到效率。为表中的列选择最合适的数据类型,可以使表变得苗条,使数据操作更快。

5.Oracle关系数据库基础

1)主键:表中的一列或多列,其值可以唯一标识表中的每一行。

表中的任何列都可以用作主键,但必须满足以下条件:

没有两行具有相同的主键值。

每行必须有一个主键值(主键列不允许空值)。

不允许修改或更新主键列中的值。

主键值不能重复使用(如果从表中删除一行,它的主键值不能分配给以后的新行)

一般以id或uuid作为主键的名称。

2)什么是外键?

在一个关系(引用表)中,它是主键,另一个关系引用这个键。那么这个键就是另一个关系中的外键。

3)外部建筑能做什么?

要关联两个关系(表),外键只能引用引用表中的主键。维护数据的一致性和完整性。

如图所示:

4)如何在数据库中一一表示?

5)如何在数据库中表示一对多?

6)关系模型的完整性约束是什么?

就是通过关系的某种约束条件来约束关系。也就是说,当关系的值随时间变化时,要满足一些约束。如果年龄不能超过1000,性别必须是男或女。

7)关系模型的完整性约束是什么?

实体完整性、引用完整性、用户定义的完整性。

实体完整性:对于基本关系,即二维表,主键不能为空。

引用完整性:当表之间存在关系时,自然会有对该关系的引用(外键)。表与表之间的关系是通过外键实现的,外键可以为空,也可以引用表的主键。

自定义完整性:根据不同需求定义自己的完整性约束。比如学号里不允许有非数字字符,性别必须是男或女。

6.甲骨文自学笔记

1)数据库和表的名称不需要大写。

2)列是存储在表中的一段数据,行是一组列,可以描述一些东西。列和行组成一个表格。

3)创建一个oracle数据库。使用oracle自己的数据库配置助手创建一个库。

4)用DBA身份创建一个表空间。具体的sql如下:

创建表空间pzw数据文件' C:/oracle/pzw.dbf '大小1024M重用自动扩展脱离区管理本地段空间

管理汽车;

5)删除用户命令

丢弃用户pzw级联;

6)删除表空间命令

删除表空间pzw,包括内容和数据文件;

7)查看表空间命令。

链接地址:查看oracle表空间的两种方法

8)创建一个用户。

创建由pzw标识的用户pzw;

9)将包空间分配给用户。

更改用户pzw默认表空间pzw;

10)对用户进行授权。

将create session、create table、unlimited tablespace授予pzw

11)创建一个表。

创建表格圆环图_列表

多纳圈_name VARCHAR(10),

多纳圈_type VARCHAR(6),

甜甜圈_生日日期

);

12)删除表格

翻桌

甜甜圈_列表;

13)向表中添加一列。

更改表EMP添加销售编号;

将一条数据插入数据库。

插入到DEPT_EMP_TABLE (DEPT_EMP_NO,EMP_NO,Dept_No,Joined_Date)值(009,' 00002 ',1,to _ Date(' 2011-2-28 15:42:56 ',' yyyy-mm-DD hh24:mi:ss ');

提交;

15)数据库修改一条数据。

更新emp set emp_name= '阿美',年龄=20,性别= '女',职业= '流行歌手'其中emp _ no = ' 00002

提交;

16)删除数据库中的一条数据

删除emp,其中EMP _ no = ' 000013 ';

提交;

17)查询所有数据。

select * from emp

18)创建视图

创建视图adress _ view作为select * from pzw.adress

以下是oracle演示数据操作和练习(对新手和。使用scott登录。默认密码老虎)

1.查看演示数据表。

select*fromtab

或select table _ name from user _ tables;

2.检查表结构(plsql操作无效。您可以使用命名提示来操作)

desc部;

检查员工的姓名

从emp中选择ename;

4.查询员工的编号和星号(sql语句不区分大小写)

select empno,enamefrom emp

5.查询所有字段

select * fromemp

一般建议不要用*号,不清楚。建议把相关字段写在select语句的后面,效率很低。

6.列出员工人数、姓名、年薪。

从emp中选择empno,ename,sal * 12;

select语句中可以使用运算符,但是上面有一些问题,年薪的字段名不明确。

7.用中文显示查询的字段。

从emp中选择empnoas员工编号,ename作为员工姓名,sal*12作为年薪;

您可以使用as来命名别名,也可以省略as。

例如,as可用于命名别名,而as可以省略。

8.查询薪金等于5000的雇员。

select empno,ename,sal from emp其中sal = 5000

比较字符类型的数据时,区分大小写。

9.查询工资不等于5000的员工。

select empno,ename,sal from emp where sal & lt& gt5000;

10.查询职位不等于经理的员工。

select empno,ename,sal,job from emp where job & lt& gt

经理';

在sql语句中,如果一个字符串用单引号引起来,它与Java中使用的双引号不同。如果是数字,也可以用引号括起来,但数字数据被视为字符串。

11.查询工资为1600转3000的员工(第一种方法是>;=和

select empno,ename,sal from emp where sal & gt=1600和sal & lt=3000;

查询工资为1600到3000的员工(第一种方式是介于...和...).

从员工中选择员工编号、姓名、sal、职务

1600和3000;

在...之间...和...,包括最大值和最小值。

在...之间...和...不仅适用于数值数据,也适用于字符数据。

在...之间...和...,对两个参数的设置有限制,小数字在前,大数字在后。

12.查询有空白津贴的员工。

select * from emp where commis null

13.查询津贴不为空的员工。

select * from EMP where commis not null;

14.职位为经理且工资超过2500英镑的员工。

select empno,ename,sal from EMP where job = ' MANAGER ' and sal & gt;2500;

意味着所有的条件都必须满足。

15.找出哪些员工的工作是经理,哪些是销售员。

select * from emp其中job='MANAGER '或job = ' SALESMAN

或者,只要满足条件,相当于或

16.查询工资大于1800,部门号为二三十的。

select * from emp where sal & gt1800 and(deptno = 20或deptno = 30);

17.找出哪些员工的工作是经理,哪些是销售员。

select * from EMP where jobin(' MANAGER ',' SALESMAN ');

18.查询职务不等于经理,不能关联业务员员工(第一种写法)。

select * from emp where job & lt& gt“经理”和工作<。& gt‘推销员’;

19.查询职务不等于经理,不能与销售人员的员工相关联(第二种写法)。

select * from EMP where job not in(' MANAGER ',' SALESMAN

20.查询所有以m开头的雇员。

select * from EMP where name like ' M % ';

21.查询所有以t结尾的雇员。

select * from EMP where name like“% T”;

22.查询所有以o结尾的员工。

select * from EMP where name like“% O %”;

23.查询姓名中第一个字符是A的所有雇员。

select * from EMP where ename like ' _ A % ';

Like可以实现模糊查询,like支持%和下划线匹配。

Like中的%和下划线有什么区别?

%匹配任意字符任意次

下划线只匹配任何字符的一次出现。

Like语句可以应用于数值数据,但是%和下划线不能在没有引号的情况下使用。类似等号的运算,如果用引号,可以用%和下划线将数值型数据转换成字符型数据,然后进行处理。

24.按薪资从小到大排序。

由sal从emporder选择*;

如果有where子句,则order by必须放在where语句之后。

25.手工指定薪资从小到大排序。

select * from emp order by saldesc

26.按薪金和姓名排序

选择*从雇员订单由萨尔desc,伊纳梅desc;

如果使用多个字段进行排序,如果基于第一个字段的排序重复,将基于第二个字段进行排序。

select * from emp order by sal asc

26.手动指定薪资应按降序排序。

萨尔·desc的《选自《emporder

27.按薪资升序排列(按字段位置排序)

select * from EMP order by 6;

不推荐这种方法,因为数字的含义不明确,程序也不健壮。

28.查询员工。将所有员工姓名转换成小写。

从emp中选择lower(ename );

29.查询职位为经理的员工。

select * from EMP where job = upper(' manager ');

30.查询姓名以m开头的所有雇员。

select * from EMP where substr(ename,1,1)= ' M ';

方法的第二个参数表示查询字符的位置,0,1都表示第一个字符,负数表示从末尾开始的位置,第三个参数表示截取的字符串的长度。

31.获取雇员姓名的长度

从emp中选择长度(ename );

32.获取所有职位为经理的员工。

select * from EMP where job = trim(' MANAGER ');

Trim将删除前导空格和尾随空格,而不是中间空格。

33.查询1986-02-20入职的员工(第一种方法匹配数据库的格式)。

select * from EMP where hired = ' 20-Fe b-81 ';

查询1982-02-20入职的员工(第二种方法是将字符串转换为日期类型)。

select * from emp其中hiredate = to _ date(' 1981-02-20 00:00:00 ',' YYYY-MM-DD HH24:MI:SS ');

To_date可以把字符串转换成日期,具体格式是to_date(字符串,匹配格式)。

34.查询1981- 02-30之后入职的员工,入职日期格式为YY-MM-DD HH: MM: SS。

select empno,ename,to_char(hiredate,' yyyy-mm-DD hh24:mi:ss ')from EMP where hiredate & gt;to _ date(' 1981-02-2000:00:00 ',' YYYY-MM-DD HH24:MI:SS ');

35.加入前查询员工薪资。

select empno,ename,to_char(sal,' $999,999 ')from EMP;

36.查询薪资,加千分之一,保留两位小数。

select empno,ename,to_char(sal,' $999,999.00 ')from EMP;

将数字转换为字符串,格式化

功能字符

解释

代表一个数字。

没有足够的数字来填充零。

$

美元符号

L

当地货币符号

显示十进制数

,

显示千分之一

37.将字符串转换成数值

select * from emp where sal & gtto_number('1,500 ',' 999,999 ');

38.拿到员工全薪,工资+津贴。

select empno,ename,sal,comm,sal+nvl(comm,0)from EMP;

39.如果工作是经理,工资增加10%,如果工作是业务员,工资增加50%(案例…当…然后…结束)。

从emp中选择empno,ename,job,sal,(casejobwhen ' MANAGER ' then sal * 1.1 when ' sales ' then sal * 1.5 end)作为newsal

40.如果工作是经理,工资增加10%,如果工作是业务员,工资增加50%(解码)。

从emp中选择empno,ename,job,sal,decode(job,' MANAGER ',SAL*1.1,' SALESMAN ',sal*1.5)作为newsal

41.舍入

从dual中选择round(1234567.4567,2);

Dual是oracle提供的,主要是为了方便,因为选择时需要使用from。

42.聚集函数

数数

获取记录的数量

总和

求和

平均

平均的

最大

取最大的数

取最小的数

43.获取所有员工的人数

select count(*)from EMP;

Count(*)表示获得所有记录,忽略null,也将获得null值。

44.津贴不为空的员工数

从emp中选择计数(comm );

使用count(字段名),将不会获得为空的记录。

45.获取作业的数量

select count(distinct job)from EMP;

Distinct可以删除重复的记录。

46.挣得的总工资

从emp中选择sum(sal );

47总工资(销售+佣金)

select sum(sal+nvl(comm,0))from EMP;

48.获得平均工资

从emp中选择avg(sal);

49.拿最高工资

select max(to_char(hiredate,' yyyy-mm-DD '))from EMP;

50.拿最低工资

从emp中选择min(sal );

51.获取最早的员工。

从emp中选择min(hiredate );

52.这些集合函数可以在select中一起使用。

从emp中选择count(*)、sum(sal)、avg(sal)、max(sal)、min(sal);

53.要获得每个职位的总薪资,需要显示职位名称和总薪资。

select job,sum(sal)from EMP group by job;

使用group by时,非聚合函数使用的字段必须参与分组。

不能在Group by中使用聚合函数。

如果使用order by,则order by必须放在group by之后。

54。获得每个岗位2000以上的平均工资。

从员工组中选择职务,平均值(sal)按具有平均值(sal)>的职务2000;

分组功能的执行顺序:

1.根据条件查询数据

2.分组

3.使用having滤波获得正确的数据。

55.显示每个员工的信息及其所属部门的名称。

select ename,dname from emp a,dept b其中a . dept no = b . dept no;

上面的查询也叫“内连接”,指的是查询相等的数据。

56.获取员工及其经理的姓名。

select a.ename,b.ename from emp a,emp b其中a . mgr = b . empno;

以上称为“自连接”,只有一个表连接。具体的查询方法

57.(内部链接)显示工资在2000以上的员工信息,并显示所属部门名称。

SQL99语法:

select ename,sal,dname from EMP a join dept b on a . deptno = b . deptno where sal & gt;2000;

SQL92语法

select ename,sal,dname from emp a,dept b,其中a . deptno = b . deptno and sal & gt;2000;

Sql92语法和sql99语法的区别:99语法可以把表和查询条件的连接分开,尤其是多个表连接的时候,会比sql92更清晰。

58.(外部链接)显示工资在2000以上的员工信息,并显示所属部门名称。如果某个部门没有员工。那么也必须显示部门。

select dname,ename from EMP a right join dept b on a . deptno = b . deptno;

59.查询员工姓名和经历名称。如果没有上级经理,也要查询出来。

Select e.ename,m.ename mname from emp e,EMP m where m . empno(+)= e . mgr;

60.查询员工信息,经理是谁。要求显示员工编号和员工姓名。

select ename,ename from EMP where empno in(select distinct mgr from EMP where mgr not null);

61.要找出谁的工资高于员工的平均工资,需要显示员工编号、员工姓名和工资。

select empno,ename,sal from emp where sal & gt(从emp中选择avg(sal));

分析思路:首先根据文字描述找出依赖条件,逐一分析。

62.要查询各部门平均薪资的等级,需要显示部门号、平均薪资和等级号。

select a.deptno,a.avg_sal,b.grade from (select deptno,avg(sal)avg _ sal from EMP group by deptno)a,salgrade b其中a.avg_sal介于b.losal和b.hisal之间;

要点:将子查询视为一个表。

63.查询员工信息和部门名称

Select e.empno,e.ename,e.deptno,(select dname from dept,其中deptno = e.deptno)作为emp e中的dname

union可以合并集合(add)

select * from emp其中job='MANAGER '

联盟

select * from EMP where job = ' SALESMAN '

65 .减号可以移出集合(减法)

查询10和20的部门号,取出薪资大于2000的。

select * from EMP where deptno in(10,20)

负的

select * from emp where sal & gt2000

rownum隐藏字段

select rownum,a. * from emp a

67.获取前五个数据。

select * from emp where rownum & lt=5;

68.拿到工资前五。

select empno,ename,sal from (select empno,ename,sal from EMP order by sal desc)where rownum & lt;=5