Oracle期末复习

create tablespace  bookspace
datafile 'E:\test\bookspace.dbf'
size 50m
autoextend on
next 20m
maxsize 300m;

创建表空间

create temporary tablespace booktemp
datafile 'E:\test\booktemp.dbf'
size 50m
autoextend on
next 30m;

创建临时表空间

create undo tablespace booktemp
datafile 'E:\test\booktemp.dbf'
size 50m
autoextend on
next 30m;

撤销表空间

char--最大长度为2000  varchar2--最大400字节  number--可变长度的数字 int\integer\smallint--number的子类型  date--日期类型

常见的数据类型

create table person(
	id number(4),
	name varchar2(10),
	sex char(2),
	birthday date;
);

创建一个person表,由于没有指定存储表空间,所以该表将被存放在默认表空间中。

alter table person add email varchar2(20);

为表添加一列

alter table person add (email varchar2(20),adress varchar2(30));

为表添加多个列

alter table person drop column email;

删除一列

alter table person drop (email,adress);

删除多个列

alter table person rename column email to eml;

修改表中的列名

DESC person;

查看表结构

alter table person rename to person01; 

修改表名

drop table person;

删除表

1 表的完整性约束

1.1 约束的分类

1.1.1 NOT NULL约束

not null约束是指非空约束,用于要求向表中添加记录时必须为被约束的列提供数据,否则错误。not null 只能在列级别上定义,一个表中可以定义多个not null约束。

创建表时添加非空约束

create table person(
	id number(4)  not null,
	name varchar2(10),
	sex char(2),
	birthday date;
);

添加非空约束

alter table person modify id not null;

删除非空约束

alter table person modify id null;

1.1.2 UNIQUE约束

UNIQUE约束是指唯一约束,用于要求列中不允许出现重复值。可以为单独的列添加,也可以为多个列添加一个约束(此时属于表级约束)。如果为多个列添加一个约束,只需要保证这多个列的值不完全相同就行了。

创建表时添加UNIQUE约束

create table person(
	id number(4)  not null,
	name varchar2(10)  unique, 
	sex char(2),
	birthday date;
);

添加unique约束

alter table person add unique(name);        --和添加非空约束语法不一样

删除unique约束

alter table person drop unique(name);       --删除语法也和删除非空约束不同
--或
alter table person drop constraint name;

1.1.3 PRIMARY KEY 约束

PRIMARY KEY约束是指主键约束,用于唯一标识一行记录(主键可以由一列或者多列组成)。在一个表中只能定义一个PRIMARY KEY约束,该约束可以定义在单独的列上,也可以定义在多个列上(表级约束)。定义了PRIMARY KEY约束的列或者列组合不能有重复值,也不能有NULL值 ------- PRIMARY KEY约束在效果上相当于unique约束和not null约束,但它们之间不能划等号。

1.创建表时添加PRIMARY KEY 约束
1.create table person(
	id number(4)  primary key,
	name varchar2(10)  unique, 
	sex char(2),
	birthday date;
);
2.create table person(
	id number(4) ,
	name varchar2(10)  unique, 
	sex char(2),
	birthday date,
	primary key(id);
);
2.添加PRIMARY KEY 约束
alter table person add primary key(id);          --和unique约束类似
3.删除PRIMARY KEY约束
--形式上只能采用指定约束名的方式
alter table person drop constrain id;

1.1.4 CHECK约束

CHECK约束是指检查约束,用于指定一个条件,对传递给列的数据进行检查,符合条件的数据才允许赋值给该列,否则提示错误。可以为表中的一个列或一组列定义CHECK约束,并且CHECK约束默认情况下只对定义之后插入的数据起作用。

1.创建表时,为列添加CHECK约束
create table person(
	id number(4),
	sex char(2) CHECK (sex in ('男','女'));
);
2.为已经创建的表添加CHECK约束
alter table person add check (sex in('男','女'));

1.1.5 FOREIGN KEY约束

FOREIGN KEY 约束是指外键约束,用于引用本表或者另一个表中的一列或一组列。FOREIGN KEY约束具有如下的特点:

  • 被引用的列或者组列应该具有主键约束或者唯一约束。
  • 被引用列的取值只能为被引用列的值或者NULL值
  • 可以为一个列或者一组列定义FOREIGN KEY约束
  • 引用列和被引用列可以在一个表中,这种情况被称为“自引用”
  • 如果引用列中存储了被引用列的某个值,则不能直接删除被引用列中的这个值,否则会与第二条相矛盾。如果一定要删除,需要先删除引用列中的这个值,然后再删除被引用列中的这个值
  • 通常将引用表称为父表而将被引用表称为子表。
