Oracle(一)sql、查询、条件

Sql用户操作

登录

sqlplus是oracle自带的工具,可以使用其命令登录到oracle数据中,并执行用户编写的sql语句。

如果在cmd命令中出提示没有sqlplus命令,那就说明oracle环境变量没有配置好。

使用sqlplus中,使用指定账号,登录到oracle数据库中

sqlplus 用户名/密码

// 普通用户登录
sqlplus jd2010/密码

// 管理员登录
sqlplus system/root

//使用DBA的身份登录,这种情况不需要密码,但是这种情况需要当操作系统的用户有权限才行
sqlplus "/as sysdba"

查看当前登录用户

show user

清屏操作、退出

// Windows系统中
$CLS
$cls

// Ubuntu系统
!clear

// 退出
exit

会话

会话也就是当前得控制台,开启两个sql控制台就是两个不相同得会话

登录成功,当前默认会话得语言是中文,可以通过命令修改当前会话的语言环境,例如将当前会话修改成英文环境

alter session set nls_language=english;

用户

我们可以通过使用管理员账号登录后创建一个用户,并设置密码以及授权

// 创建用户jd2010,设置密码root
create user jd2010 identified by root;

// 将连接数据库权限和资源管理权限授权
grant connect,resource to jd2010;

切换用户

conn 用户名/密码

删除用户

drop user jd2010 cascade;

导入

  • s_region,区域表:
字段名 是否为空 数据类型 备注
id N NUMBER 主键,区域编号
name N VARCHER2 区域名称
  • s_dept,部门表:
字段名 是否为空 数据类型 备注
id N NUMBER 主键,区域编号
name N VARCHER2 区域名称
region_id Y NUMBER 外键,部门所属的区域的id
  • s_emp, 员工表:
字段名 是否为空 数据类型 备注
ID N NUMBER 主键,员工编号
LAST_NAME N VARCHER2 lastName
FIRST_NAME Y VARCHER2 firstName
USERID Y VARCHER2 内部编号
START_DATE Y DATE 入职时间
COMMENTS Y VARCHER2 备注
MANAGER_ID Y NUMBER 外键,对应的经理id
TITLE Y VARCHER2 职位
DEPT_ID Y NUMBER 外键,对应的部门id
SALARY Y NUMBER 工资
COMMISSION_PCT Y NUMBER 提成比例
// 导入sql文件命令 @
@文件路径
@table.sql

查看表结构

desc 表名

Sql表操作

sql语句的分类:

  • DQL (Data Query Language),数据查询语言

    用于检索数据库中的数据,主要是SELECT语句

  • DML (Data Manipulation Language),数据操纵语言

    用于改变数据库中的数据,主要是 INSERT,UPDATE,DELETE 语句

  • DDL(Data Define Langage),数据定义语言

    用来建立、修改、删除数据库对象,主要是 CREATE、ALTER、DROP、TRUNCATE 语句

  • TCL (Transaction Control Language),事务控制语言

    用于维护数据的一致性,主要是 COMMIT,ROLLBACK,SAVEPOINT 语句

  • DCL(Data Control Language),数据控制功能

    用于执行权限授予和权限收回操作,主要是 GRANT,REVOKE 语句

注意:DML语句需要事务的支持(产生事务),DDL语句会自动提交事务

sql、sqlplus、pl/sql的区别:

  • sql,结构化的查询语句,操作关系型数据库的语言。
  • sqlplus,oracle数据库软件自带工具,可以接收用户输入的sql语句,然后将sql执行结果显示出来。
  • pl/sql,程序化的sql语句,在sql语句的基础上加入一定的逻辑操作,如if for等。

Select

注意,oracle中的表名、列名(字段名)、SQL语句等是不区分大小写的(大小写不敏感)

select语法:

select [distinct] *{col_name1,col_name2,..} from 表名;
  1. []表示该部分可有可无。
  2. *号表示所有列,不推荐写*。
  3. col_name1,col_name2代表列名,如果有多个可以逗号分开。

运算

注意,select语句永远不会对原始数据进行修改

例如,查看每个员工的员工id,名字和月薪涨100以后的年薪

select id,last_name,(salary+100)*12 from  s_emp

别名

select old_column [as] new_column_name from tb_name;

可以不使用as,通过空格就可以起别名

拼接

语法:

select col_name||'需要拼接的字符'||col_name from tb_name

注意,数据库中的字符串,需要使用单引号括起来

nvl

使用nvl函数可以将null进行替换

语法

select nvl(col_name,change_value) from tb_name;

nvl(需要替换的列,将null改变的值)

distinct

该关键字可以将重复数据去除。

select distinct col_name,col_name from tb_name;

