1、sqlplus连接远程Oracle命令
sqlplus(需要设置环境变量) scott(用户名)/5456(密码)@192.168.230.128:1521(IP)/orcl(数据库名)
2、查看当前用户
show user -- sqlplus命令
3、查看当前用户下的表
select * from tab;
4、执行上一条SQL语句
/ -- sqlplus命令
1、查看员工表结构
desc emp;
2、查询员工表中的数据
select * from emp;
3、查询员工表中的员工号,姓名,月薪,年薪(月薪*12)
SELECT EMPNO,ENAME,SAL,SAL*12 FROM EMP;
4、取别名的3种方式
/** * 取别名的3种方式: * 1.加不加as是一样的 * 2.如果起的别名中没有特殊字段,可以不用加"" */ SELECT EMPNO "员工id", ENAME AS "员工姓名", SAL 月薪, SAL * 12 "年 薪", -- 有空格,要加"" NVL( COMM, 0 ) "奖select金", -- 有特殊字段,要加"" SAL * 12+NVL ( COMM, 0 ) 年收入 FROM EMP;
4、去重
SELECT DISTINCT JOB, EMPNO FROM EMP; -- 去重,distinct修饰的后面的所有字段,只要字段们不重复就展示
5、字符串连接
连接符 “||”
/** * 字符串连接 * MySQL版:select concat(‘hello‘,‘ world‘); -- 要用 单引号(单引号表示日期和字符串,双引号表示列的别名) * Oracle版:select concat(‘hello‘,‘ world‘) from dual; -- 如果前面的操作,和任何表都没有关系就用dual表(伪表) * select ‘hello‘ || ‘ world‘ from dual; */
6、排序
order by后面可以+列、表达式、别名、序号
SELECT EMPNO, ENAME, SAL, SAL * 12 "年薪" FROM EMP ORDER BY "年薪", SAL;-- 多个列排序,order by先按照第一个排序,在按照后面的列排序
desc只作用于离他最近的字段
SELECT EMPNO, ENAME, SAL, SAL * 12 "年薪" FROM EMP ORDER BY EMPNO, "年薪" desc; -- desc只作用于离他最近的字段
1)包含null的表达式结果都为null
SELECT EMPNO, ENAME, SAL, SAL * 12, COMM, SAL * 12+COMM FROM EMP;
此时我们需要一个方法NVL
nvl(a,b) -- 判断a是否为null,如果为null则取b的值
修改后的:
SELECT EMPNO, ENAME, SAL, SAL * 12, NVL(COMM, 0), SAL * 12+NVL(COMM, 0) FROM EMP;
2)null永远不为null
空值是无效的,未指定的,未知的或不可预知的值;空值不是0或者空格
SELECT * FROM EMP WHERE COMM IN ( 300, 500, NULL );
3)如果集合中含有null,不能使用not in,可以使用in
SELECT * FROM EMP WHERE COMM NOT IN ( NULL );
4)null值的排序问题
SELECT * FROM emp ORDER BY COMM DESC; -- 原因:在Oracle中,空值最大
解决办法:
SELECT * FROM emp ORDER BY COMM DESC NULLS LAST;
1.*和列名,尽量使用列名 -- 列名:减少了分析过程
2.where解析顺序是从右-->左,尽量把假的放前面
原文:https://www.cnblogs.com/x54256/p/8973269.html