【Oracle】SQL查询基本查询语句

    xiaoxiao2022-07-04  173

    Oracle和SQLPlus

    每次启动只需启动两个服务即可: 1.OracleDbllg_home1TNSListener:监听服务,如果要通过程序或是不同的客户端链接数据库此服务必须启动否则无法链接; 2.OracleService***:数据库的实例服务,他的命名标准:OracleServiceSID,每当为系统增加一个数据库的时候都会自动的出现一个类似的服务名称。 在默认情况下,SID的名称和数据库的名称是完全一致的,在网络上使用的是SID的名字;

    Oracle的卸载: **Oracle卸载后可能无法立刻安装成功; 若正常安装成功了: 使用卸载程序,重启电脑。按F8进入安全模式,找到对应磁盘路径并且删除,运行注册表命令“regedit.exe”,搜索Oracle有关的内容全部删除。 所有的数据都保存在实例服务中。

    主要操作一下用户: 超级管理员:sys/change_on_install 普通管理员:system/manager 普通用户:scott/tiger 大数据用户(样本数据库才有):sh/sh SQLPlus命令 Oracle提供的是一个软件平台,如果要想次平台可以使用,那么必须要输入命令,SQLplus是执行oracle命令的主要功能,Oracle安装完成后会提供sqlplus的命令,直接运行即可。 也可cmd输入命令 eg:sqlplus scott/tiger 命令不区分大小写,但一般固定语法大写,可变的语法小写。 数据库中的基本组成是数据表,每一张表会包含多条数据记录

    格式化指令: 设置每页显示的数据行数:SET PAGESIZE 30; 设置每行的显示数据长度:SET LINESIZE 300;

    很多的Oracle运行的时候是没有图形界面的,所以一般这样的情况下想要编写程序,可启动本地的记事本程序。 命令“ed 文件名”(如果不加后缀,默认的是*.sql),随后想要执行文件中的命令,那么使用“@文件名”(默认找到*.sql的后缀)

    在整个Oracle里提供4个用户,那么可以直接在sqlplus中使用如下的语法切换用户: CONN 用户名/密码,如果使用的是sys用户,那么必须写上“AS SYSDBA”,否则无法登陆。 在scott下执行了查询emp的操作,现在sys用户下同样执行查询emp,结果报错:表或视图不存在,因为emp表属于scott用户。严格来说emp表的名称是“模式名称.表名称”(后来随着发展,模式名称几乎等同用户名)即:scott.emp。

    在sqlplus里除了可以使用Oracle直接定义的命令外,也可以用host调本机操作系统命令。 eg:host echo; host copy 源文件路径 拷贝文件路径

    SQL简介

    SQL指的是结构化查询语言,SQL语句并不复杂:SELECT, FROM, WHERE,GROUP BY, HAVING, ORDER BY, INSERT,UPDATA,DELETE, CREATE,DROP, ALTER, GRANT, REVOKE; 严格说SQL分为3种类型: 1.DML(数据操作语言):主要指的是数据库的查询与更新操作,查询操作是整个SQL语法里最麻烦的部分,也是笔试中最常用的部分。 2.DDL(数据定义语言):主要指的是数据对象的创建(表,用户), 例如:CREATE, DROP,A;TER,这部分的操作需要使用相关的设计范式。 3.DCL(数据控制语言):权限管理操作,需要结合用户来观察,此部分DBA负责,不是卡发者的重心。 SQL简单查询 查询一张表中的所有数据行 基本操作格式: SELECT [DISTINCT] *| 列名称[别名],列名称[别名],列名称[别名]… FROM 表名称[别名]; (加上 DISTINCT可消去重复内容,若查询了多个列,则当这几个列的内容都相同才会消去) 先执行from确定数据来源,再执行·。 select进行数据的筛选 简单查询不能控制行,只能通过select选列。

    eg: 以emp’表为例,查询选定列: select empno,ename,job from emp;

    除了简单的查询外,还可以针对查询的列的返回结构进行四则运算。 eg: SELECT empno, ename, sal12 FROM emp;定义别名:SELECT empno, ename, sal12 INCOME FROM emp; 定义别名:SELECT empno, ename, sal*12 INCOME FROM emp; 对于别名不建议使用中文; 在使用select查询时,也可设置一些常量,这些常量可直接进行输出, 有三点说明:

    若是字符串则需要单引号说明;若是数字则直接写;若是日期则按照日期风格编辑,使用“xx日-xx月-xx年” eg: 直接查询常量: select ‘雇员’,ename, job from emp; 也可在select语句里使用“||”;连接查询结果。 观察连接效果

    按照固定显示格式转换:

    SQL限定查询:

    很多时候不需要查询数据行的所有内容,此时就可以使用WHERE来针对要显示的数据进行筛选。 语法形式: SELECT [DISTINCT] *| 列名称[别名],列名称[别名],列名称[别名]… FROM 表名称[别名];(加上 DISTINCT可消去重复内容,若查询了多个列,则当这几个列的内容都相同才会消去) [WHERE 过滤条件(可多个)] 执行顺序:from表控制,where行控制,select列控制;

    需要掌握一系列的限定查询符号,有如下几种:

    1.关系运算符:>,<,>=,<=,!=,<>;(不等于) 2.逻辑运算符:and,or,not; 3.范围运算符:between…and; 4.谓词范围:in,not in; 5.空判断:is null,is not null; 6.模糊查询:like; 所有运算符不区分类型,所有的数据区分大小写;

    关系运算符 eg;找到基本工资大于1500的 select * from emp where sal>1500; 逻辑运算符 如果现在有多个条件需要进行连接,那么就需要根据要求来选择是与连接还是或连接。 eg: 查询出工资范围在1500-3000的雇员 select * from emp where sal>1500 and sal <3000; 查询出工资范围大于2000或者职位是Clerk的雇员 select * from emp where sal>2000 or job=’CLERK’ ; 不要写过于复杂的逻辑操作。 范围查询 80= 在执行但好像条件过滤的时候可以针对某一个范围内的数据进行筛选,使用语法: BETWEEN 最小值(数字或日期)AND 最大值 在此最大值到最小值之间的内容都满足条件(包含边界) eg:查询工资在1500到2000间的雇员(包含边界) SELECT * FROM emp WHERE sal BETWEEN 1500 AND 2000; 相比上面的查询性能有提升。 范围查询中,日期和数字是最常用的数据类型 空判断 空 在数据库上解释为不确定类容,如果在数字列上觉对不表示0,对于空的判断不能使用关系运算符完成,任何的数据库,空的操作只能使用is null 或者 is not null; SELECT * FORM emp WHERE COMM IS NOT NULL; IN操作符 类似于between and,但是between and给了一个大的范围,而in给了一个指定的可选范围。 eg: 查询出雇员编号是7369,7566,7788,9999的雇员 SELECT * FROM emp WHERE empno IN(7369,7566,7788,9999); 关于not in与null: 在使用not in进行范围判断的时候如果范围包含null,那么不会返回任何结果 实际上使用where的用处在控制显示数据行,简单的说,不要显示全部的数据(因为如果显示全部的数据行几乎是宣判了程序的死刑!)使用not in的目的是为了查询部分数据行,如果有了空,某些数据永远不可能为空,相当于查询全部了。 模糊查询:Like 在使用LIKE的时候可以使用两个通配符: “—”匹配任意一位字符; “%”匹配任意0位,一位或多位字符; eg:查询姓名是以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的两点说明: 1.LIKE可以用在各种数据类型上使用不一定是字符串; 2.在使用LIKE查询的时候如果不设置查询关键字(LIKE‘%%’)则是查询全部。 与不使用where相比,这个性能更低。

    因为select比where后执行,所以select定义的别名无法在where中使用

    如果需要针对查询后的结果按照指定的数据列进行排序操作,就要使用order by 子句。 当使用查询操作的时候默认情况下会按照插入数据的顺序进行排序显示。 语法形式: SELECT [DISTINCT] *| 列名称[别名],列名称[别名],列名称[别名]… FROM 表名称[别名];(加上 DISTINCT可消去重复内容,若查询了多个列,则当这几个列的内容都相同才会消去) [WHERE 过滤条件(可多个)] 执行顺序:from表控制,where行控制,select列控制; [ORDER BY 字段[ASC|DESC],字段[ASC|DESC],字段[ASC|DESC]…];(针对查询结果进行排序) 在SELECT后执行,使用ORDER BY可以使用SELECT 定义的别名; 对于排序的方式有两种: ASC(默认)按照升序排列; DESC:按照降序排列; eg: 按照工资降序排序: SELECT ename ,sal FROM emp ORDER BY sal DESC; 按照销售人员的招聘时间由早到晚排序: SELECT ename,hiredate FROM emp WHERE job=’SALESMAN’ ORDER BY hiredate; 也可以同时设置多个字段 eg:按照工资由高到低排序,如果工资相同则按照雇佣的日期由早到晚排序; SELECT *FROM emp ORDER BY SAL DESC,HIREDATE ASC;

    查询年薪按年薪由低到高排序: SELECT ename ,sal*12 INCOMM FROM emp ORDER BY INCOMM; 可以看到,调用了SELECT定义的别名,在查询语句中,基本上只有order by能调用

    最新回复(0)