Oracle数据库由甲骨文公司开发,是基于对象的关系型数据库;下面是简单的学习数据库操作等知识。
1.SQL单表查询(设一个表名为tab)
(1)查询所有记录
select * from tab(一般格式:用户名.表名;如果不输入用户名,则默认为当前用户)。
(2)查询某些字段
select f_z from tab (f_z为查询字段,可以查询多个字段,以‘,’隔开)。
(3)distinct(返回不同值)
select distinct f_z from tab (distinct必须放在前面,可以查询多个字段,以‘,’隔开)。
(4)单条件查询
select * from tab where f_z like ‘47%’(1.in(not in)、like(not like)、between(not between)、is null(is not null)运算符;2.like和not like适合字符型字段查询;3.%表示任意长度字符串,_表示一个长度的字符串。4.f_z是字段)。
(5)组合条件查询(and、or、not)
select * from tab where f_z = 2 and f_y > 100
select * from tab where f_d not like ‘%47%’
select * from tab where not f_m like '47%'
(6)排序查询
select * from tab order by f_z(Asc(默认)为升序排列,Desc降序排列;order by 要放在where语句后面)。
(7)分组查询
select f_z,f_a from tab group by f_z,f_a having f_z is not null(where检查每条记录是否符合条件;having检查分组后的各组是否满足条件,having只能与group by配合使用)。
(8)字段运算查询(+、-、*、/)
select ‘汽车名称--’|| f_z from tab(||字符串合并)。
(9)变换查询显示
select f_z as f_a from tab(as命名字段的别名,可以不用;group by不能用别名,order by可以用。)。
表别名不用as,例如:select t.f_z from tab t。
for update用于锁定行,例如:select for update
2.用SQL进行多表查询
(1)无条件多表查询
笛卡尔集:总记录数=table1记录数×table2记录数
select * from table1, table2
(2)等值连接
内连接:select tab1.f_z, tab2.* from table1 tab1, table2 tab2 where tab1.f_z = tab2.f_c。
左外连接(包括没有单位的机型):select tab1.f_z, tab2.* from table1 tab1, table2 tab2 where tab1.f_z = tab2.f_c(+)。
右外连接(包括没有机型的单位):select tab1.f_z, tab2.* from table1 tab1, table2 tab2 where tab1.f_z(+) = tab2.f_c。
实际使用中,建议外连接统一使用左外连接;查询字段和连接条件中,若两表都有相同的字段名,必须指定字段对应的表名。
3.用SQL进行嵌套查询
也叫子查询,子查询形成的结果又成为父查询的条件。
in、exists:如果子查询得出的结果集记录较少,主查询中的表较大且又有索引时应该用in;反之如果外层的主查询记录较少,子查询中的表大,又有索引时使用exists。
not in、not exists:不推荐not in,会导致两个表的全表扫描,尽量转换为minus重写;not exists效率一般比较高;根据实际执行计划调试。
union(并集):select 1 as f_id, ‘是’ as f_m from tab union select 0 as f_id, ‘否’ as f_m from tab。
intersect(交集)、minus(差集)
并、交和差操作的嵌套查询要求属性具有相同的定义,包括类型和取值范围。
4.用SQL进行函数查询
(1)函数:
Round、Count、Sum、Avg、Min、Max
(2)条件表达式:nvl、decode、case when
select nvl(f_z, 0) from table;如果f_z为空,返回0;否则为f_z。
select decode(f_z, 1 , '客机', '货机') from table。
select case when f_z = 1 then '客机' else '货机' end from table。
case语句在处理相似问题就显得比较简捷灵活。另外,当需要匹配少量数值时,选用decode会更加方便一些。
5.Dual的使用
Dual是Oracle中实际存在的一种表,任何用户都可以使用,常用在没有目标表的select语句中。可用于查看时间、用户、计算等;select user from dual;select sysdate from dual。
6.关于null
数据库中null是一个未知数,没有任何值;进行运算时使用nvl,但是结果仍为空;在聚集函数中只有全部记录为空才会返回null。
7.insert插入
(1)单行记录插入
insert into tab (f_z,f_a) values (1,to_date(‘2017-10-11’,’yyyy-mm-dd’)).
语法:语法insert into 数据表(字段名1,字段名2,……) values(字段名1的值, 字段名2的值,……)。
字段名和值要一一对应,时间日期要用单引号,非空列必须要有值对应。
(2)多行记录插入
insert into table1 (f_id, f_m, f_r) select table2.nextval as f_id, 'new user', sysdate from table1 where f_r <= to_date('2017-10-01', 'yyyy-mm-dd').
语法:insert into 数据表(字段名1,字段名2,……) (select(字段名1或运算, 字段名2或运算,……) from 数据表 where 条件)。
子查询和insert中的数据表既可以相同,也可以不同,但要求查询结果的字段和insert插入的数据表中字段属性完全一致。
8.delete
delete from tab where f_a >= 5;truncate table table1;truncate是删除整个表,并且删除后不能恢复数据,但是保留数据表结构;delete删除数据可以恢复。
9.update
直接赋值更新:1)语法:update tab set f_a = new1,f_b = new2... where 条件;
2)update tab set f_a = ‘新名称’where f_id = 2。
嵌套更新:1)语法:set 字段名1=(select 字段列表 from 数据表 where 条件),字段名2=(select 字段列表 from 数据表 where 条件),……。
2)update table1 set table1.f_a=(select table2.f_b from table2 where table1.f_id=table2.f_id) where table1.f_id=5。
10.merge into
Merge into table1 using table2 on(table1.f_id=table2.f_id) when matched then update set table1.f_a = ‘new’ when not matched then insert(table1.f_id) values(table2.f_id)
11.创建表
crate table tab1(f_id number not null,f_a varchar2(7) not null,f_b number(6,2) not null);
主键:字段不能为空,唯一性;
外建:可以重复,但是是另外一个表的主键;
索引:索引是若干数据行的关键字的列表,查询时可以根据索引查询,提高搜索性能;有普通索引和唯一索引之分。
12.数据语言
(1)数据操纵语言(DML)
对数据进行增、删、改、查等操作;
命令:SELECT、INSERT、UPDATE、DELETE、CALL。
(2)数据描述语言(DDL)
描述和管理 SQL 数据库中的所有对象;
命令:CREATE(创建)、ALTER(修改)、DROP(删除)等。
(3)数据控制语言(DCL)
是用来设置或更改数据库用户或角色权限的语句;
命令:GRANT(授权)、REVOKE(撤销)、COMMIT(提交)、ROLLBACK(回滚)、SAVEPOINT(保存点)等。
13.sequence
创建:create sequence table1
INCREMENT BY 1 -- 每次加几个
START WITH 1 -- 从1开始计数
NOMAXvalue -- 不设置最大值
NOCYCLE -- 一直累加,不循环
CACHE 10; --设置缓存cache个序列,如果系统down掉了或者其它情况将会导致序列不连续,也可以设置为---------NOCACHE.
使用:sequence.CURRVAL(返回当前值);sequence.NEXTVAL(增加sequence的值,并返回值)。
14.视图VIEW
创建:create or replace view p_view as select tab1.f_id,tab1.f_a,tab2.f_id,tab2.f_z from tab1,tab2 where tab1.f_id=tab2.f_id(or replace:如果视图存在,替换旧视图)
删除:drop p_view
15.PL/SQL程序语法基本要素
(1)常量、变量等
常量:语法:常量名 constant 类型标识符 [not null]:=值;常量,包括后面的变量名都必须以字母开头,不能有空格,不能超过30个字符长度,同时不能和保留字同名,常(变)量名称不区分大小写,在字母后面可以带数字或特殊字符。括号内的not null为可选参数,若选用,表明该常(变)量不能为空值。
pi constant number(4):=3.14。
类型标识符 |
说明 |
Number |
数字型 |
Int |
整数型 |
Pls_integer |
整数型,产生溢出时出现错误 |
Binary_integer |
整数型,表示带符号的整数 |
Char |
定长字符型,最大255个字符 |
Varchar2 |
变长字符型,最大2000个字符 |
Long |
变长字符型,最长2GB |
Date |
日期型 |
Boolean |
布尔型(TRUE、FALSE、NULL三者取一) |
变量:age number(3):=26;基本常见变量如上。