Oracle数据库的基本语法

注意:Oracle数据库中的字段值严格区分大小写。

1、 建立表

表约束的创建:

2、 使用数学符号:当我们的表中列包含数字列时,我们可以用相应的表达式对其进行查询,其中表达式包含运算符优先级

Eg:SELECT last_name, salary, salary + 300 FROM employees;

3、 连接符||用于把列与列、列与字符连接起来,合成列

Eg:SELECT last_name||job_id AS "Employees"FROM employees;

4、 字符串可以是 SELECT 列表中的一个字符,数字,日期。日期和字符只能在单引号中出现。

Eg:SELECT last_name ||' is a '||job_id AS "Employee Details"

FROM employees;

返回结果:

4、重复行:默认情况下,查询会返回全部行,包括重复行,在 SELECT 子句中使用关键字‘DISTINCT’删除重复行。

Eg:SELECT DISTINCT department_id FROM employees;

5、 使用 DESCRIBE 命令,显示表结构:DESC[RIBE] tablename

6、 常用比较运算符:=、>=、>、<、<=、<>(不等于)

Between…..and:在两个值之间(包含边界)

In:等于值列表中的一个 (如果查询范围中存在null,不影响查询),如果是not in,查询范围中存在null,则不返回任何数据

Like:模糊查询 :使用 LIKE 运算选择类似的值,选择条件可以包含字符或数字:% 代表0个、一个或多个字符。_ 代表一个字符。我们也可以在其中使用not关键字,

Is null:空值

Eg: 1)SELECT last_name, salary FROM employees

WHERE salary BETWEEN 2500 AND 3500

2)SELECT employee_id, last_name, salary, manager_id FROM employees WHERE manager_id IN (100, 101, 201);

3)SELECT last_name FROM employees WHERE last_name LIKE '_o%';

4)SELECT last_name, manager_id FROM employees

WHERE manager_id IS NULL;

5)like %%:表示查询全部记录。

7、 逻辑运算:and(逻辑并)、or(逻辑或)、not(逻辑否)

Eg: 1)SELECT employee_id, last_name, job_id, salary FROM employees WHERE salary >=10000 AND job_id LIKE '%MAN%';

2) SELECT employee_id, last_name, job_id, salary FROM employees WHERE salary >= 10000 OR job_id LIKE '%MAN%';

3) SELECT last_name, job_id FROM employees WHERE job_id NOT IN ('IT_PROG', 'ST_CLERK', 'SA_REP');

8、 order by:使用 ORDER BY 子句排序 ASC: 升序(默认) DESC: 降序,ORDER BY 子句在SELECT语句的结尾。

Eg:SELECT last_name, job_id, department_id, hire_date

FROM employees ORDER BY hire_date DESC ;

按别名排序:SELECT employee_id, last_name, salary*12 annsal

FROM employees ORDER BY annsal;

多个列排序:SELECT last_name, department_id, salary

FROM employees ORDER BY department_id, salary DESC;

9、 优先级:

1 算术运算符 2 连接符 3 比较符

4 IS [NOT] NULL, LIKE, [NOT] IN 5 [NOT] BETWEEN

6 NOT 7 AND 8 OR

10、函数

A:字符函数:UPPER(),LOWER(),INITCAP(),LENGTH(),SUBTR()

B:数字函数:round(目标数,舍入数),表示四舍五入,例如round(234.678,2)得到234.68,round(234.678,-2)得到200;trunc(目标数,截取数),表示截取数,例如trunc(234.678,2)得到234.67,

trunc(234.678)得到234,trunc(234.678,-2)得到200;mod(数字1,数字2),表示取模,例如mod(100,3)得到1.

C:日期函数:

取得当前日期:sysdate

日期计算:日期+数字=几天后的日期,日期-数字=几天前的日期,日期-日期=两个日期之间的天数,大日期-小日期

四个操作函数:last_day(日期):求出指定日期的最后一天

next-day(日期,星期数)求出下一个指定星期X的日期

add_months(日期,数字)求出若干月之后的日期

months_between(日期1,日期2)求出两个日期之间所经历的月份

在有关日期的操作时,最好使用上面的函数,可以避免闰年情况。

D:转换函数

TO_CHAR(字符串|列,格式字符串):将日期或数字变成字符串显示

TO_DATE(字符串,格式字符串):将字符串变成DATE数据显示

TO_NUMBER(字符串):将字符串变成数字显示