constraint 引用表名_被引用表名 foreign key(列名) references 被引用表名(列名)
--表创建之后怎么为表添加约束
alter table table_01 add foreign key(列名) references table_02(列名);

实例:

ALTER TABLE test ADD CONSTRAINT test_test02 FOREIGN KEY test(pid) REFERENCES test02(pid); 

1.2 练习–为图书管理系统创建表

1.2.1 创建表空间–bookspace

create tablespace bookspace
datafile 'E:\test\bookspace.dbf'
size 100m
autoextend on
next 50m
maxsize 500m;

1.2.2 创建类别表type

create table type(
	typeid number(20) primary key,
	typedname varchar2(20) unique not null
)tablespace bookspace;

1.2.3 创建管理员等级表grade

create table grade(
	gradeid number(10) primary key,
	gradename varchar2(10) unique not null
)tablespace bookspace;

1.2.4 创建图书信息表book

create table book(
	bookid number(10)  primary key,
	booknumber char(8) unique not null,
	bookname varchar2(10) not null,
	bookpress varchar2(10) not null,
	bookprice number(8,2) not null,
	typeid varchar2(10) not null,
	booktime date not null,
	constraint book_type foreign key(typeid)
	references type(typeid)
)tablespace bookspace;

2 索引

​ 索引是数据库中用于存放表中每一条记录的位置的一种对象,其主要目的是为了加快数据的读取速度和完整性检查。不过,创建索引需要占用许多的存储空间,而且在向表中添加和删除记录时,数据库需要花费额外的开销来更新索引。因此,在实际应用中应该确保索引能够得到有效利用。

2.1 创建B树索引

​ B树索引是Oracle中最常用的,也是默认的索引类型。

​ B树索引的逻辑类似与一颗树,其中主要的数据都集中在叶子的节点上,每个叶子节点中包括:索引列的值和数据行对应的物理地址rowid。

​ 提示:Oracle数据库内部使用rowid来存储表中数据行的物理地址。使用索引查找数据时,首先通过索引列的值查找到rowid,然后通过rowid找到记录的物理地址。

为一个表创建索引

create index index_name
on person(name)
tablespace myspace;

注:在Oracle中,索引无论是从逻辑上还是从物理上都不依赖于相应的表,它可以拥有独立的存储空间。

2.2 创建基于函数的索引

基于函数的索引也是B树索引,只不过它存放的不是数据本身,而是存放经过函数处理后的数据。如果检索数据时需要对字符大小写或者数据类型进行转化,则使用这种索引可以提高检索效率。

例子 1:对person表中的name列的值CANDY进行查找,需要用到

select * from person where name='CANDY';

上述语句中的字符串CANDY必须与列中存储的值的大小写保持一致,否则将无法查询到该行记录。很不方便,所以在查询时通常会使用函数对数据进行转换,如下:

select * from person where lower(name)='candy';

问题:此函数作用后在检索时是必须使用全部小写的形式还是可以使用部分小写的形式进行查询。

如果在查询时使用函数进行了转换,那么这个查询将不会使用该列上的普通索引(上面2.1就属于普通索引),这时就需要创建基于函数的索引。

create index name_lower_index
on person(lower(name))
tablespace myspace;
/**
	创建基于函数的索引和创建普通索引的语法很类似。

*/

2.3 创建基于位图的索引

​ 位图(位映射)索引与B树索引不同,使用B树索引时,通过在索引中保存排过序的索引值,以及数据行的rowid来实现快速查找。而位图索引不存储rowid值,也不存键值,它一般在包含少量不同值的列上创建。

怎么理解:

​ 例如person表中的sex 列,它只有两个取值:“男”或“女”,所以该列上不适合创建B树索引,因为B树索引主要用于对大量不同的数据进行细分。

建议:

​ oracle建议,当一个列的所有取值与表的行数之间的比例小于1%时,就不适合在该列上创建B树索引。

对person表中的sex列添加位图索引。

create BITMAP INDEX index_name
on person(sex)
tablespace myspace

2.4 管理索引

2.4.1 重命名索引

重命名索引的语法形式如下所示:

alter index index_name rename to new_index_name;

2.4.2 合并索引

