数据库之Oracle的使用【入门版,包括惯用的Sql语句】

数据库之Oracle的使用【入门版,包括常用的Sql语句】
在命令提示符里输入sqlplus
或直接打开sqlplus
scott/tiger(用户名/密码){或先输入用户名(scott)-回车-输入密码(tiger)}
1.sqlplus
Orcale提供的一个客服端工具,通过使用这个工具可以发送一些sql
与数据库进行通通讯
sqlplus命令
<1>本机登录
sqlplus 用户名/密码
sqlplus 用户名
sqlplus/nolog-->启动sqlplus字符界面,然后通过conn用户


<2>查看当前用户:show user
<3>退出sqlplus:exit


<4>清屏:
SQL>clear screen
host cls.
<5>desc 表名:显示表结构
<6>set pagesize 20每页显示20
<7>set linesize 300 ,,每页300字符
其他
  数据库--》
1关系型数据库(sql数据库)oracle .sqlserver ,mysql,psql
<表,记录 ,列>
数据库--》2 nosql(not only sql 不仅仅是关系库)
互联网时代,大数据的存储,非结构化的数据的存储
集群的应用中比较广泛
Key/value结构--》redis/MemcachedM(内存数据库)
文档数据库--》Mongodb
列数据库--》Hbase,Cassandra
图数据库--》neo4j
2.SQL(StructuredQuery Lanuage)语句
结构化查询语句,可以理解成客户端与服务器端进行沟通的桥梁
通过使用sql
可以更好的访问,操作数据库中的数据


通过sql我们可以操作表中的数据(增删改),创建表,库,视图,索引,
分配权限,角色等等
sql分类
<1>DML(数据库操纵语言)-->操作的是数据库表中的数据
<2>DDL(数据库定义语言)-->操作的是数据库中的对象
<3>DCL(数据控制语言)-->操作的是数据库中的权限,角色

《1》行选择
《2》列选择
《3》表联接


SQL的书写原则:
《1》不区分大小写
《2》一条sql语句可以写成一行也可以写在多行
《3》建议不同字句分行写,以增强可读性
注意说明:
1.当执行一条sql查询语句时,oracle服务器会解析
查询语句(通过内部的一些算法)得到
最优的执行计划(Oracle Server认为最优的),然后去执行
那么这个过程是最耗时的
在开发过程中一般对sql语句的书写会有一些规定:
2.oracle有一个共享池原理,一个sql查询语句,分析之后会被存储起来
下次如果有一模一样的查询语句产生,不会重新解析
  ,一模一样指大小写,空格等完全一模一样。
个原理只针对简单查询(不能是多表查询,子查询查询)

3.基本SQL 查询语句
语法:
select [all|distinct]<目标列表表达式>
from<表名或视图名>
[where<条件表达式>]
[group by <列名1> having <条件表达式>]
[order by <列名2>asc|desc];


【1】如果有order by 子句,则结果要按照<列名2>的升序或
降序排序(默认是升序排列)






oracle 默认实例库(安装的时候默认已经安装上)


就自带有一些表,我们可以利用主要的是:
EMP ,DEPT ,SALGRADE表


select * from emp;
说明:我们在开发使用中,不建议使用*
*指的是列出所有的列
会去查询数据
数字字典,反而耗时应该要查询哪些列,直接列出即可


select deptno ,dname,loc from dept;
<3>注意:
在开发中,建议只列出自己所需要的列这样可以减少IO
的操作提高效率

<4>去除出重复的列distinct 
从员工得部门的部门编号
select deptno from emp;(好多重复得deptno)
select distinct deptno from emp;
 
<5>表达式的应用
[1]查看所有员工的姓名和年工资
select ename ,sal*12 from emp;

[2]查询员工的名字和月收入(假设奖金每月是300 )
select ename ,sal+300 from emp;


<6>别名的应用
select ename,sal* 12 as nianshouru from emp;
as 可省略
建议使用别名可以提高检索效率;






4.限制条件的查询

select *|distinct 列名,表达式 别名
from 表名
where 子句
order by 子句;


【1】如果有order by 子句,则结果要按照<列名2>的升序或
降序排序(默认是升序排列)

[1]查询雇员的名字,薪水并按雇员的薪水进行排序(从低到高)
select ename , sal from emp order by sal asc;
select ename , sal 工资 from emp order by sal;(默认是升序)
                select ename , sal 工资 from emp order by 2;(根据第二列)
[2]查询雇员的名字,薪水,并按照雇员的名字升序,薪水降序排序

select ename ,sal 工资 from emp order by ename asc ,sal desc;


【2】where
[1]查询名字为KING的薪水
select ename ,sal from emp where 
ename = 'KING';要用单引号

[2]查询薪水不等于3000的雇员的名字和薪水

select ename ,sal from emp where sal !=3000;
select ename , sal from emp where sal<>3000;
select ename,sal from emp where sal not in(3000);


[3] 查询薪水大于等于1000小于等于3000的雇员的姓名薪水


select ename ,sal from emp where sal >=1000 and sal <=2000;


或者
select ename ,sal from emp  where sal between 1000 and 2000;
(not between)
[4]查询薪水大于3000或小于1000的雇员的姓名和薪水
select ename ,sal from emp where sal <=1000 or sal >= 3000;


[5]查询薪水等于1000或3000的雇员的姓名和薪水
select ename ,sal from emp where sal =1000 or sal = 3000;
       注意:此处是=号而不是==
或者
select ename,sal from emp where sal in(1000,3000);

[6]查询87 年入职的员工的姓名和薪水
模糊查询
select enamel ,sal,hiredate from emp where hiredate
like '%87%';
其中:%代表0或多个字符;

[7]查询名字以K 打头的人的相关信息
select ename,sal from emp where ename like 'K%';

[8]查询名字包含A字母的雇员信息
select ename ,sal from emp where ename like '%A%';

[9]查询名字第二个字母是Z的雇员信息
select ename,sal from emp where enem like '_Z%';
其中_代表任意一个字符
[10]查询入职日期是87年5月23日的员工姓名和薪水
默认的日期格式:'23-5-87'代表1987年5月23
将来可以修改日期格式
select ename ,sal from emp where hiredate = '23-5月-87 ';


[11]查询入职日期在87年5月23日到89年入职的雇员工资
(也可以查询在某个区间的)
select ename ,sal from emp 
where hiredate>='23-5月-87'and hiredate<='23-5月89';


[12]查询奖金为null的员工的姓名和薪水
is null/is not null;
select ename ,sal 工资 from emp 
where comm is null;
[13]查询部门编号为20的雇员信息,并按薪水升序排序
select ename ,sal deptno from emp 
where deptno = 20 order by sal;


[14]转义字符的应用

select ename ,sal from emp where ename


like '\_S%';


[15]格式控制输出:
按右边指定格式输出(SMITH is a CLERK)
||进行拼接操作
select ename || ' is a ' ||job
from emp
where job = 'CLERK'and ename = 'SMITH';





























版权声明:本文为博主原创文章,未经博主允许不得转载。