您的位置:首页 > 数据库 > Oracle

Oracle sql 基础

2016-03-15 09:39 453 查看
sqlplus相当于客户端工具,不过这个是纯文本的。进入sqlplus环境下,conn命令连接数据库,是connect的简写方式。

conn scott/tiger@orcl表示以SID为orcl的库上的SCOTT用户登录,密码为tiger。

sql语句练习地址:http://wenku.baidu.com/link?url=NxcBAChcO8OLNCdC0N7tUCuAy84DzUABxBCUX6rbAHPgfLnSWrfDYf5JnhlMHR7qNUShJGb-76rIeJjeYaEz9fHRsWTVXRmR5syJSNfRztK

根据Oracle数据库scott模式下的emp表和dept表

经典_Oracle的sql语句百例训练 http://wenku.baidu.com/link?url=QGbP3XsO2WPxB9Ikt6JGdp2S-Pdq3D4ApcEYzNh46gB-lwg89EL67gOJAQROarKdn4EvGDf6J7NAEhDBgU9X0rJKfRc_yuAi5jQcfciuVsK
emp表、dept表结构路径:

http://www.cnblogs.com/mchina/archive/2012/09/06/2649951.html 

登录Oracle数据库两种方式:

sqlplus  /nolog

sqlplus  scott/tiger

连接数据库:

SQL>conn scott/tiger

SQL>conn / as sysdba 不需要输密码

SQL>conn ./as sysdba 需要输入密码

查询表内容:

SQL>select * from emp;

如果当前用户是sys需要查询其他用户的表时:SQL>select * from scott.emp;

显示当前用户名:SQL>show user;

查询所有表:SQL>select * from tab;

查询一张表的表结构:SQL>desc emp;

重复执行上一条sql语句,执行"/"即可;

取别名,在linux下oracle如果英文别名不加双引号,则变成大写:

SQL>select  empno 编号,ename 姓名,job 工作 from emp;

查询emp表中所有工作,distinct 表示去重:

SQL>select distinct job from emp;

按照以下的格式进行结果输出,如 NO:7469,Name:SMITH,Job:CLERK

SQL>select 'NO:' ||empno|| ',Name:' ||ename|| ',Job:' ||job  from job;

列出每个雇员的姓名及年薪:

SQL>select ename,sal * 12  income from emp;

查看每月可以得到奖金的雇员信息:

SQL>select * from emp where comm is not null;

查询基本工资不大于1500,同时不可以领取奖金的雇员信息

SQL>select * from emp not(sal>1500 and comm is not null);

BETWEEN .. AND 包含等于的情况

要求查询出雇员编号不是 7369、7499的雇员信息:

SQL> SELECT * FROM emp WHERE empno NOT IN(7369,7499);

查询雇员编号不是7369的雇员信息,使用<>或者!=

SQL>select * from emp where empno <> 7369;

SQL中 like 语句要注意通配符%和_  (模糊查询) "_"表示单个字符

SQL> select * from emp where hiredate like '%81%'

oracle通配符:http://wenku.baidu.com/link?url=Qu-lyg9tHEh5P_UW6oUidw9ZI0_T0uyzwBzucbpKQTC0ciPiq7OXHSMEmB8ZrBwhPPep0L2t1jWxTCml6nVW67KT14Vr1dxwJphbwa80wvS

排序,升序为默认(ASC),降序(DESC)

查看部门号为10的雇员信息,查询的信息按照工资从高到低,若工资相等则按雇佣日期从早到晚排序

SQL>select * from emp where deptno=10 group by sal desc,hiredate asc;

oracle数据库单行函数有:字符函数、数值函数、日期函数、转换函数、通用函数。

字符函数大小写转换:UPPER和LOWER

SQL>select UPPER('smith') from dual; (dual是一张伪表)

数值函数:

四舍五入:round()  截断小数位:trunc()  取余(取模)mod

SQL>select round(778.23) from dual;

SQL>select mod(10,3) from dual;

日期函数:

当前日期:sysdate

求出给定日期范围的月数:months_between()

转换函数:

to_char()  将日期或数值转换成字符串

to_number()将字符串转换成数字

to_date() 将字符串转换成日期

将日期按指定格式格式化

SQL>select empno,ename,to_char(hiredate,'yyyy-mm-dd')  datetime  from  emp;

通用函数:

求出每个雇员的年薪(由于comm中有NULL,NULL值计算后还是NULL)

SQL>select empno,ename,nvl(comm,0),(sal+nvl(comm,0))*12  income  from emp

NVL函数是将NULL值转换为具体的内容,这里是0

DECODE()函数,类似于IF ... ELSEIF ...ELSE

SQL>select empno,ename,hiredate,decode(job,'CLERK','业务员','SALESMAN','销售人员',‘MANAGER’,'经理')  职位  from emp;   解释:如果job字段值为CLERK则职位字段 显示“业务员”

找出早于12年前受雇的员工:

SQL>select * from emp where MonTHS_BETWEEN(sysdate,hiredate)/12 >12;

笛卡尔积在SQL中的实现方式既是交叉连接(Cross Join)。所有连接方式都会先生成临时笛卡尔积表,笛卡尔积是关系代数里的一个概念,表示第一个表的行数乘以第二个表的行数等于笛卡尔积结果集的大小。

假设集合A=a,b,集合B=0,1,2,则两个集合的笛卡尔积为(a,0),(a,1),(a,2),(b,0),(b,1),
(b,2)。

多表查询和事务处理*****

SQL> select  e.empno,e.ename,d.deptno,d.dname,d.loc  from emp e,dept d where e.deptno = d.deptno;


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Oracle sql 基础