例如:TO_CHAR(sysdate,’yyyy-mm-dd hh24 :mi:ss’)表示按照格式化的字符串输出当前日期。hh24:表示按照24小时制,在yyyy前面加上fm表示去掉0

格式化数字:TO_CHAR(34567891223,’999,999,999,999,999’)输出34,567,891,223,其中999表示一位字符的概念,而不是数字9,如果在999前面加上字符L,输出表示当前环境下的货币符号。

TO_DATE(‘2011-9-23’,’yyyy-mm-dd’)将字符串变成日期,一般在更新数据库的时候用的比较多。

TO_NUMBER()函数用的比较少,因为Oracle很智能,能自己转换。

E:通用函数:(Oracle自己的特色函数)

NVL(带有空的字段,数字)将带有空的字段替换为数字。

DECODE()多数值判断,语法如下

DECODE(数值|列,判断值1,显示值1,判断值2,显示值2,……….)

例如:SELECT empno,job,DECODE(job,‘clerk’,‘办事员’,‘manager’,‘经理’)from emp;

将emp表中的job字段的clerk与manager转换为中文。

10、 查询记录的条数,count()函数,例如:

Select count(*)from emp;

11、 select * from tab;查看数据库中有几张表

12、 多表查询,数据量很大时,性能会很低。通过多表查询的时候,表一般使用别名。

13、 Char与Nchar的区别:例如存放一个英文字母,char占一个字节,存放一个中文,char占两个字节,而ncahr无论是英文还是中文都是两个字节。

14、 统计函数

Count():查询表中的数据记录 Avg():求平均值

sum():求和 max():求最大值 min():求最小值

eg:select count(sal),sum(sal) ,max(sal),avg(sal)from emp;

注意:如果表中没有统计记录,则count()会返回0,而其他的函数则有可能返回空值,count()永远会返回一个数值。

15、 分组统计:使用group by字句。

Eg:select count(sal),sum(sal) ,max(sal),avg(sal)from emp;

注意:a:分组函数可以在没有分组的时候单独使用,但是不能出现其他的查询字段,例如下面是错误的:

select job, count(empno)from emp;

b:如果要进行分组,select子句之后只能出现分组的字段和统计函数,不能出现其他字段,例如下面是错误的:

select empno,job, max(sal),min(sal)from emp group by job;

c:分组函数允许嵌套,但嵌套之后的分组函数中不能出现其他的任何字段。例如下面是错误的:

select job, Max(avg(sal)) from emp group by job;

d:在where子句中我们不能使用统计函数。

16、 如果我们要对分组后的数据进行过滤,我们不能使用where语法了,而是使用having关键字。

注意:where与having的区别:

Where:是在执行order by操作之前进行的过滤,表示从全部数据中筛选出部分数据,在where之中不能使用统计函数。

Having:是在order by分组之后的再次过滤,可以使用统计函数。

17、 子查询:子查询语句可以出现在查询语句的任意位置上,但是在where与from较多

Where:子查询一般只返回单行单列、多行单列、单行多列的数据

From:子查询返回的是多行多列的数据,一般当做一张临时表。

18、 选择表中前n条记录:select * from 表名 where rownum<=n;

19、 关键字出现顺序:

Select from inner join on where group_by having order_by

例如:

select e.ename,sum(s.pamount)
from tbSales s
inner join tbEmp e
on s.eid=e.eid
where to_char(s.sdate,'mm')=3 and e.esex='男'
group by e.ename
having sum(s.pamount)>=80000
order by sum(s.pamount) desc;

20、 表复制

create table 表名1 as select * from 表名2

将表名2复制到表1,这是Oracle专有语法。

21、 表的更新操作

增加数据:insert into 表名(字段1,字段2…)values (值1,值2,…)

或者:insert into 表名 values(相匹配字段的数值)//不建议使用

修改数据:update 表名 set 字段1=值1,字段2=值2,[where条件]

删除数据:delete from 表名[[where条件]

如果更新与删除没有相匹配的数据,则更新记录为0

22、 事务处理

两个主要命令:

Rollback:事务的回滚,更新操作回到原点

Commit:事务的提交,真正发出的更新操作,一旦提交之后就无法回滚

例如:当两个用户要对数据库进行更新操作,一个用户已经更新了,但是他还没commit,则另一个用户要更新的时候只能等待,等前面那个用户commit之后才能进行更新。这在数据库中可称为死锁。

你可能感兴趣的:(数据库)