在实际使用过程中,需要对表中的数据不断进行更新,这会导致表的索引中产生越来越多的存储碎片,这些碎片会影响索引的使用效率。

合并索引可以清除索引中的存储碎片,其语法如下:

alter index index_name COALESCE[DEALLOCATE UNUSED];

其中,COALESCE表示合并索引;DEALLOCATE UNUSED表示合并索引的同时,释放合并后多余的空间。

2.4.3 重建索引

重建索引也可以清楚索引中的存储碎片,不过,它在清楚索引碎片的同时,还可以改变索引的全部存储参数设置,以及改变索引的存储表空间。

对person表中的name列的index_name索引进行重建,如下:

alter index index_name
rebulid
initrans 5
maxtrans 10
tablespace myspace;

重建索引实际上是在指定的表空间中重新建立一个新的索引,然后在删除原来的索引。

2.4.4 监视索引

2.4.5 删除索引

语法如下:

drop index index_name

在删除一个表时,Oracle会删除所有与该表相关的索引。

3 视图

视图是一个虚拟表,它不存储真实的数据,它的行和列的数据来自于定义视图的子查询语句中所引用的表,这些表通常也称为视图的基表。视图可以建立在一个或者多个表(或者其它视图)上,它不占用实际的存储空间,只是在数据字典中保存它的定义信息。

3.1 创建视图

例1 在scott用户下创建基于一个emp表的视图,并对该视图进行查询。

  1. 由于scott用户没有create view 的权限,所以需要先通过system用户授予scott用户相应的权限。

    CONNECT system/admin;
    GRANT CREATE VIEW TO scott;
    

    2.使用scott用户连接数据库,并创建基于emp表的视图emp_view,如下:

create view emp_view
as
select empno,ename,job,sal,deptno
from emp where sal>2500;

3.查询emp_view视图,如下:

select * from emp_view;

下面将基于多个表,或者对子查询检索的列进行函数或者数学计算的视图称为复杂试图。

例2 创建基于一个emp表的视图emp_view2,并且对子查询中检索的sal列进行数学计算,查询工资上涨10%以后的工资大于2500的员工信息,如下:

create view emp_view
as
select empno,ename,job,sal*0.1 sal_new,deptno  --这里sal*0.1 sal_new是为sal*0.1取别名
from emp where sal*0.1>2500;

如果对列进行了函数运算或者数学计算,则必须为该列定义别名,可以选择在视图名称的后面定义或者在子查询中定义。

例3 创建基于emp表与dept表的视图emp_view3,在该视图的子查询中检索员工信息的同时显示其部门名称,如下:

create view emp_view3
as
select e.empno,e.ename,e.job,e.sal,d.dname
from emp e LEFT JOIN dept d ON e.depton=d.depton;

3.2 对视图执行DML操作

对视图进行DML操作,实际上就是对视图的基表执行DML操作。但是,并不是视图中的所有列都支持DML操作。一般来说,简单视图的所有列都支持DML操作,而对于复杂视图来说,如果该列进行了函数或者数学运算,或者在表的连接查询中该列不属于主表中的列,则该列不支持DML操作。

注:

​ 在表的连接查询中,from子句中指定的第一个表属于主表,例如创建emp——view3视图的子查询语句的from语句中指定的第一个表为emp,则emp表为主表。

例1 使用insert语句,向emp_view2视图中支持DML操作的列插入数据,具体如下:

insert into emp_view2 (empno,ename,job,deptno)
values (6400,'CANDY','CLERK',20);

4 序列

在Oracle中,可以使用序列自动生成一个整数序列,主要用来自动为表中的数据类型的主键列提供序列的唯一值,这样可以避免在向表中添加数据时,手工指定主键值。而且使用手工指定主键值这种方式时,由于主键值不允许重复,因此它要求操作人员在指定主键值时自己判断新添加的值是否已经存在,这很显然是不可取的。

4.1 创建序列

序列与视图一样,并不占用实际的存储空间,只是在数据字典中保存它的定义信息。创建序列需要使用create sequence语句,其语法

1 创建一个序列

create sequence student_seq
start with 1
increment by 1
nocache
nocycle
order;

2 使用序列

	1.Currval:用于获取序列的当前值。使用形式为<sequence_name>.currval。必须在使用一次nextval之后才能使用此伪列。

​ 2.nextval:用于获取序列的下一个值。使用序列向表中的列自动赋值时,就是使用此伪列。使用形式为<sequence_name>.nextval。

