分享
 
 
 

Oracle SQL 基础

王朝oracle·作者佚名  2008-05-31
窄屏简体版  字體: |||超大  

一、关系数据库的一些概念

1、主键的值一般不可以改变

2、外键:指向另一个表或本表的主键或唯一键的字段。外键的值一定要和某一主键相同,或者为空。

3、数据库对像:表,视图,序列,索引,同义词,程序(进程,函数,sql和pl/sql数据)4、sql command 类别

data retrieval数据检索:select

data manipulationlanguage (DML)数据操作语言:insert,update,delete

data definition language (DDL)数据定义语言:create,alter,drop,rename,truncate

transaction control事务控制:commit,rollback,savepoint

data control language(DCL)数据控制语言:grant,revoke

DCL 和DDL命令的执行会导致一次隐式提交,之前未提交的操作(包括DML 命令)都会提交写入日志文件,并在适当地时候写入数据文件。

二、SQL的语法

1) 连接号:

2) 把两个字符连接起来

eg:select game_card_type_idname from game_card_type;

3) select distinct dept_id,title from emp: 对多个字段的唯一

4) order by desc(降序)

order by asc(升序)

5) where column is (not) null

6) like ‘_a%’ _表示一个字符。%表示多少字符

like ‘%x\_y%’ escape ‘\’:显示包括x_y的字符

7) where table1.column(+)=table2.column

place the operator on the side of the join where there is no value to join to.

8) 联接类型:

equijoin:等式查询

non_equijoin:不等式查询

self:自己和自己建立关联

out join:where a.column=b.column(+)

可以用的操作符是:’=’,’and’,不可以用’or’,’in’

9) COUNT 函数所用的列包含空值时,空值行被忽略。

10) where 后的in any all 的区别

in :等于子查询的任何一个数

any :与子查询的每一个值相比

只要比其中一个大(小)就可以了

all:与子查询的所有值相比要比所有的的都大(小)

!=ALL作用跟NOT IN 一样

三、SQL*PLUS的环境(可以在glogin.sql中定义初始参数)

1) START 命令用以执行一个已储存的文件,等同于@

2) SAVE命令用以创建一个文件

3) EDIT命令用以调用编辑器编辑已存文件的内容

4) CHANGE 是SQL*Plus的编辑命令,用于在当前一行把旧文段转换为新文段

5) DEL 命令用以删除文本中一行或多行文字

6) SPOOL命令用以把查询结果储存在一个已有文件中,注重与SAVE区别

7) GET命令用以一个文件的内容写进一个SQL块中

8) SPOOL OUT命令用以把文件的结果发送到系统打印机。

9) set pause off/on:设置页面的滚动。按enter看下一页。

10) PAGESIZE:指定每页显示的行的数值,

11) LONG:设置LONG类型数据显示的最大宽度

12) FEEDBACK:设置查询返回记录的最大值

13) DESCRIBE :用于显示表和视图的结构,同义词,或指定函数和过程的详述。

14) Timing:可以看到语句执行的时间

15) Autotrace:可以看到sql的执行计划,sysdba执行/home/Oracle/prodUCt/9.2.0/sqlplus/admin/plustrce.sql脚本,而且必须把plustrace角色赋给执行用户。执行用户必须运行/home/oracle/product/9.2.0/rdbms/admin/utlXPlan.sql

16) 在各种数据类型中,只有NUMBER数据类型的默认显示是靠右对齐的,而CHAR, DATE和VARCHAR2是靠左对齐的

17) QUIT 是SQL*PLUS命令,用以结束一个SQL*PLUS的对话。

18) ttitle:

ttitle ‘selina’ 设select 的结果的抬头为selina

tti :显示ttitle的状态

tti off/on

BTitle ‘end’ 设结果的尾部

19) Column:

a) column name heading ‘名字’format a15

b) column id justify left format 999999

c) column start_date format a9 null ‘not hired’//当字段为空的时候则显示成not hired

d) column :显示所有的column设置

e) column columnname:显示某一个字段的设置

