1. 程式人生 > >oracle基本命令

oracle基本命令

-- 這是註釋
/*
多行
*/
select * from emp;
select * from dept;
select * from salgrade;
select * from bonus;
select p.ename,p.sal from emp p;
select p.*,p.ename,p.sal from emp p;
select emp.ename,emp.sal from emp;
-- 單表查詢
-- 查詢員工表的所有資訊
select * from emp;
-- 查詢部門表的所有資訊
select * from dept;
-- 查詢員工表中的員工編號,姓名,工資
select empno,ename,sal from emp;
-- 查詢員工表中員工編號,姓名,工資,和年薪
select empno,ename,sal,sal*12 from emp;
-- as 別名(小名)
select empno as 員工編號,ename as 員工姓名 from emp;
-- as 可以省略
select empno 員工編號,ename 員工姓名,sal 月薪,sal*13 年薪 from emp;
select empno "eo" from emp;
-- 連線符 相當於java中的+號
-- 查詢出員工“姓名的月薪是XXX”這種格式的資料
select ename || '的月薪是' || sal 簡介 from emp;
-- 除去重複行 distinct
-- 查詢各個員工的工資分佈
select distinct sal from emp;
-- 查詢員工和工資的分佈
select distinct ename,sal from emp;
-- order by 進行排序 asc 升序(預設),desc 降序
-- 查詢所有資料按照工資升序排序
select * from emp order by sal asc;
-- 查詢所有資料按照工資降序排序
select * from emp order by sal desc;
-- 多欄位排序,分為主和次
-- 查詢所有員工資料先按照工資降序,在按照編號升序
select * from emp order by sal desc,empno asc;
select ename 姓名,sal 工資,empno 編號 from emp order by 工資 desc,編號 asc;
-- where 條件查詢
-- 查詢名字叫SCOTT的員工資訊
select * from emp where ename = 'SCOTT';
-- 查詢工資為1250的員工資訊
select * from emp where sal = 1250;
-- 查詢入職時間為1981-2-22的員工資訊
select * from emp where hiredate = '22-2月-81';
-- 查詢入職如期大於1980-1-1的員工資訊
select * from emp where hiredate > '1-1月-80';
select * from emp where hiredate < '1-1月-80';
-- 查詢工資在1250元及以上的員工資訊
select * from emp where sal >= 1250;
-- 查詢工資不等於800的員工資訊
select * from emp where sal <> 800;
select * from emp where sal != 800;
-- between A and B 在 A和B之間(包含)
-- 查詢員工工資在800和1000之間的員工資訊
select * from emp where sal between 800 and 1000;
select * from emp where sal >= 800 and sal <=1000;
-- in(集合) 屬於集合中的一個
-- 查詢工資為800,900,1250,1000的員資訊
select * from emp where sal in(800,900,1000,1250);
select * from emp where sal =800 or sal=900 or sal=1000 or sal=1250;
-- 查詢獎金為空的員工資訊
select * from emp where comm is null;
select * from emp where comm ='';
-- 查詢獎金不為空的員工資訊
select * from emp where comm is not null;
select * from emp where comm !='';
-- like 模糊查詢 萬用字元 % 代表所有 _代表一個字元
-- 查詢員工姓名以S開頭的員工資訊
select * from emp where ename like 'S%';
-- 查詢姓李員工的基本資訊
select * from emp where ename like '李%';
-- 查詢名字為三個字並且姓李的員工
select * from emp where ename like '李__';
select * from emp where ename like '%\%' escape '\';
-- and or not 邏輯運算子
-- 查詢.且名字以S開頭
select * from emp where sal>900 and ename like 'S%';
-- 查詢工資大於900或者名字以S開頭
select * from emp where sal>900 or ename like 'S%';
-- 查詢工資不是800,900,1250的員工資訊
select * from emp where sal not in(800,900,1250);
-- 查詢名字不以S開頭的員工資訊
select * from emp where ename not like 'S%';
-- 常用字元函式
-- 查詢員工表的姓名,並且首字母大寫
select initcap(ename) from emp;
-- 查詢員工表的姓名,全部轉化為小寫
select lower(ename) from emp;
-- 查詢員工表的姓名,全部轉化為大寫
select upper(ename) from emp;
-- 左移除 ltrim
select ltrim('123admin','123') from dual;
-- 右移除
select rtrim('123admin','admin') from dual;
-- 左右移除空格
select ltrim(rtrim('  123admin  ')) from dual;
-- 翻譯 translate
select translate('jack','aj','12') from dual;
-- 替換 replace
select replace('jaak','aa','bl') from dual;
-- 查找出現的位置instr 第一次出現的位置
select instr('adminin','i') from dual;
-- substr(eg,n,m) 擷取字串 n開始包含n 擷取m個
select substr('abcdefghijk',3,5) from dual;
-- concat 字串連線
select concat('admin','123456') from dual;
select 'admin'||'123456' from dual;
-- 數值函式
-- 絕對值
select abs(-25) from dual;
-- x的y次冪
select power(2,3)from dual;
-- ceil 向上取整
select ceil(12.5) from dual;
-- floor 向下取整
select floor(12.5) from dual;
-- trunc 截斷
select trunc(12.156,2) from dual;
-- round 四捨五入
select round(12.156,2) from dual;
-- sqrt 開平方
select sqrt(4) from dual;
select power(8,1/3)from dual;
-- mod 取餘數
select mod(10,3) from dual;
-- sign 取符號
select sign(-25) from dual;
-- 日期函式
-- months_between 兩個日期間隔的月份
select months_between(sysdate,'9-12月-1996') from dual;
-- add_months 修改月份
select add_months(sysdate,1) from dual;
select add_months(sysdate,-1) from dual;
-- next_day 返回指定日期後的一個星期幾的日期
select next_day('9-12月-1996','星期日') from dual;
-- last_day 返回指定日期的這個月的最後一天
select last_day(sysdate) from dual;
-- 日期做四捨五入 round
select round(sysdate,'YEAR') from dual;-- 超過6月去下一年的第一天
select round(sysdate,'month') from dual;-- 超過月的一半去下一個的1號
select round(sysdate,'day') from dual;-- 超過星期的一半去下一週週日(第一天)
-- 日期做截斷 trunc
select trunc(sysdate,'YEAR') from dual;-- 本年第一天
select trunc(sysdate,'month') from dual;-- 本月第一天
select trunc(sysdate,'day') from dual;-- 本週第一天
-- to_char 日期轉字串
select to_char(sysdate,'yyyy-mm-dd hh:mi:ss') from dual;
-- to_date 字串轉日期
select to_date('2017年8月16日 16點40分30秒','yyyy"年"mm"月"dd"日" hh24"點"mi"分"ss"秒"') from dual;
-- to_number 字串轉數值型別 $99,999,999.99 ¥125,152.25
select to_number('$12,025,897.01','$999,999,999.99') from dual;
select to_number('¥125,152.25','L999,999,999.99') from dual;
-- to_char 數值轉字串 
select to_char(125152.25,'L999,999,999.99') from dual;
-- 時間比較問題
select * from emp where hiredate>'1-1月-81';
-- 1981-1-1
select * from emp where hiredate>to_date('1981-1-1','yyyy-mm-dd');
select * from emp where to_char(hiredate,'yyyy-mm-dd')>'1981-1-1';
-- nvl 空轉數
select ename,nvl(comm,0) from emp;
-- nvl2(e,n,m) e為空轉m 不為空轉n
select nvl2(comm,'有','太慘了') from emp;
-- decode 
select decode(sal,1250,'有錢',5000,'真有錢','窮鬼') from emp;
-- case when then else end (if else)
select (case
         when sal >= 5000 then
          '有錢'
         when sal >= 4000 then
          '1有錢'
         when sal >= 3000 then
          '2有錢'
         when sal >= 2000 then
          '3有錢'
         else
          '窮'
       end)
       -- switch case
  from emp;
  select (case sex when 0 then '男' when 1 then '女' end) from dual;
  --sum 求和 max 最大 min 最小 avg 平均 count 統計
  -- 查詢最大工資
  select max(sal) from emp;
  -- 查詢最小工資
  select min(sal) from emp;
  -- 查詢平均工資
  select avg(sal) from emp;
  -- 查詢所有工資的和
  select sum(sal) from emp;
  -- 查詢一共有幾個員工
  select count(*) from emp;
-- 聚合函式可以寫在一行上
select max(sal),min(sal),avg(sal),sum(sal),count(*) from emp;
-- 聚合函式不可以和單行資料同時展示
select ename,max(sal) from emp;
-- count(*) 統計所有 
select sum(sal)/count(*),avg(sal) from emp;
--count(exp)統計非空的exp的個數
--count(distinct exp)統計非空不重複的exp的個數
select count(sal),count(distinct sal) from emp;