※ 查询语句select
查询语句语法
select [distinct] {column_name|*…}
from table_name;
执行顺序 from ->select先查询整张表,在基于select对表出现的列筛选
注意:sql语句编写的时候不区分大小写
命令执行之前写入的是sql*plus工具的缓存,缓存只能缓存一条sql语句,再次写入覆盖原有缓存中的内容
“*”表示通配符,代表数据库中的所有列名,
※ 查询表中的所有信息 *
select *
from s_dept;
注意:一般情况下不用*,效率不高
直接写列的名字:
查询部门表的所有信息
select id,name,region_id
from s_dept;
注意:
1. 如果出现多列需要查询
2. 列与列之间逗号隔开
3. 最后一列后面没有逗号
4. 列的名字顺序没有要求
5. select后面查询的列名将来展示的时候名字都是大写
6. 同时date和字符串类型列名靠左边,number数字类型名字靠右边
※ select 决定了列出现的顺序或对列进行过滤
select name,id,region_id
from s_dept;
查询员工表中员工的名字及薪水
select last_name,salary
from s_emp;
※ select后面可以做算术运算(number和date类型)
注意:number + - * /
date + -
1.查询员工的年薪
select last_name,salary*13
from s_emp;
2.查询员工的年薪(每个月会有200的补助)
select last_name,(salary+200)*13
from s_emp;
3.查询在过4天是几号
select sysdate+4
from dual;
注意:+后面整数单位是天
4.查询在过半天是什么时间
select sysdate+12/24
from dual;
5.查询昨天是几号
select sysdate-1
from dual;
※ select 后面可以直接算数元素
1)
select 1*12
from dual;
2)
select 1+1
from s_emp;
注意:因为select后直接做计算,在s_emp表中有多少行就计算多少次
※ select 查询的列去重操作
1.查询员工信息,名字相同的只保留一个
select distinct last_name
from s_emp;
注意:distinct只能出现在select后面,distinct如果出现多列,表示多列的组合不能重复
select distinct last_name,first_name
from s_emp;
※ select后查询的列内容过长,规定sql*plus界面显示的长度
column column_name format a10;
column column_name clear;//清空设计格式
※ 别名(列名和表名)
1.直接在列名(表名)的后面空格起名字
查询员工的年薪,
select last_name,salary*12 sal
from s_emp;
结果
LAST_NAME SAL
….
给表起别名(多表区分表中列用的)
select s.last_name,s.salary*12 sal
from s_emp s;
2.在列名或表名后面+as +别名
select last_name,salary*12 as sal
from s_emp;
3,如果别名中有空格或者特殊符号,用双引号引起来
对双引号中的内容原样输出(区分大小写)
select last_name,salary*12 “sal”
from s_emp;
select last_name,salary*12 “salary is :”
from s_emp;
※ 录屏
spool 文件名 append
录屏(sql*plus界面)保存到文件中
spool off 关闭录屏
※ 拼接操作||
last_name.first_name
select last_name,first_name
from s_emp;
select后使用||拼接多列,用单引号标记忽略的内容
select last_name||first_name
from s_emp;
select last_name||‘.’||first_name name
from s_emp;
//输出结果 last_name‘s salary is salary
如果写单个单引号,自身是自身的转义
select last_name||’’’s salary is :’||salary
from s_emp;
※ NULL值
NULL值的处理(NULL既不是字符串空值也不是数字0,在数据库中标记没有数据)null做计算得到结果还是null值
查询员工工资,有提成的要算上提成
select salary+salary*commission_pct/100
from s_emp;
※ nvl(column_name,出现null替换的值)
select salary+salary*nvl(commission_pct,0)/100
from s_emp;
注意:
nvl如果第一个参数是时间列,第二个参数也要写时间
如果第一个参数是字符串,第二个参数也要写字符串
如果第一个参数是数字类型,第二个参数也要写数字类型
※ 表示值的时候时间和字符串必须加单引号
select last_name,nvl(start_date,’01-9月-18’)
from s_emp
※ 查看表结构
describe table_name
等价
desc table_name
注意:查看 列名 非空约束 列的类型
desc s_dept;
※ 基本类型
※ Number数字类型,对应Java中的byte int short long float double
Number数字的有效位没有限制
number(4)有效位4位
number(5,2)小数点前3位有效,小数点后没有限制
※ varchar2字符串类型,最多可写4000个左右字节
varchar2(20),20表示最多能放20个字节,实际长度和使用长度有关
注:varchar字符串类型,最多2000左右字节(oracle建议使用varcher2)
※ 时间类型
date是时间类型,精准度到秒
TimeStamp时间类型,精准到毫秒
※ char字符类型,可以跟Java中时String类型对应
但是char声明多少长度oracle数据库就分配多少长度
假设储存的值小于分配的长度,空格补位
char(6) ->中
一般用于固定值, 男 女 char(3)
注:
clob 存储字符类型 2G
blob 存储的二进制 2G
※ sql*plus工具对文件的操作
※ 将缓存中的sql语句保存到文件中
save filename [append]
start filename
@ filename
※ 执行文件中sql语句
- exit 推出sqlplus工具
- / 执行缓存区sql语句
- list(l)列出缓存区行
- clear buffer 清空缓存区