f) clear column :清除所有column设置

g) column columnname clear:清除某一字段的设置

h) 以上的column可用col代替.clear可以用cle代替

13)定义变量

用&:由用户输入变量值,此变量可以存在于where后,做为整个查询语句的变量。也可以在order by 后。做为字段的变量。也可以放在select 后,做为字段或表达式的变量。

用&&:假如多个地方引用此变量。。只用输入一次

SQL> SELECT empno, ename, job, &&column_name

FROM emp

ORDER BY &column_name;

accept:由用户输入变量值

accept 变量名 datatype prompt ‘告诉用户需要输入的信息:’ hide

引用的时候:&变名

define(undefined):一开始就定义变量值

四、函数:

1、字符函数

lower:把字符转成小写

upper:把字符转成大写

initcap:把单词的第一个字母变成大写

concat:连接字符 concat(‘good’,’morning’)=goodmoring

SUBSTR (column\expression, m[,n]) 用于对字符串进行截取操作,从第m个位置开始,把其后的连续n个字符的部分截取下来,假如m位负值,则从末尾开始计算。

eg:substr(‘string’,1,3) =str

substr(‘string’-3,3)=ing

INSTR('String', 'r')=3

LPAD(sal,10,'*') =*******sal

length: 用于返回表达式中的字符数,注重返回的是NUMBER。

NVL(expression1, expression2)

NVL 函数用以把一个空值转换为一个实值,如:

NVL(100/quantity, 0) ,要是quantity为空值,该函数返回一个0。

假如两个字段类型不同必须进行转换。

Min():返回最小值。。假如是字符。。A<a

2、数学函数

round:四舍五入

round(2.566,2)=2.27

round(45,-1)=50

trunc: 截断

trunc(2.566,2)=2.56

trunc(45,-1)=40

mod:

mod(m,n):m-n*flood(m/n) //flood是取整数

3、日期函数:

a) months_between(date1,date2):算date1和date2之间的月的数量,可以是小数可以是负数

months_between(’01-sep-95’,’11-jan-94’)=1.9774194

b) add_months(date,n):为date加上N个月,N只可以是整数

c) next_date(date,’char’):查找date的下一个星期N

next_date(’01-sep-95’,’FRIDAY’)=08-SEP-95

d) last_day(date):查找date月的最后一天。

e) rount(date):把日期四舍五入

f) rount(25-MAY-95’,’MONTH’)=01-JUN-95

g) rount(25-MAY-95’,’YEAR’)=01-JAN-95

h) trunc(date):把日期截断

i) trunc (25-MAY-95’,’MONTH’)=01-MAY-95

j) trunc (25-MAY-95’,’YEAR’)=01-JAN-95

k) 日期中RR与YY的区别,RR格式对日期作类似于舍入的操作,YY格式对日期作类似于截取的操作

RR YY

1995 27-oct-95 1995 1995

1995 27-oct-17 2017 1917

2001 27-oct-17 2017 2017

2001 27-oct-95 1995 2095

用法:select to_char(sysdate, 'YY') from dual;

select to_char(to_date('95-11-27', 'RR-MM-DD'), 'YYYY-MM-DD') from dual;

select to_char(to_date('95-11-27', 'YY-MM-DD'), 'YYYY-MM-DD') from dual;

4、转换函数

TO_CHAR:

TO_CHAR(date,’fmt’):fm前缀用来去除首尾的空字符或0

TO_CHAR(total,’fm$999999’)

假如想转成$0.25,那就要写成fm$9999990.99

可以把日期转换成字符

TO_CHAR(log_time,’MM/YY’)

TO_CHAR(lot_time,’fmdd’’of;’’mm yyyy’)

具体格式如下

HH24:MI:SS AM-----------15:24:32 pm

DD’’of’’MONTH-----------12 of MAY

Ddspth------------------------fourteenth

Ddsp--------------------------fourteen

ddth---------------------------4th

YYYY-----------------------1978

MM-----------------------------12

MONTH-------------------------MAY

