Oracle笔记-简单查询

SQLplus命令

cmd中sqlplus 用户名/密码登录Oracle

例:cmd中sqlplus scott/tiger

1.格式化操作

查询emp表中的全部内容:SELECT *FROM emp

设置折行:SET LINESIZE 300

设置换页:SET PAGESIZE 30

以上都是针对全局表的设置,也可以对某列某行进行格式化操作,命令格式:COL 列名称 FOR A 长度数字

2.调用记事本

使用ed命令 格式:ed 文件名

若不存在会自动创建记事本文件,默认创建的文件路径是C:\用户\用户名,可以在记事本中编辑命令

若要执行命令,格式:@文件名

3.显示用户

在一个数据库中会有多个操作用户,想确认当前的用户是哪位,则使用“show user”命令

若进行不同用户的切换,使用命令格式:CONN用户名[/密码] [AS SYSDBA] 如果现在使用的是除sys用户外的登录,想切换到sys用户登录,那么必须设置“SYSDBA”,否则无法登录。即CONN sys/change_on_install AS SYSDBA

若想进行无用户登录,在cmd中使用命令“sqlplus /nolog”

4.调用本机程序

HOST命令。例如:现在要执行一个文件拷贝的程序,命令语法结构:“COPY 原始文件路径 拷贝目标文件路径” 假如f盘有个a.sql的文件,希望拷贝为b.sql,则在cmd中执行“COPY f:\a.sql f:\b.sql”,若想在sqlplus中执行,在前面加HOST,即“HOST COPY f:\a.sql f:\b.sql”

SQL简介与数据表分析

SQL指的是结构化的查询语言。

SQL简单查询

简单查询的SQL语法结构如下:

SECLECT [DISTINCT]*|列 [别名],列 [别名],... FROM 表名称 [别名];

例:查询emp表中的全部记录 SELECT * FROM emp;

查询emp表中empno,ename,sal,job列的记录:SELECT empno,ename,sal,job FROM emp;

同时可以直接对列做四则运算:SELECT ename, sal*12 年薪 FROM emp; 可以直接写中文,但实际开发不要使用中文

同时可以改给列加上别名:SELECT ename, sal money FROM emp;

在进行简单查询的过程中,还支持数据的链接操作,使用“||”进行连接,例:SELECT empno || ename FROM emp;

实现“编号:XXX,姓名:XXX”的格式化操作:SELECT '编号:'||empno||', 姓名:'||ename FROM emp;

在简单查询的操作中的DISTINCT关键字的主要目的是消除重复内容。比如查询所有雇员的职位信息:SELECT job FROM emp; 所得到的内容会有重复的职位,这时使用:SELECT DISTINCT job FROM emp; 消除掉重复内容,这里的消除掉的是查询出来的所有列内容都相同的内容。

SQL限定查询

对查询到的数据行进行控制,需要使用WHERE关键字

格式:③SELECT [DISTINCT] * | 列 [别名],列 [别名] ...

①FROM 表名称 [别名]

②[WHERE 限定条件(s)];

注意语句实际执行顺序

限定条件有以下几种运算

关系运算:> , = , < , >= , <= , !=(<>);

范围运算:BETWEEN...AND;

空判断:IS NULL , IS NOT NULL;只能通过这两个关键字判断是否为空,而不能用=关键字

IN判断:IN, NOT IN, exists()(复杂查询);

模糊查询:LIKE , NOT LIKE。

以上限定符都只能判断一次,如果需要若干个限定符连接,那么需要使用逻辑运算:AND(与)、OR(或)、NOT(非);

在Oracle中的所有运算符都不受数据类型的限制,不仅可以对数字进行判断,同时也可以对字符串、日期进行判断。其中字符串意义不大,重点是日期判端 例如:查询出所有在1981年雇佣的雇员信息

范围:1981-01-01(‘01-1月-1981’)~1981-12-31(31-12月-1981),这个时候可以按照已有的数据结构通过字符串来描述日期

IN操作符

IN是根据一个指定的范围进行数据查询

例子:查询出雇员编号是7369、7566、7788、9999的雇员信息

I 利用关系运算符进行操作。

SELECT * FROM emp WHERE empno=7369 OR empno=7566 OR empno=7788 OR empno=9999; 执行了四次判断,性能较差

II 利用IN操作符

SELECT * FROM emp WHERE empno IN(7369,7566,7788,9999); 语句又短且性能较好,应作为首选。注意:在使用IN操作时,也可以使用NOT IN。在使用NOT IN的时候如果查找的数据范围中含有null值,那么不会有任何查询结果返回,IN操作无此限制。

模糊查询:LIKE

LIKE可以实现数据的模糊查询操作,要使用LIKE必须使用如下的两个匹配符号:"_": 匹配任意的一位符号 "%": 匹配任意的符号(包含0位、1位、多位)。

例:查询所有雇员姓名中以字母A开头的雇员信息

SELECT * FROM emp WHERE ename LIKE 'A%';

查询所有雇员姓名中第二个字母为A的雇员信息

SELECT * FROM emp WHERE ename LIKE '_A%';

查询所有雇员姓名中含有字母A的雇员信息

SELECT * FROM emp WHERE ename LIKE '%A%';

关于LIKE的两点说明:如果在使用LIKE时,没有设置任何关键字,那么表示全部;LIKE可以在任意的数据类型上使用。

查询排序

ORDER BY

语法结构:

③SELECT [DISTINCT] * | 列 [别名],列 [别名] ...

①FROM 表名称 [别名]

②[WHERE 限定条件(s)]

④[ORDER BY 排序字段 [ASC|DESC], 排序字段[ASC|DESC], ...];

注意语句实际执行顺序

既然ORDER BY在SELECT子句后执行,那就意味着ORDER BY可以使用SELECT子句中定义的别名。

对于字段排序有两种形式:

升序:ASC,默认不写排序也是升序

降序:DESC。由高到低进行排序。

排序可以在任意数据类型上进行。

例如:按照雇佣日期由早到晚排序

SELECT *

FROM emp

ORDER BY hiredate ASC;

所有的排序操作都是在WHERE筛选之后进行的。

总结

SELECT子句控制列;WHERE子句控制数据行;ORDER BY子句永远最后执行

posted @ 2020-09-03 16:32  bear-Zhao  阅读(229)  评论(0编辑  收藏  举报