注意: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之后才能进行更新。这在数据库中可称为死锁。