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;
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;
相关文章推荐
- 基于 Red Hat 的发行版 Oracle Linux 正式发布Oracle Linux 7.1
- SQL中的三值逻辑
- SQL Server 作业批量停止
- 结束SQL阻塞的进程
- 动态生成SQL Server视图作业
- Oracle Containers for J2EE远程安全漏洞(CVE-2014-0413)
- Oracle 10g R2不能使用EM的问题
- SQL Server 语句操纵数据库
- 表空间操作
- PreparedStatement中in子句的处理
- SQL(结构化查询语句)
- VMware下RedHat4.8_64位安装Oracle 10g RAC--简略脚本
- oracle sql日期比较
- 基于 Red Hat 的发行版 Oracle Linux 正式发布Oracle Linux 7.1
- OS block size和Oracle block size,查找OS Blocksize的方法
- linux快速部署mysql服务器