Oracle学习笔记
Oracle学习笔记
一、Oracle安装
1. Oracle下载地址:
http://www.oracle.com/technetwork/database/enterprise-edition/downloads/index.html
2. 安装
win8系统安装Oracle 11g报错:[INs-13001]环境不满足最低要求--解决办法 :http://blog.csdn.net/h254541060/article/details/48530375
二、用户和表空间
1.用户与表空间
用户:sys,system(sys权限最大)
sysman操作企业管理器,管理员级别的
scott(默认的密码是tiger)
2.使用system用户登录
[username/password][@server][as sysdba|sysoper]
system/123456 @orcl as sysdba (其中orcl为服务名)
sys用户也可这么登录 connect sys/123456 as sysdba; (此处省略了服务名,是因为在本机上登录的)
3.查看登录用户
Show user命令
Dba_users数据字典(数据字典是数据库提供的表,用于查看数据库的信息。)
4.启用scott用户
启用用户的语句:alter user username account unlock;
Scott默认的密码为:tiger
在Oracle数据库中默认的用户下,scott的权限最低。
5.表空间
通俗理解表空间:
把电脑看做为一个数据库,而表空间就相当于C盘、D盘....,一个数据库中可以只有一个表空间,就如同电脑只只有一个C盘一样;同时也可以设有多个表空间,就如同电脑有C、D、E、F多个磁盘空间一样。表空间如同磁盘空间,表空间里是存放:表、视图、索引等内容的,就如同C、D、E等磁盘一样可以存放文本件。
数据库与表空间:表空间是数据库的逻辑存储空间。可以理解为在表空间中开辟一个空间用来存储数据库的对象。一个数据库可以由多个表空间构成。Oracle很多优化都是通过表空间来实现的。
表空间与数据文件:表空间是由一个或多个数据文件构成,数据文件的位置,大小可由用户定义。表,数据库当中的一些其他的对象都是存放在表空间中的数据文件里面的。
表空间的分类:
1.永久表空间:表,视图,存储过程
2.临时表空间:数据库操作过程中的中间执行的过程,执行完后会被释放掉
3.Undo表空间:保存数据表修改前的信息储存。
6.查看用户的表空间
Dba_tablespaces、user_tablespace数据字典
Dba_tablespaces该数据字典针对的系统管理员级的用户来查看的数据字典,
user_tablespace该数据字典为普通用户登录后来查看的数据字典。
来查看数据字典里的字段:desc dba_tablespaces
查看表空间的名字:select tablespace_name from dba_tablespaces
作为系统管理员登录的时候,对应的表空间(dba_tablespaces下面的表空间)默认情况下为这6个:
System:用来存放sys用户的表、视图以及存储过程的数据库对象,也被我们称为是一个系统表空间。
Sysaux:作为example的一个辅助表空间。
Undotbs1:主要用于存储撤销信息的。
Temp:存储sql语句处理的表和索引信息的,他是一个临时表空间。
Users:属于一个永久性表空间,存储数据库用户创建的数据库对象。
Example:安装oracle11g数据库实例来使用的一个表空间。
普通用户的表空间:
Desc user_tablespaces
普通用户登录之后有哪些表空间:select tablespace_name from user_tablespaces
有6个:
System
Sysaux
Undotbs1
Temp
Users
Example
Dba_users、user_users数据字典
Dba_users 系统管理员级的可以查看的数据字典
user_users普通用户登录的查看的,管理员也可以查看。
每一个用户下面可以对应着默认的表空间和临时的表空间。
默认的表空间就是将来在该用户登录后,在该用户下面创建这些对象所存放的位置。
临时表空间:存放的是临时的信息。正常情况下,只有一个临时表空间为temp,要想使用其他的表空间,需要自己来建。
查看默认的表空间和临时表空间:
Select default_tablespace,temporary_tablespace from dba_users where username = ‘SYSTEM’;
设置用户的默认或临时表空间
Alter user username default|teamporary tablespace tablespace_name(不区分大小写)
Eg:
Alter user system default tablespace system;(将system默认表空间更改为system)
7.创建表空间
Create[temporary] tablespace tablespace_name
tempfile|datafile ‘xx.dbf’ size xx;
(datafile 为数据文件的名字,文件名.dbf size数据文件的大小;tempfile为临时文件)
7.1创建一个永久表空间:
Create tablespace test1_tablespace datafile ‘test1file.dbf’ size 10m;
7.2创建一个临时表空间:
Create temporary tablespace temptest1_tablespace temfile ‘temfile1.dbf’ size 10m;
8.如何查看表空间的具体路径:
在永久表空间中,通过dba_data_file这个数据字典进行查看。
8.1查看该数据字典当中包含的字段:Desc dba_data_file
查看永久表空间的文件名
Select file_name from dba_data_files where tablespace_name
=’TEST1_TABLESPACE’; (此处表空间的名字需大写)
该路径为:默认情况下数据文件存放的位置
8.2查看临时表空间的文件名
在临时表空间中,通过dba_temp_file这个数据字典进行查看。
Select file_name from dba_temp_files where tablespace_name
=’TEMPTEST1_TABLESPACE’; (此处表空间的名字需大写)
该路径为:默认情况下数据文件存放的位置
9.修改表空间
9.1修改表空间的状态
Alter tablespace tablespace_name online|offline;
如何知道某一个表空间处于一个什么状态呢?
Desc dba_tablespaces; 查看表空间有哪些字段
Select status from dba_tablespaces where tablespace_name =’TEST1_TABLESPACES’;
(表空间的名字要大写)
设置只读后可读写的状态(默认情况下为read write)
Alter tablespace tablespace_name read only|read write
只读 可读写
10.修改数据文件
增加数据文件:
Alter tablespace tablespace_name add datafile ‘xxdbf’ size xx;
Eg:
Alter tablespace test1_tablespace add datafile ‘test2_file.dbf’ size 10m;
查看数据文件:
Select file_name from dba_data_files where tablespace_name=’TEST1_TABLESPACE’;
(表空间的名字要大写)
删除数据文件:
Alter tablespace tablespace_name drop datafile ‘xxdbf’ size xx;
(无法删除第一个数据文件)
Eg:
Alter tablespace test1_tablespace drop datafile ‘test2_file.dbf’;
11.删除表空间
Drop tablespace tablespace_name [including contents]删除表空间及该表空间的数据文件
Drop tablespace tablespace_name 只删除表空间,不删除数据文件
三、管理表
3.1认识表:
表是存储数据的基本存储单位。
表是二维结构,由行(记录)和列(域或字段)组成。
约定:每一列的数据必须有相同的数据类型;列名唯一;每一行数据的唯一性
3.2数据类型
A.字符型:比如性别、姓名、爱好特长
char(n)、nchar(n)二者为固定长度的类型;区别:nchar是按Unicode格式存放数据的,
char(n):n的最大值为2000
nchar(n):n的最大值为1000
一般用nchar存储汉子比较多的。
Varchar2(n)、nvarchar2(n)均为可变长度的类型。nvarchar2(n)支持Unicode格式存放的。
Varchar2(n):n的最大值为4000
nvarchar2(n):n的最大值为2000
B.数值型:比如年龄、工资
number(p,s):p表是有效数字,s表是小数点后的位数
Number(5,2):有效数字5位,保留2位小数,如123.45
float(n):主要用来存储二进制数。1-126位。 转换位十进制数:x*0.30103
C.日期型:
date类型表示范围:公元前4712年1月1日到公元9999年12月31日(可精确到秒)
Timestamp:精确到小数秒
D.其他类型:
Blob:二进制形式来存放
Clob:字符串形式来存放
3.3创建表
基本语法:
Create table table_name -- table_name(表名)在同一个用户下,表名是唯一的
(
Column_name datatype,......
);
Eg:
Create table userinfo
(id number(6,0),
username varchar2(20),
userpwd varchar2(20),
email varchar2(20),
regdate date
);
查看表的结构:与前面查看数据字典的方法一样
desc userinfo
3.4修改表
修改表的结构。
添加字段:
ALTER TABLE table_name ADD column_name datatype;
Eg:
alter table userinfo add remarks varchar2(500);
更改字段的数据类型:
更改字段数据类型的大小
ALTER TABLE table_name MODIFY column_name datatype;
Eg:
alter tableuserinfo modify remarks varchar2(400);
此处修改最好是在表中没有数据的情况下实现。
更改字段的数据类型
Eg:将新建的userpwd的varchar2类型改为number
Alter table userinfo modify userpwd number(6,0);
删除字段:
ALTER TABLE table_name DROP COLNMN column_name;
Eg:将新建的remakrs字段删除
Alter table userinfo drop column remakrs;
修改字段名:
ALTER TABLE table_name RENAME COLUMN coumn_name TO
new_column_name;
Eg:将email改为new_email
alter table userinfo rename column email to new_email;
修改表名:
RENAME table_name TO new_table_name;
Eg:将表名userinfo改为new_userinfo
rename userinfo to new_userinfo;
3.5删除表
TRUNCATE TABLE table_name; 删除表中的全部的数据,并不将表删除掉,也叫截断表
Eg:
truncate table new_userinfo; (删除表中数据,表结构还在)
DROP TABLE table_name; 删除整个表结构,当然同时表数据也就没有了。
drop table new_userinfo;
四、操作表中的数据
4.1添加数据:
Insert语句:
INSERT INTO table_name (column_name,column_name) VALUES (value1,value2);
操作实例:
向表中所有字段添加值:凡是字符串类型的值,则使用单引号将其值括起来
Insert into userinfo values (1,’xxx’,’123’,’[email protected]’,sysdate);
向表中指定字段添加值:
Insert into userinfo (id,username,userpwd) values (2,’yyy’,’123’);
向表中添加默认值:
Create table userinfo1
(id number(6,0),
Redate date default sysdate
);
Insert into userinfo1(id) values(1);
4.2复制表数据:
A.在建表时复制,将数据从其他表中复制过来,并且把表结构复制过来。
CREATE TABLE table_new AS SELECT column1,...|* FROM table_old
Eg:
将所有字段的信息复制过去
Create table userinfo_new as select *from userinfo;
将某些字段的信息复制过去
Create table userinfo_new1 as select id,username from userinfo;
B.在添加时复制,从其他表中的数据复制过来。
INSERT INTO table_new [(column1,......)] SELECT column1,...|* FROM
table_old;(前提是此处table_new已经存在)
将所有字段的信息复制过去:insert into userinfo_new select * from userinfo;
将部分字段的信息复制过去:Insert into userinfo_new(id,username) select id,username from userinfo;
4.3修改数据:
Update语句:UPDATE table_name SET column1=value1,...[WHERE conditions]
无条件更新:
操作实例:
将userinfo表中userpwd字段信息全部改为111111
update userinfo set userpwd = ‘111111’
将userinfo表中userpwd字段信息改为111和将email字段信息改为[email protected]
有条件更新:
将usenma为xxx的密码改为123456
Update userinfo set userpwd = ‘123456’ where username = ‘xxx’
4.4删除数据:
delete语句:DELETE FROM table_name;删除表中所有的数据
DELETE FROM table_name [WHERE conditions]; 根据条件删除表中的数据
操作实例:
无条件删除
Create table testde1 as select * from userinfo;
Delete from testde1;
有条件的删除:
将userinfo表中username为yyy的信息删除
Delete from userinfo where username = ‘yyy’;
五、约束
5.1约束的作用
定义规则,确保数据的完整性。是用来控制输入的具体的值满足设定好的要求的。
5.2五个重要约束:
1.非空约束:
非空约束只能在列级设置,不能在表级设置。
在创建表时设置非空约束:CREATE TABLE table_name(column_name datatype NOT NULL,...); not null代表的是非空约束的设置
Create table userinfo_1 (id number(6,0),username varchar2(20)not
null ,userpwd varchar(20)not null);
在修改表时添加非空约束:ALTER TABLE table_name MODIFY column_name datatype NOT NULL;在修改该处时,最好表中不应该有数据,否则无法更改。
删除表中数据之后,alter table userinfo modify username varchar2(20) not null;
在修改表时去除非空约束:ALTER TABLE table_name MODIFY column_name datatype NULL;
eg:
Alter table userinfo modify username varchar2(20) null;
3.2.主键约束:(可在列级与表级设置)
作用:确保表当中每一行数据的唯一性(非空、唯一)。
一张表只能设计一个主键约束
主键是可以由多个字段构成(联合主键或复合主键)
在创建表时设置主键约束:
方法一:CREATE TABLE table_name (column_name datatype
PRIMARY KEY,...);
Eg:
Crate table userinfo_p (id number(6,0) primary key,username varchar2(20),userpwd varchar2(20));
方法二:CONSTRAINT constraint_name PRIMARY KEY(column_name1,...);
(constraint_name约束的名字,column_name1字段的名字)
Eg:
Crate table userinfo_p (id number(6,0) primary key,username varchar2(20),userpwd varchar2(20),constraint pk_id_username primary key(id,username)); 主键约束的名字通常以pk开头。
(该出没有为主键约束设置名称,则该出的主键约束名称是由系统自动生成的)
Select constraint_name from user_constraints where table_name =’USERINFO_P’
如果创建完约束之后,忘记了约束的名字。应该在什么地方查找呢?
可以在user_constraints这个数据字典中来查。在这个数据字典当中有约束的名字、约束的类型及表的名字。
查询某一张表的约束的时候,可直接在该数据字典中查。
查找约束的名字,从刚才写的数据字典当中,在刚才写的表中。
Select constraint_name from user_constraints where table_name = ‘USERINFO_P1’; (此处表中需大写)
在修改表时添加主键约束:(constraint_name主键约束的名字通常是以pk_开头的)
ALTER TABLE table_name
ADD CONSTRAINT constraint_name PRIMARY KEY (column_name1,...);
Eg:将表userinfo的id字段设置为主键
Alter table userinfo add constraint pk_id primary key(id);
那么如何查看添加后的主键信息呢?
Desc user_constraints;
查看主键约束的名字
Select constraint_name from user_constraint where table_name = ‘USERINFO’;
更改约束的名称:
ALTER TABLE table_name
RENAME CONSTRAINT old_name TO new_name;
Eg:
Alter table userinfo rename constraint pk_id to new_pk_id;
查看约束的名字
Select constraint_name from user_constraint where table_name = ‘USERINFO’;
删除主键约束:
ALTER TABLE table_name
DISABLE|ENABLE CONSTRAINT constraint_name;
禁用 启用
Eg:将刚新建的主键约束禁用
Alter table userinfo disable constraint new_pk_id;
如何查看约束是否被禁用?可以在user_constraints数据字典中查看。
Select constraint_name,status from user_constraints where table_name=’USERINFO’;
删除主键约束
方法一:ALTER TABLE table_name
DROP CONSTRAINT constraint_name;
Eg:
Alter table userinfo drop constraint new_pk_id;
方法二:表中只有一个主键约束,删除的时候,直接写主键约束关键字
ALTER TABLE PRIMARY KEY[CASCADE] (CASCADE用于级联的删除,设置外检约束的时候用到,如果两个表存在这样的外键约束的关系,用cascade可以将其他表引用这个字段的地方,将它的约束删掉)
Eg:
Alter table userinfo_p drop primary key;
4.外键约束:(可在列级与表级设置)
是唯一涉及两个表中字段关系的约束。
在创建表时设置外键约束:(主键约束可以在列级和表级设计,外键也可以)
在列级设置:(外键约束也叫主从表的一种关系)
CREATE TABLE table1(column_name datetype REFERENCES (REFERENCES
从表
table2(column_name),...);
主表
CREATE TABLE table1(column_name datetype REFERENCES (REFERENCES
引用某表中某个字段)
从表(从表中外键字段的值必须来自主表中的相应字段的值,或者null值)
table2(column_name),...);
主表 (设置外键约束时,主表的字段必须是主键)主从表中相应的字段必须是同一个数据类型
Eg:
创建主表:
Create table typeinfo (typeid varchar2(10)primary key,typename varchar2(20));
创建从表:
Create table userinfo_f (id varchar2(10) primary key,username varchar2(20),
Typeid_new varchar2(10) references typeinfo(typeid);)
向主表typeinfo输入值
Insert into typeinfo values(1,1);
向从表中输入值:
Insert into userinfo_f(id,type_new) values(1,2); 报错是因为引用的主表中的typeid字段中得值没有为2的
Insert into userinfo_f(id,type_new) values(1,1); ok
Insert into userinfo_f(id,type_new) values(2,null); ok
在从表当中,输入的外键的值,要么是主表里面的值,要么是空值。
在创建表时设置外键约束
CONSTRAINT constraint_name FOREIGN KEY (column_name)
外键约束的名字(通常fk开头) 外键约束的关键字
REFERENCES table_name(column_name) [ON DELETE CASCADE];
引用 级联删除
级联删除:主表中的一条数据被删除后,在从表当中使用了这条数据的字段所在的行,也会一起被删除掉。确保了主从表数据的完整性。
Eg:
Create table userinfo_f2
(id varchar2(10) primary key,
username varchar2(20),
Typeid_new varchar2(10),
Constraint fk_typeid_new foreign key(typeid_new) references typeinfo(typeid));
这里没有加上级联删除,这样的话,当主表删除一条记录的时候,那么从表当中引用了相同值的地方,并不会被删除掉。那么如何将该记录加上呢?
create table userinfo_f3
(id varchar2(10) primary key,
username varchar2(20),
typeid_new varchar2(10),
constraint fk_typeid_new1 foreign key(typeid_new)
references typeinfo(typeid) on delete cascade);
这样就可以了。
在修改表时添加外键约束:
ALTER TABLE table_name
ADD CONSTRAINT constraint_name FOREIGN KEY(column_name)
REFERENCES
Table_name(column_name) [ON DELETE CASCADE];
Eg:
create table userinfo_f4
(id varchar2(10) primary key,
username varchar2(20),
typeid_new varchar2(10));
alter table userinfo_f4
add constraint fk_typeid_alter foreign key(typeid_new) references typeinfo(
typeid);
加上级联删除:
alter table userinfo_f4
add constraint fk_typeid_alter foreign key(typeid_new) references typeinfo(
Typeid on delete cascade);
删除外键约束: constraint_name为外键约束的名字
1.禁用外键约束:DISABLE|ENABLE CONSTRAINT constraint_name
如果创建userinfo_f4时,忘记了外键约束的名字,可通过user_constraint这个数据字典查看。
Select constraint_name,constraint_type,status from user_constraints where table_name = ‘USERINFO_F4’;
Alter table userinfo_f4 disable constraint FK_TYPEID_ALTER;
2.删除外键约束:ALTER TABLE DROP CONSTRAINT constraint_name;
Eg:
Alter table userinfo_f4
Drop constraint FK_TYPEID_ALTER;
4.唯一约束:(可在列级与表级设置)
作用:保证字段值的唯一性
唯一约束和主键约束的区别:
主键字段值必须是非空的;主键在每张表中只能有一个
唯一约束允许有一个空值;唯一约束在每张表中可以有多个
在创建表时设置唯一约束(列级和表级):
CREATE TABLE table_name
(column_name datatype UNOQUE,....)
Eg:列级
create table userinfo_u
(id varchar2(10) primary key,
username varchar2(20) unique,
userpwd varchar2(20));
表级:
ALTER TABLE table_name CONSTRAINT constraint_name UNIQUE(column_name);
SQL> create table userinfo_u
2 (id varchar2(10) primary key,
3 username varchar2(20) unique,
4 userpwd varchar2(20));
在修改表时添加唯一约束
ALTER TABLE table_name
ADD CONSTRAINT constraint_name
UNIQUE(column_name);
删除唯一约束:
ALTER TABLE table_name
DISABLE|ENABLE CONSTRAINT constraint_name;
Eg:
ALTER TABLE table_name
DROP CONSTRAINT constraint_name;
5.检查约束:(可在列级与表级设置)
作用:表中的值更有实际意义。
1.在创建表时设置检查约束
列级设置检查约束
CREATE TABLE table_name(column_name datatype CHECK(expression),...);
SQL> create table userinfo_c
2 (id varchar2(10) primary key,
3 username varchar2(20),
4 salary number(5,0) check(salary>0));
表已创建。
SQL> insert into userinfo_c values(1,'aaa','-50');
insert into userinfo_c values(1,'aaa','-50')
*
第 1 行出现错误:
ORA-02290: 违反检查约束条件 (SYSTEM.SYS_C0011122)
SYS_C0011122 此为检约束的名字,系统自动生成
表级设置检查约束
ALTER TABLE table_name
CONSTRAINT constraint_name CHECK(expressions);
Eg:
SQL> create table userinfo_c1
2 (id varchar2(10) primary key,
3 username varchar2(20),
4 salary number(5,0),
5 constraint ck_salary check(salary>0));
2.在修改表时添加检查约束
ALTER TABLE table_name
ADD CONSTRAINT constraint_name CHECK(expressions);
Eg:
SQL> create table userinfo_c3
2 (id varchar2(10) primary key,
3 username varchar2(20),
4 salary number(5,0));
表已创建。
SQL> alter table userinfo_c3
2 add constraint ck_salary_new check(salary>0);
表已更改。
3.删除检查约束
禁用|启用
ALTER TABLE table_name
DISABLE|ENABLE CONSTRAINT constraint_name;
Eg:
SQL> desc userinfo_c3
名称 是否为空?类型
----------------------------------------- -------- --------------------------
ID NOT NULL VARCHAR2(10)
USERNAME VARCHAR2(20)
SALARY NUMBER(5)
SQL> select constraint_name,constraint_type,status from user_constraints
2 where table_name = 'USERINFO_C3';
CONSTRAINT_NAME C STATUS
------------------------------ - --------
SYS_C0011126 P ENABLED
CK_SALARY_NEW C ENABLED
SQL> alter table userinfo_c3
2 disable constraint CK_SALARY_NEW;
表已更改。
SQL> select constraint_name,constraint_type,status from user_constraints
2 where table_name = 'USERINFO_C3';
CONSTRAINT_NAME C STATUS
------------------------------ - --------
SYS_C0011126 P ENABLED
CK_SALARY_NEW C DISABLED
删除
ALTER TABLE table_name
DROP CONSTRAINT constraint_name;
Eg:
SQL> alter table userinfo_c3
2 drop constraint CK_SALARY_NEW;
表已更改。
SQL> select constraint_name,constraint_type,status from user_constraints
2 where table_name = 'USERINFO_C3';
CONSTRAINT_NAME C STATUS
------------------------------ - --------
SYS_C0011126 P ENABLED
六、查询
6.1基本查询语句
SELECT [DISTINCT] column_name1,...|* FROM table_name [WHERE conditions]
6.2更改显示的字段名。
A.只是更改查询后结果当中的字段名,并不是真正的将表里的字段名进行更改。
COLUMN column_name HEADING new_name; (COLUMN 可简写为COL)
SQL> create table users
2 (id varchar2(10) primary key,
3
SQL> create table users
2 (ID varchar2(10) primary key,
3 USERNAME varchar2(20),
4 SALARY number(7,2)
5 );
表已创建。
SQL> col username heading 用户名;
SQL> select * from users;
ID 用户名; SALARY
---------- -------------------- ----------
1 a 300
2 b 600
3 c 900
B.用来设置显示的格式
1.COLUMN column_name FORMAT dataformat;
注意:字符类型只能设置显示的长度
Column column_name format a+长度(a开头)
数值型的更改,以“9”代表一位数字
C.清除显示的格式
COLUMN column_name CLEAR;
6.3运算符和表达式
表达式=操作数和运算符
Oracle中的操作数可以有变量、常量和字段。
算数运算符:+、-、*、/
SQL> select * from users;
ID USERNAME SALARY
---- -------------------- ----------
1 a 300
2 b 600
3 c 900
SQL> select id,username,salary+200 from users;
ID USERNAME SALARY+200
---- -------------------- ----------
1 a 500
2 b 800
3 c 1100
比较运算符:> >= < <= = <>
SQL> select username from users where salary > 800;
Select username from users where username <>’a’;等同于
Select username from users where not( username ‘a’);等同于
USERNAME
--------------------
c
逻辑运算符:not、and、or(优先级依次降低)
SQL> select username from users where salary > 800 and username <> ‘b’;
6.4运算符优先级:
比较运算符的优先级高于逻辑运算符
逻辑运算符:not、and、or(优先级依次降低)
6.5模糊查询
A.通配符的使用:(_,%)
一个_只能代表一个字符
%可以代表0到多个任意字符
B.使用like查询
SQL> select * from users;
ID USERNAME SALARY
---- -------------------- ----------
1 a 300
2 b 600
3 c 900
4 ddd 800
SQL> select * from users where username like 'd%';
ID USERNAME SALARY
---- -------------------- ----------
4 ddd 800
SQL> select * from users where username like 'd_';
未选定行
查询用户名第二个为a的用户
SQL> select * from users where username like '_d%';
ID USERNAME SALARY
---- -------------------- ----------
4 ddd 800
查询用户名含a的用户
SQL> select * from users where username like '%a%';
ID USERNAME SALARY
---- -------------------- ----------
1 a 300
6.6查询范围
Between...and ....;范围
In/not in() 括号内为一个具体的值
Between...and ....;范围
SQL> select * from users where salary between 600 and 1800;
ID USERNAME SALARY
---- -------------------- ----------
2 b 600
3 c 900
4 ddd 800
SQL> select * from users where salary not between 600 and 1800;
ID USERNAME SALARY
---- -------------------- ----------
1 a 300
In/not in() 括号内为一个具体的值
SQL> select * from users where username in ('a','b');
ID USERNAME SALARY
---- -------------------- ----------
1 a 300
2 b 600
SQL> select * from users where username not in ('a','b');
ID USERNAME SALARY
---- -------------------- ----------
3 c 900
4 ddd 800
6.7对查询结果排序
SELECT * FROM table_name ]where] ORDER BY column1 DESC(降序)/ASC(升序);
只有当id相等的时候,才会按salary升序排列
SQL> select * from users order by id desc,salary asc;
ID USERNAME SALARY
---- -------------------- ----------
4 ddd 800
3 c 900
2 b 600
1 a 300
6.8case....when....
CASE column_name WHEN values THEN result1,...
[ELSE result] END
EG:
SQL> select username,case username when 'a' then '计算机部门'
2 when 'b' then '市场部门' else '其他部门' end as部门
3 from users;
USERNAME 部门
-------------------- ----------
a 计算机部门
b 市场部门
c 其他部门
ddd 其他部门
CASE
WHEN column_name=value1
THEN result1,....[ELSE result] end;
Eg:
SQL> select username,case when username='a' then '计算机部门'
2 when username = 'b' then '市场部门' else '其他部门' end as部门
3 from users;
USERNAME 部门
-------------------- ----------
a 计算机部门
b 市场部门
c 其他部门
ddd 其他部门
6.9decode函数的使用
Decode (column_name,value1,result1,...defaultvalue)
Eg:
SQL> select username,decode(username,'a','计算机部门','b','市场部门','其他')
2 as 部门
3 from users;
USERNAME 部门
-------------------- ----------
a 计算机部门
b 市场部门
c 其他
ddd 其他