oracle基础知识一

来源:互联网 发布:php微信支付回调接口 编辑:程序博客网 时间:2024/05/29 06:38

1:查看oracle的版本
 select * from v$version
2: 查看oracle当前的ssid
 select instance_name from v$instance;
3:查看当前的用户
 show user
4:分屏显示
 set pause on/set pause off
5:列出每个员工的名字、月薪
 select first_name, last_name, salary from s_emp
6:select后面还可以写一个算数表达式,对取出的结果做计算
 如列出每个员工的名字、年薪
 select last_name, salary*12 from s_emp;co
7:给字段名起别名:
 select first_name, salary*12 annual_salary from s_emp; 
  annual_salary是别名,与字段名之间没有逗号
8:如果处理得字段是字符型的,可以做字符串拼接,用||两个竖线:
 select first_name || last_name "Employee" from s_emp; 
  将员工的姓和名字进行拼接,并起别名是Employee
 select first_name||' '||last_name "Employee" from s_emp; 
  单引号表示字符串
 select first_name||'_'||last_name "Employee" from s_emp;  输出为a' b
  如何表达单引号,用两个'
9:当字段值是NULL(空值在算术表达示中如何处理:有空结果就为空,把空值当无穷大处理,并不当成0处理)时,一般使用NVL函数进行处理
NVL函数:当字段取值不是NULL,取本身;为NULL时,用后面的值替换,注意严格的类型匹配
 显示每个人每个月的工资注意有提成的人
 select first_name ,salary+(salary*commission_pct/100) from s_emp;
 出现问题没有提成的人工资工资变为0 了 肯定不行
 求一下总收入,年薪+提成,提成是年薪*提成/100
 select first_name, salary*12*(1+NVL(commission_pct,0)/100)
 "Salary" from s_emp;

10:使用distinct,排除重复,同时排序。
 distinct是保证联合不重复,一直到from有效。
 select distinct name ,id from s_dept;
  查询一个公司有哪些部门
 select distinct dept_id, title from s_emp;
  一个部门可以有很多职位,不同部门可以有相同职位,
但部门和职位的组合不会重复

设置输出显示字符串长度:
column first_name for a10;
column salary for $00999,999;


11:where子句:条件表达式,实现选择操作
 select ... from ... where ... order by ... 先选择过滤,再排序,
 因为没有必要为不需要的数据排序
 where子句:where 字段名 比较运算符 值 
 数字(NUMBER)类型的直接写,VARCHAR2需要单引号,where子句要求类型完全匹配
  找出42部门的所有员工
  select first_name from s_emp where dept_id = 42;
  查找Ben一个月的工资,注意后面的名字大小写敏感。
  select first_name, salary from s_emp where first_name='Ben';l
  查找工资大于1500
  select * from s_emp where salary > 1500

 

 比较运算符:
  = > >= < <= 不等于!=
  BETWEEN ... AND ...  在...之间,表示一个闭区间
  IN(value1, value2, ....) 跟一个集合列表,相当于一个集合,一般把出现频度高的放前,减少比较次数。  where id IN(1,3) 和 where id=any(1,3)相同

  LIKE ....  通配,还可以加转义,用escape,"\"为转义符
   LIKE 'M%' M开头的  LIKE '_a%' 第二个字符是a的
   %  0或多个字符
   _  任意一个字符
  IS NULL(是否为空)
  ... AND ... 表示两个条件同时满足
  ... OR ... 表示条件只要满足其一就可以
  NOT ... 则是与以上的条件产生反效果
 例如:
  找出工资在1500到2500之间的员工
   select first_name, salary from s_emp where
   salary between 1500 and 2500;
  找出41、42、43部门的员工信息情况
   select first_name, salary from s_emp where
    dept_id IN(41,42,43);
  找出first_name中包含enr字符的员工,并查询他的first_name 和last_name
  select first_name,last_name
   from s_emp
   where first_name like '%enr%'
  当前用户下所有表名都是以'S_'开始的表
   select table_name from user_tables where table_name
    like 'S_%'; 
  上面那样写是错误的,因为_代表任意一个字符
   select table_name from user_tables where table_name
   like 'S\_%' escape '\';
  哪些人没有提成:
   select first_name, commission_pct from s_emp where
   commission_pct IS NOT NULL;
  部门号是42部门,工资大于1000的员工
   select first_name, salary, dept_id from s_emp where
   dept_id=42 and salary>1000;
 注意:括号改变优先级。


12:Order by子句
 默认的select显示是按照表中的存储顺序,如果对显示有要求,需要排序则需要使用Order By
 select ... from ... order by ...  后面是排序原则。
 order by ... desc  按照降序
 order by ... 或者 order by ... asc  按照升序
 后面可以跟字段名,也可以跟别名、位置(select后面字段出现的位置),多个排序条件。
 如果有空值,升序在最后,降序在最前
  select first_name, salary from s_emp order by desc;
  select salary S from s_emp order by S;
  select first_name, salary from s_emp order by 2;
  select first_name, dept_id, salary from s_emp order by dept_id, salary DESC;

原创粉丝点击