1、在sqlplus命令行中,show/desc是显示用户、数据库和表的结构;执行命令时可以用这个控制显示的行和列set linesize 行数、set pagesize 列数 sysdba:sys/change_on_instanll system/manager (常用)
2、sqlplus (ed(记事本调用) ed a;
@(执行) @ d:\demo.txt或者demo都是在 d分区中创建demo文本文档
3、关闭数据库实例:shutdown 实例
库被关闭后用户无法直接连接sqlplus命令,但此时可以用/nolog,之后用管理员登录;
启动数据库实例:startup 实例
sqlplus命令窗口也可调用本机的os命令。使用host作为前缀。
数据库运算符号:>、>=、<、<=、!=、<>、between、and、like、in、isNull、or、not
范围:bettwen...and
判断是否为空:is (not)null
指定范围判断:in(指定查询范围) not in(...)相反;
模糊查询like子句:1、匹配单个字符"_" 2、匹配多个字符"%"即0-n个。%%类似like,得到是全部显示数据。
函数:
单行函数(数字、日期、转换、字符、通用函数)
字符:upper(转大写) dual(虚拟表,oracle专有)/lower
(转小写)、replace(字符串|列)替换、 substr(字符串|列,开始点[,结束点])从开始点到结束点截取(若设置为负数,则表示从后面截取的个数)。
数字:Round(数字|列[,保留的小数位数]):四舍侮辱五入的操作。
trunc(数字|列[,保留的小数位数]):舍弃指定位置的内容
mod(数字1,数字2):取模
日期:获得当前日期“SYSDATE”
日期+数字:表示若干天后的日期。
日期-数字:表示若干天前的日期。
日期-日期:表示两个日期间的天数。
LASY_DAY(日期):求出指定日期的最后一天。
NEXT_DAY(日期,星期数):求出下一个指定星期数的日期
ADD_MONTHS(日期,数字):求出若干月之后的日期。
MOTHS_between(日期,日期):求出两个日期之间所经历的月份。
转换:toChar(字符串|列,格式字符串):将日期或数字变为字符串显示。
toDate(字符串,格式字符串):将字符串变为Date数据显示。
to_Number():字符串变为数字。
(Fm:省另标记;L:表货币标记;24:表24小时制;hh:mm:ss;YYYY:MM:DD)
通用函数:NVL():处理null(将null变为0)。NVL(字段,0)。
Decode(数值|列,判断值,显示值1,...):多数值判断。
COUNT(*):表示统计表的总记录数。
--------------------------------------------------
简单查询都是涉及到一张表,其实很多时候我们查询的操作都是几张表;所以多表查询的语法很重要。
select [distinct] *|列[别名][列 别名...]
from 表名称[别名],[表名称[别名],...]
[where 条件(s)]
[order by 排序字段 asc|desc [排序字段 asc|desc];
2、在日后开发中,很多人都肯定要接触许多新的数据库和表,数据量较大的话,直接输入命令可能无法显示数据或是造成系统死机;其实最好消除笛卡尔积,也就是采用关联字段的形式来消除;在多表查询中,不同表中有了相同的字段的时候,访问这些字段必须加上表名称。
select * from emp, dept
where emp.deptNo=dept.deptNo;
此时的查询结果之中已经消除了笛卡尔积,但是只属于显示上的消除,而真正笛卡尔积现在依然存在,因为数据库的操作机制就属于逐行的进行数据的判断,那么如果按照这个思路理解的话,现在假设两张表的数据量都很大的话,那么使用这种多表查询的性能很低。(因为数据量大)
不过,在多表查询的时候往往都会为表起就表别名,通过别名.字段的方式进行查询。
针对多表查询分析步骤:
(确定所需要的表、确定表关联字段)
select * from emp e, dept d
where e.deptNo=d.deptNo;
3、对于自身连接,如果查询的结果中没有某条记录,此时是因为条件没有为null,要想其显示,就需要进行左右连接。
范例:查询出每个雇员的编号、姓名、基本工资、职位、领导的姓名、部们名称和位置。
.确定所需要的表:
|-emp:每个雇员的编号、姓名、基本工资、职位;
|-emp(领导):领导姓名;
|-dept:部门名称和位置;
.确定关联字段:
|-雇员和部门:emp.deptNo = dept.deptNo;
|-雇员和领导:emp.mgr=emp.empNo;
select empNo, ename, sal, job
from emp;
加入领导信息,引入自身关联,同时增加消除笛卡尔积的条件
select e.empNO, e.eName,e.sal,e.job, m.eName
from emp e, emp m
where e.mgr=m.empNo;
加入部门信息,引入dept表,既然有新表进来,则需要继续增加消除笛卡尔积的条件
select e.empNo, e.eName,e.sal, e.job,m.eName,d.dName,d.loc
from emp e, emp m, dept d
where e.mgr=m.empNo and e.deptNo = d.deptNo
范例:select e.empNo, e.eName,e.sal,d.dName
DECODE(s.grade,1,'第五等工资',2,'第四 等工资',3,'第五等工资',4,'第二等工 资',5,'第一等工资')gradeInfo
from emp e, dept d, salgrade s
where e.deptNo=d.deptNo and e.sal between s.losal and s.hisal;
3、左、右连接"(+)":是查询参考方向的改变
"(+)"放在了"="左边表示左连接,反之右连接。这种符号是Oracle是独有的。其他数据库不能支持这种符号。
-------------------------------------------------
SQL1999语法:除了以上的表操作之外,在SQL语法之中,也提供了另外一套表连接来操作SQL;
select table1.colum, table2.colum
from table1[cross join table2]
[natural join table2]
[join table2 using(colum_name)]|
[join table on (table1.column_name=table2.column_name)]|
[left|right|full outer join table2 on (table1.colum_name=table2.colum_name)]
a、交叉连接(across join):用于产生笛卡尔积
select * form emp across join emp;
笛卡尔积本身并不是属于无用的内容,在某些情况下 还是需要使用的。
b、自然连接(natural join):自动找到匹配的关联字段 ,消除掉笛卡尔积。
select * from emp natural join dept;
但是并不是所有的字段都是关联字段,设置关联字段
需要通过约束指定;
c、join...using子句:用户自己指定一个消除笛卡尔积 的关联字段;
select * from emp join dept using(deptno)
d、join...on子句:用户指定一个可以消除笛卡尔积的关 联条件
select * from emp join dept on(emp.deptNo=dept.deptNO)
e、连接方向的改变:
.左(外)连接:left outer join...on;
.右(外)连接:right outer join...on;
.全(外)连接:full outer join...on;将表没显示的 数据都显示
select * from emp right outer join dept on (emp.deptNo=dept.deptNo);
除Oracle外的数据库都使用以上sql1999语法操作。
--------------------------------------------------