注意,distinct关键词只能放在select关键词后面,如果distinct关键词后面如果出现多列,表示多列联合去重,即多列的值都相同的时候才会认为是重复的记录。

sqlplus

使用 sqlplus 登录之后,可以使用buff(缓存)来存储/执行/修改上一条运行的sql语句 。

  • buff中只能存储一条sql语句,但是这条sql语句可能有很多行
  • 每次放入新的sql语句,会把之前的覆盖掉
  • 每次执行sql语句,都会把这个sql语句放到buff里面

sqlplus 相关的命令:

  • l 查看缓存中的sql语句
  • a 在[定位]的那一行后面追加新的内容
  • i 在[定位]的那一行下面插入新的一行
  • c 替换[定位]的那一行中的某些字符串 ,格式为:c/老的字符串/新的字符串
  • del 删除[定位]的那一行内容
  • n 后面加内容可以重写这一行
  • cls清屏,linux中使用!
  • / 执行缓存sql命令

注意:使用 l 命令查看buff中的sql后,可以直接输入行数,然后回车,这就是定位到了这一行。

如果要清空buff中的sql:

clear buffer

其他的一些命令:

save test.sql   //buff中的sql语句保存在 test.sql 文件中
get test.sql    //把 test.sql 中的内容加载到buff中,但是没有运行
start test.sql  //把 test.sql 中的内容加载到buff中并且执行
@test.sql       //把 test.sql 中的内容加载到buff中并且执行
edit file_name  //使用系统默认编辑器去编辑文件
12345

spool命令:可以记录操作的过程

spool file_name //将接下来的sql 语句以及 sql的运行结果保存到文件中
    sql1
    result1
    sql2
    result2
    ...
spool off       //关闭pool功能

排序

语法:

select col_name,...
from tb_name
orderby col_name [asc|desc]

默认排序为升序也就是asc,可以不用加,但是如果想要降序那么说就必须加desc,如果有多个列排序,后面的列排序的前提是前面的列排好序以后有重复(相同)的值。

条件查询

select col_name,...
from tb_name
where col_name 比较操作表达式

注意

  1. 限制查询条件,使用where子句
  2. 条件可以多个,使用逻辑操作符或者小括号进行条件的逻辑整合
  3. where子句的优先级别最高
  4. 比较操作表达式由操作符和值组成
  • 逻辑比较操作符

    = > < >= <= !=

  • 不等于操作符,以下三个都表示不等于的意思,经常用的是 !=

    != <> ^=

between and

between and操作符,表示在俩个值之间

查看员工工资在700 到 1500之间的员工id和名字

select id,last_name,salary
from s_emp
where salary between 700 and 1500;

in

in():表示值在一个指定的列表中

查看员工号1,3,5,7,9员工的工资

select id,last_name,salary
from s_emp
where id in (1,3,5,7,9);

like

模糊查询,在值不精确的时候使用

注意:在数据量比较大的表中尽量少用like

oracle instr函数(oracle 用instr 来代替 like)

  • %,通配 0 到多个字符
  • _,通配一个字符,并且是一定要有一个字符
  • \,转义字符,需要使用 escape 关键字指定,转义字符只能转义后面的一个字符

例如:

--查看员工名字以C字母开头的员工的id,工资
select id,last_name,salary
from s_emp
where last_name like 'C%';
1234

注意:数据库中的字符串,需要使用 单引号 括起来

例如:

查看员工名字长度不小于 5 ,且第四个字母为n字母的员工id和工资

select id, last_name,salary
from s_emp
where last_name like '%\_%' escape '\';

is null

判断值为null的时候使用,null值的判断不能使用等号

例如:

--查看员工提成为为空的员工的id和名字
select id,last_name,commission_pct
from s_emp
where commission_pct is null;
1234

注意:类似的,还有 is not null

and、or

逻辑操作符,当条件有多个的时候可以使用

注意:andor 的优先级要高

例如:

查看员工部门id为 41 且职位名称为Stock Clerk(存库管理员)的员工id和名字

select id,last_name,dept_id,title
from s_emp
where
dept_id = 41
and
title = 'Stock Clerk';

查看员工部门为 41 或者 44 号部门,且工资大于 1000 的员工id和名字

select id,last_name,dept_id,title
from s_emp
where
salary > 1000
and
( dept_id = 41
or
dept_id = 44
);

例如,查看员工部门为 41 且工资大于 1000 ,或者 44 号部门的员工id和名字

select id,last_name,dept_id,title
from s_emp
where
salary > 1000
and
dept_id = 41
or
dept_id = 44;

注意:以上俩个sql语句,执行的结果是不一样的,它们的区别就是第一个sql在条件中多了个小括号

你可能感兴趣的:(Oracle(一)sql、查询、条件)