范例:以 nolog 的方式打开 sqlplus (在命令行终端)
sqlplus /nolog
范例:使用 sys 管理员登录
CONN sys/chagne_on_install AS SYSDBA;
范例:切换到 PDB 之中
ALTER SESSION SET CONTAINER=pdbmldn;
范例:打开 PDB
ALTER DATABASE pdbmldn OPEN;
范例:查看 sh 用户的数据表内容
SELECT COUNT(*) FROM sh.sales;
SELECT * FROM sh.sales;
conn c##scott/tiger;
SELECT [DISTINCT] * | 列名称 [AS] [列别名],列名称 [AS] [列别名],...
FROM 表名称[表别名]
[WHERE 条件( s )];
逻辑真值表:
NO. | 条件 x | 条件 y | x AND y | x OR y | NOT x |
---|---|---|---|---|---|
1 | TRUE | TRUE | TRUE | TRUE | FALSE |
2 | TRUE | NULL | NULL | TRUE | FALSE |
3 | TRUE | FALSE | FALSE | TRUE | FALSE |
4 | NULL | TRUE | NULL | TRUE | NULL |
5 | NULL | NULL | NULL | NULL | NULL |
6 | NULL | FALSE | FALSE | NULL | NULL |
7 | FALSE | TRUE | FALSE | TRUE | TRUE |
8 | FALSE | NULL | FALSE | NULL | TRUE |
9 | FALSE | FALSE | FALSE | TRUE | TRUE |
范例:统计出基本工资高出 1500 的全部雇员信息
SELECT * FROM emp WHERE sal>1500;
NO | 运算符 | 符号 | 描述 |
---|---|---|---|
1 | 关系运算符 | >、<、>=、<=、=、!=、<> | 进行大小或相等的比较,其中不等于有两种:!= 和 <> |
2 | 判断 null | IS NULL 、IS NOT NULL | 判断某一列的内容是否是 null |
3 | 逻辑运算符 | AND 、OR、NOT | AND 表示多个条件必须同时满足,OR 表示只需要有一个条件满足即可,NOT 表示条件取反,即:真变假,假变真 |
4 | 范围查询 | BETWEEN 最小值 AND 最大值 | 在一个指定范围中进行查找,查找结果为:“ 最小值 <= 内容 <= 最大值 ” |
5 | 范围查询 | IN | 通过 IN 可以指定一个查询的范围 |
6 | 模糊查询 | LIKE | 可以对指定的字段进行模糊查询 |
范例:要求查询出所有基本工资小于等于2000的全部雇员信息
SELECT *
FORM emp
WHERE sal<=2000;
范例:根据之前的查询结果发现 SMITH 的工资最低,现在希望可以取得 SMITH 的详细资料。
SELECT *
FORM emp
WHERE ename='SMITH';
范例:查询出所有办事员(CLERK)的雇员信息
SELECT *
FORM emp
WHERE job='CLERK';
范例:错误的代码
SELECT *
FORM emp
WHERE job='clerk'; // 不会有结果返回
范例:取得了所有办事员的资料之后,为了和其他职位的雇员对比,现在决定再查询出所有不是办事员的雇员信息。
范例:查询出工资范围在 1500 ~ 3000 (都包含)的全部雇员信息
SELECT *
FORM emp
WHERE sal>=1500 AND sal<=3000;
范例:查询职位是销售,并且基本工资高于 1200 的所有雇员信息
SELECT *
FORM emp
WHERE job='SALESMAN' AND sal>1200;
范例:查询出 10 部门中的经理或者是 20 部门的业务员的信息
SELECT *
FORM emp
WHERE (deptno=10 AND job='MANAGER') OR (deptno=20 AND job='CLERK');
范例:查询不是办事员的且基本工资大于 2000 的全部雇员信息
SELECT *
FORM emp
WHERE job!='CLERK' AND sal>2000;
SELECT *
FORM emp
WHERE job<>'CLERK' AND sal>2000;
SELECT *
FORM emp
WHERE NOT(job='CLERK' OR sal<=2000);
范例:使用 BETWEEN...AND... 操作符查询工资范围在 1500(含)~ 3000(含)的全部雇员信息
SELECT *
FORM emp
WHERE sal BETWEEN 1500 AND 3000;
范例:查询���在 1981 年雇佣的全部雇员信息
SELECT *
FORM emp
WHERE hiredate BETWEEN '01-1月-81' AND '31-12月-1981';
实际上这里就实现了日期和字符串数据之间的转换操作的功能。
范例:利用 = 进行 NULL 比较
SELECT *
FORM emp
WHERE comm=null AND empno=7369;
范例:查询出所有领取佣金的雇员的完整信息
范例:查询出所有不领取佣金的雇员的完整信息
SELECT *
FORM emp
WHERE comm IS NULL;
范例:列出所有的不领取奖金的雇员,而且同时要求这些雇员的基本工资大于2000的全部雇员信息
SELECT *
FORM emp
WHERE comm IS NULL AND sal > 2000;
范例:找出不领取佣金或领取的佣金低于100的员工
SELECT *
FORM emp
WHERE comm IS NULL OR comm < 100;
范例:找出收取佣金的员工的不同工作
SELECT DISTINCT job
FORM emp
WHERE comm IS NOT NULL;
范例:查询出雇员编号是7369,7788,7566的雇员信息
SELECT *
FORM emp
WHERE empno = 7369 OR empno = 7788 OR empno = 7566;
SELECT *
FORM emp
WHERE empno IN (7369,7788,7566);
范例:现在查询除了7369,7788,7566之外的雇员信息
SELECT *
FORM emp
WHERE empno NOT IN (7369,7788,7566);
范例:查询出雇员姓名是以 S 开头的全部雇员信息
SELECT *
FORM emp
WHERE ename LIKE 'S%';
范例:查询出雇员姓名的第二个字母是 M 的全部雇员信息
SELECT *
FORM emp
WHERE ename LIKE '_M%';
范例:查询出雇员姓名中任意位置包含字母 F 的雇员信息
SELECT *
FORM emp
WHERE ename LIKE '%F%';
范例:查询雇员姓名长度为6或者是超过6个的雇员信息。
SELECT *
FORM emp
WHERE ename LIKE '______%';
范例:查询出雇员基本工资中包含1 或者是在81年雇佣的全部雇员
SELECT *
FORM emp
WHERE sal LIKE '%1%' OR hiredate LIKE (%81%);
SELECT *
FORM emp
WHERE sal LIKE '%%'
OR hiredate LIKE (%%)
OR ename LIKE '%%'
OR job LIKE '%%';
结果显示全部数据。
范例:找出部门10中所有经理,部门20中所有办事员,既不是经理又不是办事员但薪金大于或等于2000的所有员工的详细资料,并且要求这些雇员姓名之中含有字母 S 或字母 K。
SELECT *
FORM emp
WHERE ((deptno = 10 AND job = 'MANAGER')
OR (deptno = 20 AND job = 'CLERK')
OR (job NOT IN (MANAGER,CLERK) AND sal >= 2000))
AND (ename LIKE '%S% OR ename LIKE '%K%');
SELECT [DISTINCT] * |列名称 [AS] 列别名,列名称 [AS] 列别名
FORM 表名称 表别名
[WHERE 条件(S)]
[ORDER BY 排序的字段|列索引序号 ASC | DESC,
排序的字段2 ASC | DESC ...]...;
范例:查询雇员的完整信息并且按照基本工资由高到低进行排序
SELECT *
FORM emp
ORDER BY sal DESC;
范例:修改之前的查询,要求按照基本工资由低到高进行排序
SELECT *
FORM emp
ORDER BY sal;
SELECT *
FORM emp
ORDER BY sal ASC;
范例:查询出所有办事员(CLERK)的详细资料,并且按基本工资由低到高排序
SELECT *
FORM emp
WHERE job = 'CLERK'
ORDER BY sal;
范例:查询所有雇员信息,要求按照基本工资由高到低排序,如果工资相等则按照雇佣日期进行排序,按照由早到晚的顺序
SELECT *
FORM emp
ORDER BY sal DESC,hiredate ASC;
ALTER SESSION SET CONTAINER = pdbmldn;
ALTER DATABASE pdbmldn OPEN;
SELECT *
FROM scott.emp
ORDER BY sal DESC ,hiredate ASC;
SELECT empno, ename, sal, job
FORM emp
ORDER BY sal DESC;
SELECT empno, ename, sal, job
FORM emp
ORDER BY 3 DESC;
上面两个语句执行效果一样,但个人认为,在编写排序的时候还是建议写上字段,不要用序号,不方便。
说明:本学习资料是根据李兴华的Oracle开发实战经典整理