例 :

首先创建一个student表

create table student(
	sid number(10) primary key,
	sname varchar(10)  not null
);

然后向student表中添加记录,并使用之前创建的student_sequenec序列,为student表中的sid列自动赋值,如下:

insert into student(sid,sname)
values (student_seq.nextval,'CANY');

insert into student(sid,sname)
values (student_seq.nextval,'track');

5 SQL语言基础

5.1 SQL语言概述

​ 结构化查询语言(Structured Query Language,SQL)是目前最流行的关系查询语言,也是数据库的标准语言。

5.2 SQL语言分类

​ SQL语言按照实现的功能不同,主要可以分为3类:数据操纵语言、数据定义语言、数据控制语言。分别介绍如下。

1 DML–数据操纵语言

​ 数据操纵语言主要用来数据库中的数据内容。DML允许用户对数据库中的数据进行查询、插入、更新、和删除等操作。

 SELECT  从表或视图中检索数据行。

​ INSERT  插入数据到表或视图。

​ UPDATE  更新

​ DELETE   删除

​ CALL  调用过程

​ MERGE  合并(插入或者修改)

​ COMMIT  将当前事务所做的更改永久化(写入数据)

​ ROLLBACK  取消上次提交以来的所有更改

2 DDL–数据定义语言

​ 数据定义语言是一组SQL命令,用于创建和定义数据库对象,并且将这些对象的定义保存到数据字典中。通过DDL语句可以创建数据库对象、修改数据库对象和删除数据库对象等。

 create		    创建数据库结构

​ alter           修改数据库结构

​ drop		    删除数据库结构

​ rename	        更改数据库对象的名称

​ truncate        删除表的全部内容

3 DCL–数据控制语言

​ 数据控制语言用于修改数据库结构的操作权限。DCL语句主要有两种

 GRANT                授予其他用户对数据库结构的访问权限

​ REVOKE               收回用户访问数据库结构的权限

5.3 使用select语句检索数据

from:在select语句中from子句是必不可少的,该子句用来指定所要查询的表或者视图的名称列表。

where: 在执行查询操作时,通过使用where子句,可以指定查询条件,限制查询结果。

where子句中的操作符:

​ = 等于

​ <> !=

​ >= > <

​ ANY 与一个列表中的任何值进行比较

​ ALL 与列表中的所有值进行比较

​ BETWEEN 指定条件在两个值之间,包括边界值

​ LIKE 一般用于模糊查询

​ IN 匹配的一个列表值

ANY

使用ANY操作符,从scott用户的emp表中,检索员工的编号大于7700、7800、7900中的任何一个值的数据行。

select * from scott.emp
where empno > ANY(7788,7800,7900);

ALL

使用ALL操作符,从scott用户的emp表中,检索员工的编号大于7700、7800、7900中这3个值的数据行。

select * from scott.emp
where empno > ALL(7788,7800,7900);

BETWEEN

在where子句中可以使用BETWEEN操作符,用来检索列值包含在指定区间的数据行。这个区间是闭区间,这意味着包含区间的两个边界值。

使用BETWEEN操作符,从scott用户的emp表中,检索empno列的值在7800和7900之间的记录,如下:

select * from scott.emp
where empno BETWEEN 7800 AND 7900;

select * from scott.emp
where empno NOT BETWEEN 7800 AND 7900;

LIKE

在where子句中可以使用LIKE操作符,用来查看某一列中的字符串是否匹配指定的模式。所匹配的模式可以使用普通字符和下面两个通配符的组合指定。

  • 下划线字符(_):匹配指定位置的一个字符。
  • 百分号字符(%): 匹配从指定位置开始的任意个字符。

如果需要对一个字符串中的下划线和百分号字符进行文本匹配,可以使用ESCAPE选项标识这些字符。ESCAPE后面指定一个字符,该字符用来告诉数据库,在字符串中该指定字符后面的字符表示要搜索的内容,从而区分要搜索的字符和通配符。例如:‘%%%’ ESCAPE ‘\’ 其中,在ESCAPE后面指定反斜杠(\)字符,那么在前面的字符串‘%%%’中,反斜杠后面的字符(也就是第二个%)表示要搜索的实际字符。第一个%是通配符,第三个%也是通配符,可以匹配任意个字符。所以,字符串‘%%%’ 用于匹配任意包含百分号(%)的字符串。

