where左右连接标志:
"(+)" 标记只是Oracle才有的。
SQL:1999语法支持:
Select [distinct] * | 列 [别名]
From 表名称1
[CROSS JOIN 表名称2]
[NATURAL JOIN 表名称2]
[JOIN 表名称 ON(条件) | USING(字段)]
[LEFT | RIGHT | FULL OUTER JOIN 表名称2]
where左右连接标志:
"(+)" 标记只是Oracle才有的。
SQL:1999语法支持:
Select [distinct] * | 列 [别名]
From 表名称1
[CROSS JOIN 表名称2]
[NATURAL JOIN 表名称2]
[JOIN 表名称 ON(条件) | USING(字段)]
[LEFT | RIGHT | FULL OUTER JOIN 表名称2]
切换用户:
在Oracle 数据库里面存在有sh用户。
conn sh/sh;
select count(*) from costs;
select count(*) from sales;
Oracle通用函数:
1、数字 NVL(列|null,默认值)
如果传入的内容是null,则使用默认数值处理,如果不是空,则使用原始数值处理。
2、数据类型 decode
DECODE(列 | 字符串 | 数值,比较内容1,显示内容1,比较内容2,显示内容2,....【 ,默认显示内容】 )
设置的内容会与每一个比较内容进行比较,如果内容相同,则会使用显示内容进行输出,如果都不相同,则使用最后的默认信息输出。
select
from
where
order by
1、from 确定数据来源。
2、where 确定满足条件的数据行。
3、select 控制要显示的数据列。
不等于符号:!= ;<>.
多条件运算符:
与连接:所有的条件都满足。
或连接:有一个条件满足即可。
非运算:NOT 真变假、假变真。
--and
select *
from emp
where sal>=1500 and sal<=3000;
空判断:
空在数据库上解析为不确定的内容。
--in
在指定值的操作中,in的操作是最简短的。
--not in
不在指定范围中,用not in 。
--like:
“ _”:匹配任意的以为字符。
“%”:匹配任意的零位、一位或多位字符。
select * from emp;
show user;
打开:sqlplus
select子句控制数据列。
select DISTINCT job from emp;
“||”负责进行输出的内容链接
jkiklk
Like '%A%' %:表任意字元
'_A' 表第二字元為a
逻辑条件要简单,不要过于复杂
现在大量使用的是Oracle9i版本;
新项目大部分使用Oracle11g,是Oracle10g的稳定版本;
SELECT [DISTINCT] * | 列名称[别名] FROM 表名称
(先FROM 确实数据来源,再SELECT 确定查询列内容 )
SQL语法分为三种类型:
1、DML(数据操作语言):主要是数据的查询和更新操作。
2、DDL(数据的定义语言):主要查数据对象的创建(表,用户)。
3、DCL(数据的控制语言):主要是进行权限的管理操作(需要结合用户来观察)。
SCOTT用户表的结构。
一、SCOTT用户一共有四张数据表。
1)SELECT * FROM tab 个用户下的所有数据表
2)DESC 表名称 查询一个表的结构
1、DESC dept(部门信息表:dept)
2、雇员信息表:emp
(COL 列名 FOR A10,所选列名在行中占10个字符)
3、工资等级表:salgrade
4、工资表:bonus (这是四张表中唯 一没有数据的表)
1、运行--sqlpus--scott/tiger(密码不显示)
or cmd-- sqlpus scott/tiger (明文)
2、SELECT * FROM EMP
SET LINESIZE 300 设备每行显示的数据长度
SET PAGESIZE 30 设备每面显示的数据行数
这两个称为格式化指令。
3、sqlpus里输入ed mldn 即为创建一个名为mldn的后辍为.sql的记事本,但必须要关闭才能继续操作。要想执行文件中的命令,使用@文件名称,如@mldn
4、CONN 用户名/密码【AS SYSDBA】
如果要用sys用户名,必须加个AS SYSDBA
如果无法显示一个存在的表,可能是因为用户名的不同,可用 用户名.表名称 操作,如select * from scott.emp
5、如果要调用本机命令,可在原命令前加上HOST,如 HOST ECHO HELLO WORLD
SQL:1999中定义了外连接。
oracle
事物处理(commit,rollback)只发生在更新(update delete)里面——DDL不支持事物处理
commit之后更新的内容才完成
rollback:回滚,操作错误时,可以进行恢复
提交了以后就无法恢复数据
session(会话)
死锁
如果sessionA和sessionB发出同一操作
如果第一个session执行commit后第二个session才能完成操作
DELETE FROM 表名称 WHERE
INSERT INTO 表名称(列|列)
values();
更新——修改数据
UPDATE 表名称
SET 字段1=值1
WHERE...
UPDATE myemp
SET sal=30000,comm=990
WHERE ename='SCOTT';
update myemp set sal=sal*1.2
where sal<(
SELECT AVG(sal)
FROM emp);
将所有雇员的信息变为当前日期
UPDATE myemp SET hirdate=SYSDATE;
咧出薪金比“SMITH”或“ALLEN”多的所有员工的编号、姓名、部门名称、其领导姓名,部门人数。平均工资
1.select sal from emp where ename IN('SMITH,‘ALLEN’);
2.select e.empno,e,ename,e.sal
from emp e
where e.sal>ANY(
select sal from emp where ename IN('SMITH,‘ALLEN’));
3.select e.empno,e,ename,e.sal
from emp e
where e.sal>ANY(
select sal from emp where ename IN('SMITH,‘ALLEN’))
AND e.ename NOT IN('SMITH,‘ALLEN’);
4.找到领导信息
select e.empno,e,ename,e.sal,m.ename
from emp e,emp m
where e.sal>ANY(
select sal from emp where ename IN('SMITH,‘ALLEN’))
AND e.ename NOT IN('SMITH,‘ALLEN’)
AND e.mgr=m.empno(+);
5.统计部门的信息,在from字句中完成
select e.empno,e,ename,e.sal,m.ename,temp.count,temp.avg,temp.max,temp.min,d.dname
from emp e,emp m,(
select deptno dno,COUNT(empno) count,AVG(sal) avg,MAX(sal) max,MIn(sal) min
from emp
group by(deptno) temp,dept d
where e.sal>ANY(
select sal from emp where ename IN('SMITH,‘ALLEN’))
AND e.ename NOT IN('SMITH,‘ALLEN’)
AND e.mgr=m.empno(+)
AND tept.dno=d.dedeptno
AND e.deptno=d.deptno;
SELECT deptno dno,COUNT(empno) count FROM emp GROUP BY deptno;
group by:防止重复
SELECT deptno dno FROM emp;
查询出高于公司平均工资的职位名称、职位人数、平均工资
select AVG(sal)
from emp;
select job,COUNT(empno),AVG(sal)
from emp
GROUP BY job
HAVING AVG(sal)>(
select AVG(sal)
from emp);
2.查询出每个部门名称、位置、部门人数
SELECT d.dname,d.loc,COUNT(e..empno)
FROM emp e,dept d
WHERE d.deptno(+)=e.empno
GROUP BY d.dname,d.loc;
第二种方式:子查询(在from中使用)
SELECT d.dname,d.loc,temp.count
FROM dept d,(
SELECT deptno,COUNT(empno) count
FROM emp
GROUP BY deptno) temp
WHERE d,dptno=temp.deptno(+)
有统计查询并在子查询中,需要给统计查询加一个别名