5、group 函数avg,count,max,min,stddev,sum,variance

五、数据字典

用户表:由用户创建,包含用户的内容

数据字典:由系统建立,包含数据库的信息

前缀:

USER_ :由用户创建,显示用户拥有的所有对象。

ALL_ :由受权的用户访问, 用户可以访问的对象名。

DBA_ :由受了DBA权限的人访问,显示数据库的所有对象。

V$ :由受了DBA权限的人访问,显示数据字典数据库服务器性能信息。通常是DBA用于显示系统的统计表和动态性能表。

数据字典

DICTIONARY数据字典提供用户可以访问的数据字典表和视图的描述。

USER_OBJECTS显示用户拥有的对象。

USER_VIEWS显示用户拥有的视图。

USER_TABLES显示用户拥有的表。

ALL_TABLES显示用户可以访问的表。

ALL_VIEWS显示用户可以访问的视图。

USER_CATALOG显示用户拥有的所有表,视图,同义词和序列。

USER_CONS_COLUMNS显示带约束的列。

DBA_CONS_COLUMNS显示数据库里的所有表,视图和同义词。

USER_TAB_PRIVS_MADE:本用户赋给别的用户赋予权限的表

USER_TAB_PRIVS_RECD:其他用户给本用户赋予权限的表

USER_COL_PRIVS_MADE:本用户赋给别的用户赋予权限的字段

USER_COL_PRIVS_RECD:其他用户给本用户赋予权限的字段

ROLE_SYS_PRIVS:有什么系统权限赋给role

ROLE_TAB_PRIVS:有什么关于表的权限赋给role

USER_ROLE_PRIVS:role和用户的对应表

常用的表

user_objects:用户对象表(存储用户的所有对象)存储以下的类型的数据

Selina Sql>select distinct object_type from user_objects;

INDEX

LOB

PACKAGE

PACKAGE BODY

PROCEDURE

SEQUENCE

SYNONYM

TABLE

TRIGGER

VIEW

User_catalog:用户类表,存储以下的类型的数据

Selina Sql>select distinct table_type from user_catalog;

SEQUENCE

SYNONYM

TABLE

VIEW

六、建立对象

1、 表

a) 基本概念

Ø数据库会分配一定的空间从而定义表的大小,所以表的大小不用指定。

Ø表可容纳最多1000列。

Ø表可在用户使用数据库的同时创建,而且表的结构可在表联机时修改。

ØRENAME语句的语法 : RENAME old name TO new name; 注重要是表名中包含空格,符号或数字,必须使用双引号

Ø在CREATE TABLE子句中使用子查询,新表中的列数必须与子查询返回的列数相等,列位置对应。另外,除NOT NULL约束外,新列不会继续源列的所有约束。

Ø你不能对一列重命名。在表中添加一列时,你不能指定该列的位置,它会被默认放置在最后。你可以为一列增加长度。 通常当一列包含数据时,你不能修改该列的数据类型,不能减少一列的长度,但当列中包含空值或你不改变列的大小时,你可以把CHAR 转换为VARCHAR2数据类型。

Ø在DROP TABLE table命令后加上CASCADE CONSTRAINTS回把表中的相关约束一并删除。如命令:"DROP TABLE employee CASCADE CONSTRAINTS;"会把employee表中的数据,结构,和相关约束一并删除。

Ø当你创建一个数据类型为VARCHAR2的列时,必须指定长度。

Ø为表加注释:comment on table tablename is ‘………’;

ØCOMMENT ON TABLE命令用于在数据字典里添加关于表,视图或快照的注释。

Ø但你对一表执行了DML语句的INSERT操作时,但没有提交,别人可以同时访问该表,但看不到你所作的修改,由于对象被加锁,所以别人不能作同样的修改。

b) 建表原则

以字母开头

不可以超过30个字

只能由数字,字母,_,$,#组成

用子查询建立表

create table tablename as select …..

c) 删除表

drop table tablename

删除所有的数据

删除所有相关的index

所有待解决的事务会自动提交

不可以回滚

不释放空间

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有