对scott用户的emp表进行检索。在where子句中,使用like操作符,并使用下划线字符和百分号字符,对ename列指定匹配模式为“B_A%”。

select * from scott.emp
where ename like "B_A%";

IN

在where子句中可以使用IN操作符,用来检索某列的值在某个列表中的数据行。

使用IN操作符,从scott用户的emp表中,检索员工的编号为7700、7800、7900的数据行。

select * from scott.emp
where empno IN(7788,7800,7900);

5.4 ORDER BY子句

通过ORDER BY子句可以强制一个查询结果按照升序或者降序进行排列。

在最后加上语句ORDER BY

DESC为降序,ASC为升序。

5.5 GROUP BY子句

在有些情况下,需要把一个表中的行分为多个组,然后将这个组作为一个整体,获得该组的一些信息,例如获取部门编号为10的员工人数,或某个部门的员工的平均工资等。

对数据分组后,主要是使用一些聚合函数对分组后的数据进行统计。

5.6 HAVING子句

(通常与GROUP BY子句一起使用),在完成GROUP BY子句的分组以后再通过HAVING子句对分组的结果进行进一步的筛选。

5.7 distinct关键字

distinct关键字用来限定再检索过程中显示不重复的数据,对于重复值,只显示其中的一个。

select distinct deptno from emp;

5.8 算术运算符

在执行数学和日期运算时通常使用系统提供的dual表进行。

使用select语句,执行数学运算,实现从1到9的四则运算,如下:

select 1+2+3+(4*5/6-7)+8+9 from dual;

使用select语句,执行日期运算,实现在2009年8月21日的基础上加上2天的运算。具体如下:

select TO_DATE('21-8月-2009')+2 from dual; 

5.9 练习

5.10 使用DML语句

INSERT

INSERT into person(pid,pname,sal) values(12,'黄淮',5000);;

UPDATE

UPDATE person set sal=sal+50;

在update语句的set子句中,可以使用select子查询语句。在select子查询语句中使用聚合函数AVG获得sal列的平均值,将该值赋给empno为7935的员工的sal列。具体如下:

update scott.emp
set sal=(select avg(sal) from scott.emp)
where empno=7935;

DELETE

DELETE FROM person WHERE pid=12;

MERGE

使用MERGE语句,可以对指定的两个表执行合并操作。

5.11 使用函数

字符串函数

img

数字函数

ABS:

绝对值

6 事务处理

事务是由一系列相关的SQL语句组成的最小逻辑工作单元。Oracle系统以事务为单位来处理数据,用来保证数据的一致性。

6.1 概念和特性

数据库中的事务是工作中的一个逻辑单元,由一个或多个SQL语句组成。如果对事务执行提交,则该事务中进行的所有操作均会提交,成为数据库中的永久的组成部分。如果事务遇到错误而被取消或者回滚,则事务中的所有操作均被清除,数据恢复到事务执行前的状态。也就是说一个事务中的所有SQL语句要么全部被执行,要么全部没有执行。

一组SQL语句操作要成为事务,数据库管理系统必须保证这组操作符合事务的四个特性:

在Oracle数据库中,没有提供开始事务处理语句,所有的事务都是隐式开始的。Oracle认为第一条修改数据库的语句,或者一些要求事务处理的场合都是事务隐式的开始,当用户需要终止一个事务处理时,必须显式地执行commit语句或者rollback语句,分别用来提交事务和回滚事务。

6.2 提交事务

会使用到LGWR进程

6.3 回滚事务

使用ROLLBACK语句

7 子查询和高级查询

7.1 子查询

在外部的select、update、或者delete语句内部使用select语句,这个内部select语句称为子查询。使用子查询,主要是将子查询的结果作为外部主查询的查找条件。

7.2 子查询的分类

7.3 在where子句中使用子查询

在select语句的where子句中可以使用子查询,表示将子查询返回的结果作为外部的where条件。

7.3.1 使用子查询

检索scott用户中的emp表中的数据,在where子句中使用子查询。现在已经知道员工的编号是7782.

select empno,ename,sal,deptno  from  emp  e

where deptno=(select deptno from emp  where  empno=7782  );

不能使用ORDER BY子句

7.4 在HAVING子句中使用子查询

在select语句中使用HAVING子句,可以实现对数据进行分组过滤。在HAVING子句中,如果使用子查询,那么就可以实现对子查询返回结果根据分组进行过滤。

