SQL基本语法
通过结构化查询语言(Structured Query Language,SQL),可以告诉Oracle对那些信息进行选择(select)、插入(insert)、更改(update)、删除(delete)。事实上,这4 个动词是向Oracle发布指令的主要单词。还可以使用附加命令merge(合并)字一条命令中执行insert和update命令操作。一个创建表的示例:
create table newspaper (
feature varchar2(15) not null,
section char(1) ,
page number
);
代码是创建一个名为newspaper的表。它有3个列,分别是FEATURE(变长字符列)、SECTION(定长字符列)和PAGE(数值列),FEATURE列的值最长可以有15个字符,并且每一行都必须有一个FEATURE值,就是不能为空。SECTION列的值总是只有一个字符的长度。
根据结果集创建表:
Oracle中可以把查询的结果根据结果集中的表结构和数据组成一张新表,语法: create table as select 语句
SQL> create table p_emp2 as select t.empon, t.ename from p_emp t
使用上面命令创建的新表中,不存在任何约束,并且把查询的数据一起插入到新表中;如果只是复制表结构,只需使查询的条件不成立(如 where 1= 2)即可,就不会查询出任何数据,从而复制一个表结构。
语法: SQL> create table p_emp2 as select * from p_emp where 1=2
从创建的表中选择数据可以用:
select feature,section,page from newspaper ;
从Oracle表中选择信息时将用到SQL中的4个基本关键字:select、from、where和order by。任何Oracle查询都将用到select和from。select关键字告诉Oracle用户希望得到的列,from关键字告诉Oracle那些列所在的表的名字。where关键字告诉Oracle想要放在所选信息上的限定符。要告诉Oracle希望返回的信息按指定的顺序排列,可以使用Order by,默认是正序排列,想要倒序排列后面加上 desc (descending)。
数据插入:
语法:insert into 表名 (列1,列2,……), values (值1,值2,……);
1、列名可以省略。当省略列名时,默认是表中的所有列,列名顺序是表中定义的列的先后顺序。
2、值的数量和顺序要和列名的数量和顺序一致,值的类型要与列名的类型一致。
Oracle中,一个insert 命令可以把一个结果集一次性插入到一张表中,使用的语句是:insert into 表 select 子句
在这种语法下,要求结果集中每一列的数据类型必须与表的对应列的数据类型一致,结果集中的列数量与表中的列数量一致
更新数据:
Oracle在表中更新数据的语法是:update 操作
update 表 set 列1 = 值,列2 = 值,……where 条件
删除数据:
Oracle 在表中删除数据的语法:delete操作
delete [from] 表 where条件
truncate:
在数据库操作命令中,truncate命令(是一个DDL命令)可以把表中的数据一次性全部删除,语法:truncate table 表名
truncate 和 delete 都能把表中的数据全部删除,它们的区别是:
1、truncate命令是DDL命令,删除的数据不能恢复(回滚);delete是DML命令,删除的数据可以恢复(回滚),通过日志文件恢复。
2、如果一个表中的数据记录很多,truncate要比delete的速度快
因为truncate命令比较危险,一般很少使用。
操作符:
Oracle开发中,依然存在算术运算符、关系运算和逻辑运算。
算术运算:
Oracle中的算术运算符没有Java中的丰富,只有+、-、*、/ 四个,其中除号(/)得到的结果是浮点数。求余运算只能借助函数:mod(x,y)返回x除以y的余数。
关系运算和逻辑运算
Oracle中的where子句经常见到关系运算和逻辑运算,常见的关系运算:
运算符 | 说明 | 运算符 | 说明 |
= | 等于 | > | 大于 |
< | 小于 | >= | 大于等于 |
<= | 小于等于 | !=或<> | 不等于 |
逻辑运算符有三个:and 、 or 、 not
字符串连接操作符(||)
Oracle中字符串可以用单引号,也可以用双引号,在别名中存在空格时,必须用双引号,在表名、列名时用双引号。
消除重复行:
Oracle查询结果中可能有很多相同的情况,那么可以使用distinct 消除重复行,语法:select distinct 列 from 表
null操作
如果某条记录中缺少数据值,那就是null值(空值),空值不等于0或空格,空值是指未赋值、未知或未可用的值。任何数据类型的列都可包括null,除非该列被定义为非空或主键。字查询条件中null值,使用IS NULL 作条件 ,非null值 使用NOT IS NULL 作条件。
IN操作
在where子句中可以使用IN操作符来查询其列值在指定列表里的行。比如,查询工作职责是ANALYST,RESIDENT,CLERK的员工,条件可以有两者方式:
1、where job=’CLERK’ or job=’ANALYST’ or job=’president’
2、where job in (‘CLERK’,’ANALYST’,’PRESIDENT’)
对应in的还有not in,用法与 in相反。
BETWEEN AND
在where子句中,可以使用between 操作符来查询列值包含在指定区间的行。between所操作的范围也包含边界,是个闭合区间。对应的有not between and,含义与between相反。
集合运算:
集合运算就是将两个或多个结果集组合成为一个结果集,集合运算包括:
intersect(交集),返回两个查询公有的记录
union all (并集),返回各个查询记录的所有,包括重复记录
union (并集),返回各个查询的所有记录,不包括重复记录
minus(补集),返回第一个查询检索出的记录减去第二个查询检索出的记录后剩余的记录
求补集示例: select depton from dept minus select depton from emp ;
逻辑和值
1、单值逻辑:
=(等于)、>(大于)、>=(大于等于)、<(小于)、<=(小于等于)、!=(不等于)、<>(不等于)
2、LIKE
LIKE执行模式匹配。下划线(_)表示一个字符。百分号(%)表示任意数目的字符,包括零个字符。
LIKE ‘m%’ 以字母m开头
3、 IS NULL 和 IS NOT NULL
NULL关键字用于测试一列中的某行是否存在数据,如果整列都没有内容,就说该列是null。单词IS必须与NULL以及 NOT NULL 一起使用。
4、值列表测试
in(1,2,3)
not in (1,2,3)
between 6 and 10
not between 6 and 10
另外 and命令用于合并两个逻辑表达式,必须都成立时才起作用;or命令只要符合任一条件即可。
需要记住点:
1、Oracle SQL语句中有数据操作语言(DML)、数据控制语言(DCL)、数据定义语言(DDL)、事物控制语言(TCL),
2、DML语句包括增删改查语句,DCL语句包括grant 、revoke命令等;DDL语句包括数据库对象创建、删除、修改语句;事物控制命令包括commit,rollback命令等。
3、数据库中建表常用的数据类型有:数值类型number(p,s)、可变字符串类型varchar2(length)、日期类型date。
4、Oracle中default 是一个值,Oracle中不存在default 约束。