sqlplus_oracle

sqlplus_oracle
sqlplus_oracle

spool off关闭记录

spool文件名此命令会把所有的操作存在某个文件中去

设置日期格式:alter session set nls_date_format='yyyy mm dd hh24:mi:ss'

SQL全名是结构化查询语言(Structured Query Language),是用于数据库中的标准数据查询语言,IBM公司最早使用在其开发的数据库系统中.不过各种通行的数据库系统在其实践过程中都对SQL规范作了某些编改和扩充.所以,实际上不同数据库系统之间的SQL语言不能完全相互通用.

SQL语言分为四大类:

1数据查询语言DQL

数据查询语言DQL基本结构是由select子句,from子句,where子句组成的查询块:select<字段名表>from<表或视图名>where<查询条件>

2数据操纵语DML(insert.update,delete)

主要有三种形式:插入:INSERT更新:UPDATE删除:DELETE

3数据定义语言DDL(create,drop,alter)

用来创建数据库中的各种对象---表,视图,索引等.

4数据控制语言DCL(commit,rollback,grant)

用来授予或回收访问数据库的某种特权,并控制数据库操纵事务发生的时间及效果,对数据库实行监视等.如:

1)grant:授权。

2)rollback to[savepoint]:回滚到某一点:rollback回滚命令使数据库状态回到上次最后提交的状态.其格式为:SQL>rollback;

3)commit:提交。

a.sql语句,表名以及字段名是大小写不敏感的。

b.sql语句要以";"结尾,来表示sql语句结束,如果不加";"系统不会执行此条sql

中字符显示是左对齐,数值右对齐。

字符串拼接使用(||)符号

目标字段名||''||目标字段名from表名;

中使用shell命令.实际上是sqlplus开了子进程来执行shell命令)。

(2)改变身份可以直接

connect用户名/密码---这个是sqlplus命令

select

student;

3)where xx like‘…’字符串通配查询:'%'表示0或任意多个字符,’_’表示任

意一个字符

注意转义的用法:like‘S\_%’escape‘\’

eg:找出表名是以S_开头的表

select table_name from user_tables where table_name like‘S\_%’escape‘\’;

escape定义谁为转义字符,我们把\(下划线)定义为转义字符

escape可以使我们自己定义需要的转义字符.escape关键字经常

用于使某些特殊字符,如通配符:'%','_'转义为它们原来的字符的意义,被定

义的转义字符通常使用'\',但是也可以使用其他的符号.

table_name like'S@\'escape'@'这里将@定义为转义字符,而不是'\'.

1)order by+字段名:表示按哪个字段排序

2)order by+别名(允许)

select first_name,salary*12sal from s_emp order by sal(正确)

3)order by column_name DESC按某个字段降序排序

column_name ASC<=>order by column_name(默认是升序)

distinct也会触发排序

注意:在使用having的时候一定要有group by语句,并且having后面所过滤的字段一定要在group by语句中出现,同样having语句后面不能用select 中字段的别名。

语句完整的执行顺序:

子句组装来自不同数据源的数据;

子句基于指定的条件对记录行进行筛选;

substr:取子字符串,从start 开始,取count 个substr(string,start,count)length:select 'zhang'||'san'from dual;

select substr(‘zhangsan’,6,3)from dual;=>san

起始位置(start )的值可以为负数,表示从右至左截取。

select substr('zhangsan',-6,3)from dual;=>ang 求长度:select length(‘abcdef’)from dual;=>6

select nvl(salary,0)from s_emp;

如果salary为空,则显示0,不为空,则显示工资数,注意两

个参数的格式要保持一致.

replace('string','s1','s2')

select months_between(add_months(sysdate,2),sysdate)from dual;=>2 add_months:增加或减去月份

select to_char(add_months(to_date('200911','yyyy mm dd'),2),'yyyy mm dd')MYDATE from dual;=>20090301

select to_char(add_months(to_date('200911','yyyy mm dd'),-2),'yyyy mm dd')MYDATE from dual;=>20081101

_day(date,'day'):从date这个日子开始数,第一次出现指定星期的日期返回日期的最后一天

next_day(’2-SEP-09’,’FRIDAY’)from dual;=>04-SEP-09

last_day(sysdate)from dual;=>30-SEP-09

select to_char(sysdate,'yyyy/mm/dd hh24:mi:ss')from dual;

2009/09/0213:49:37

select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss')from dual;

2009-09-0213:50:54

select to_char(sysdate,'yyyy.mm.dd hh24:mi:ss')from dual;

2009.09.0213:51:27

日期格式’):字符串转日期,主要用于日期的入库

原理:把两个字段的关系转成两个表之间的关系

3.外连接:外连接查询出来的结果是对内连接的补充

to_date('20080808','yyyy mm dd')from dual;

列出每个员工对应的领导select a.first_name ename,b.first_name mname

from s_emp a,s_emp b where a.manager_id=b.id;

左外连接:

查询所有员工及对应部门的记录,包括没有对应部门编号dept_id的员工记录

https://www.360docs.net/doc/187745227.html,st_name,e.dept_id,https://www.360docs.net/doc/187745227.html,

注意:Oracle10g以前的数据库不支持全外连接

(+)这种形式只适用于Oracle数据库

right(left)outer join...on中的outer可以省略

4.子查询

子查询对返回结果排序,排重

哪些人是领导

select first_name from s_emp where id in(select manager_id from s_emp);未加distinct,因为子查询对返回结果排序,排重

单行子查询

ename,deptno,sal from emp where deptno=(select deptno

e)在HAVING子句中使用子查询

select deptno,job,avg(sal)from emp group by deptno,job

having avg(sal)>(

SELECT sal FROM EMP WHERE ename='Ben');

联合:将两条记录和起来作为一个整体

select count(*)from s_emp union select count(*)from s_dept COUNT(*)

----------

12

25

MINUS减去:

SQL>select id,first_name from s_emp

2where rownum<=10minus select id,first_name from s_emp 3where rownum<=5;

ID FIRST_NAME

-----------------------------------

6Molly

7Roberta

8Ben

9Antoinette

10Marta

可以找出rownum在5与10之间的数据

userinfo,包含userid,username字段,其中userid是唯一的,可重复,请写一句sql查询语句,把有重复的记录全部取出来

3count(username)>1)n

4where https://www.360docs.net/doc/187745227.html,ername=https://www.360docs.net/doc/187745227.html,ername

5order by u.id;

SQL>/

ID USERNAME

--------------------

1laowang

2laowang

3laoli

4laoli

1select id,username from userinfo where username in( 2select username from userinfo group by username 3having count(username)>1)

4*order by id;

SQL>/

ID USERNAME

-------------------------------

1laowang

2laowang

3laoli

4laoli

相关主题
相关文档
最新文档