SELECT 姓名,AVG(消费总额) FROM record
GROUP BY 姓名
HAVING AVG(消费总额)<(SELECT AVG(消费总额) FROM record);

7.5 使用IN操作符实现指定匹配查询

多行查询可以向外部的SQL语句返回一行或多行记录。要处理多行记录的子查询,外部查询需要使用多行操作符。

SELECT * FROM vip WHERE 账号 IN(SELECT 账号 FROM vip 
WHERE 姓名 IN('李四','张明诚'));

7.6 使用ANY操作符实现任意匹配查询

在进行多行子查询时使用ANY操作符,用来将一个值与一个列表中的所有值进行比对,这个值只需要匹配列表中的一个值即可,然后将满足条件的数据返回。其中,值列表可以是子查询的返回条件。在使用ANY操作符之前,必须使用一个单行操作符,例如=、>等。

对scott用户的emp表进行操作,获得工资大于任意一个部门的平均工资的员工信息,如下:

select * from scott.emp where sal > ANY(select avg(sal) from scott.emp
	group by deptno
);

7.7 使用ALL操作符实现全部匹配查询

参考7.6

7.8 实现多列子查询

单行子查询是指子查询只返回单行单列数据;多行子查询是指子查询返回多行单列数据,两者都是针对单行而言。所以前面的示例中,子查询都是返回单个的列。

多列子查询则是指返回多列数据的子查询语句。当多列子查询返回单行数据时,在where子句中可以使用单行操作符;返回多行数据时,在where子句中必须使用多行操作符。

SELECT * FROM vip WHERE(账号,姓名) IN(SELECT 账号,姓名 FROM vip GROUP BY 账号);

7.9 实现关联子查询

select * from  scott.emp   outer
where  sal<(
	select  avg(sal)  from  scott.emp  inner  where  
    inner.deptno=outer.deptno
);

上述语句的执行过程为:首先从emp表中检索所有的行,将这些行分别传递给内部查询。内部查询依次读取每一行数据,对内部查询中deptno列计算每个部门的平均工资,然后将小于平均工资的员工信息输出。

使用EXISTS操作符(常用于关联子查询):

select	*	from	scott.emp	outer	where	exists(
	select   empno	from	scott.emp	inner	where
	inner.empno=outer.empno	and	substr(hiredate,8,2)='80'
);

使用exits操作符,只是检查子查询返回的数据是否存在,因此,在子查询中可以不返回一列而返回一个常量值。

7.10 实现嵌套子查询

7.11 高级查询

1 使用等号实现多个表的简单连接

在连接查询中,如果仅仅通过select子句和from子句连接多个表,那么查询的结果将是一个笛卡尔积所生成的表。在笛卡尔积所生成的表中包含了大量的冗杂信息。在检索数据时,为了避免冗杂信息的出现,可以使用where子句限定检索条件。在where子句中使用等号(=)可以实现表的简单连接,表示第一个表中的列与第二个表中相应列匹配后才会在结果集中显示。

2 使用表的别名

as关键字

3 内连接inner jion实现多个表的内连接
1 等值连接

使用INNER JOIN 连接两个不同的表scott.emp和scott.dept,ON用来设置连接条件,使用WHERE子句限制查询范围。检索accounting部门的员工信息,如下:

SELECT 账号,v.姓名,性别,住址,电话,折扣,注册时间,消费总额
FROM vip v INNER JOIN record r ON v.`姓名`=r.`姓名`
WHERE  账号='001';
2 不等连接

所谓不等连接,就是在连接条件中使用除等号以外的其它比较运算符,构成非等值连接查询。可以使用的比较运算符包括:大于、小于、大于等于、小于等于、不等于、LIKE、IN和BETWEEN等。

通过scott用户的emp表和salgrade表,查询员工的工资等级。使用BETWEEN运算符,建立不等连接,如下:

select  empno,ename,sal,grade

from scott.emp e inner join scott.salgrade s

where e.sal between s.losal and s.hisal;
3 自然连接

自然连接是在两个表中寻找列名和数据类型都相同的字段,通过相同的字段将两个表连接在一起,并返回所有符合条件的结果。

select e.empno,e.ename,e.sal,deptno,d.dname
from scott.emp e NATURAL JOIN scott.dept d
where d.dname ='ACCOUNTING';

8 用户以及权限控制

参考:http://www.ibooker.cc/article/65/detail

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

索半斤_suobanjin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值