Oracle數據庫1-sql語句

 

單表的查詢語句

一、查詢表的全部數據  select * from 表名;*表明全部
  select * from emp;
二、查詢表中指定字段的值 select 字段名1,字段名2,...from表名
   select empno,ename from emp;
三、給查詢結果中的字段使用別名
  在字段名後使用關鍵字 字段名 as "別名"
  做用:方便查看查詢結果
  注意:as關鍵字能夠省略不寫,別名中沒有特殊字符雙引號也能夠省略不寫。          
  select empno 員工編號,ename"員工 姓名",job as 工做,mgr as "領導編號" from emp;
四、鏈接符:select  字段名||'字符'||字段名||..... from 表名
  ||爲sql語句的字符連接符,使用在select和from之間
  字符連接格式爲 字段名||'字符'||字段名
  注意:一個拼接好的鏈接在結果集中是做爲一個新的字段顯示,可使用別名優化字段顯示。
  select   empno||'的姓名是'||ename as "信息",job||'哈哈'||mgr from emp;
五、去除重複 select distinct 字段名,字段名,...from 表名
  注意:去除重複的規則是按照行進行去除的,多行數據徹底相同取其一
  select distinct  job ,mgr from emp;
六、排序 
  1)單字段排序
    select  * from 表名 order by 字段名 asc 升序排序 asc能夠省略不寫
    select  * from 表名 order by 字段名 desc 降序排序
  2)多字段排序
    select * from emp order by 字段名1,字段名2...
    先按照字段1排序,若是字段1的值相同,則按照字段2排序,....
    select * from emp order by empno desc--單字段排序 降序
    select empno,ename,job from emp order by ename asc--單字段排序 升序
    select * from emp order by empno,ename--多字段排序
七、字段的邏輯運算
  select關鍵字和from關鍵字之間的字段能夠直接進行四則運算
  字段與字段之間也能夠直接進行運算
  注意:字段值爲數值類型
  select empno,ename,job,sal*2+1000,sal+comm  from emp
八、使用where子句查詢篩選
  select 字段名,字段名,...from表名 where 篩選條件
  1)單篩選條件
    使用運算符進行篩選 =,>,>=,<,<=,<>  單個條件中
    注意:若是條件中的值爲字符,必須使用單引號括起來
    查詢全部的員工的工資信息
    select empno,ename,sal+comm as 薪資 from emp
    查詢SMITH的我的信息
    select * from emp where ename='SMITH'
    查詢SMITH的薪資信息,邏輯運算符=
    select empno,ename,sal,sal+comm from emp where ename='SMITH'
    查詢工資大於1000的員工信息,邏輯符>
    select * from emp where sal>'2000'
    查詢工資不等於3000的員工信息
    select * from emp where sal<>3000 order  by sal
  2)多條件篩選(where子句關鍵字:and,or,like,is null,is not null, in ,between and)
    查詢工資在2000-3000之間的員工信息
      --使用and關鍵字,多條件同時成立的篩選使用and關鍵字進行條件鏈接
                 select * from emp where sal>=2000 and sal<3000
      --使用between  and 關鍵字進行條件鏈接,包含兩頭的數據
                 select * from emp where sal between 2000 and 3000
    查詢工做爲SALESMAN,ANALYST,MANAGER的員工信息
                 --使用or關鍵字,進行或條件的篩選。
                select * from emp where job='SALESMAN' or job='ANALYST' or job='MANAGER' order by job
      --使用in關鍵字,也能夠進行或篩選,可是in中的內容只能爲一個字段的值。
      select * from emp where job in('SALESMAN','ANALYST','MANAGER')
    查詢姓名中包含s的,以s開頭的,以s結尾的,第二個字符爲A的。(模糊查詢)
      --%號表任意多個的任意字符
      select * from 表名 where 字段名 like '%字符%' 查詢包含指定字符的數據
      select * from emp where ename like '%S%'  --包含S的
      select * from 表名 where 字段名 like '字符%' 查詢以指定字符開頭的數據
      select * from emp where ename like 'S%'--以S開頭
      select * from 表名 where 字段名 like '%字符' 查詢以指定字符結尾的數據
      select * from emp where ename like '%S'--以S結尾的
      select * from 表名 where 字段名 like '_字符%' 查詢指定位置爲指定字符的數據
        --_表示一個任意字符
        select * from emp where ename like '_A%'--第二個字符爲A的
      --select * from 表名 where 字段名 like '%字符2字符1%' escape'字符2'
      escape將指定的字符變爲轉義字符:轉義字符能夠將特殊字符轉爲普通字符
      select * from emp where ename like '%/_%' escape '/'
    查詢有津貼的員工信息
      select * from 表名 where 字段名 is null 字段值爲null
      select * from 表名 where 字段名 is  not null 字段值不爲null
      多個條件使用and關鍵進行鏈接,篩選的是符合全部條件的數據
      select * from 表名 where 篩選條件1 and 條件2 and ....
      select * from emp where comm is not null and comm>0 sql

Oracle函數(單行函數,多行函數,轉換函數,其餘函數)

單行函數(字符函數,數值函數,日期函數)

特色1:不改變真實數據,只是對數據作了進一步修飾或者處理顯示。
特色2:能夠和字段混合使用數據庫

  • 字符函數:

  查詢全部的員工信息,員工姓名小寫顯示。
  select empno,ename,lower(ename),job,mgr, sal,lower('HH') from emp
  查詢全部的員工信息,員工姓名首字母大寫。
  select empno,INITCAP(ename) 首字母大寫的姓名,lower(ename),job from emporacle

  • 數值函數:對數值類型的數據進行運算

  僞表:真實存在的表,是爲了方便進行數據的驗證而臨時存在的表。表名爲:dual
  select abs(-1),ceil(2.2),floor(3.3),power(2,3),mod(5,2),round(4.55),trunc(10/3,2) from dual函數

  • 日期函數:

  select months_between('01-1月-2018','24-6月-2017') from dual --返回兩個日期間的月份數 
  select add_months('01-4月-2018',-4) from dual --返回指定月數後的日期
  select next_day('16-4月-2018','星期二') from dual--查詢最近的星期的日期
  select last_day('16-4月-2018') from dual--返回當月的最後一天的日期
  select round(to_date('19-4月-2018'),'DAY') from dual--按照星期進行四捨五入學習

多行函數(max,min,avg,sum,count)很重要

  做用:對查詢的數據進行統計
  使用:select 多行函數名(字段名),多行函數名(字段名)..from 表名
  注意:多行函數不能和普通字段以及單行函數混用,除非分組
  max(字段名) 返回該字段的最大值
  min(字段名) 返回該字段的最小值
  sum(字段名) 返回該字段的和
  avg(字段名) 返回該字段的平均值
  count
    count(*) 返回表的記錄數
    count(字段名) 返回非空值的數量
    count(distinct 字段名) 去除重複後的字段值的數量
  查看員工的最高工資
  select max(sal) from emp  --多行函數不能和字段直接混用,除非分組。
  select lower(ename),max(sal) from emp  --多行函數 不能和單行函數混用,除非分組
  查看員工的最低工資
  select min(sal) from emp
  查看員工的平均工資
  select avg(sal) from emp
  查看全部的員工工資之和
  select sum(sal) from emp
  查詢公司有多少員工
  select count(*) from emp--查詢表的記錄數
  查詢有津貼的員工人數
  select count(comm) from emp  --查詢字段的值的數量,null會自動過濾
  查詢公司有多少工做種類    
  select distinct job from emp
  select count(distinct job) from emp
  select count(*),sum(sal),avg(sal),max(sal),min(sal) from emp 
優化

 轉換函數

  to_number(數值類型的字符):將字符轉換爲數值
  to_char(數值或者是日期):將數值或者日期轉換爲字符
  to_date(日期格式的字符):將字符轉換爲日期
  ----------------數值和字符的互轉-----------------------
  1)字符轉換爲數字char---->number
  select to_number('123')+2  from dual
  2)數字轉換字符number--->char
  指定顯示格式:
    9表示位置佔位,例如999,999,999會將數字按照三個一組使用逗號隔開。
    L表示人民幣符號,$表示美圓符號
    0能夠進行佔位分組,可是若是真實數據位數不足,會使用0進行補位。
    select to_char(12345,'$999,999,999') from dual   --$12,345
    select to_char(12345,'L999,999,999') from dual   --¥12,345
    select to_char(12345678,'000,000,000,000.000') from dual   --000,012,345,678.000
  查詢工資大於2000的員工信息
  數值和字符之間的轉換能夠隱式轉換。to_number能夠省略不寫.
  select * from emp where sal>'2000';
  select * from emp where sal>to_number('2000');
  ---------------日期和字符的互轉---------------------------
  通常使用方式:新增數據使用to_date(),查詢數據使用to_char()
  1)字符轉換爲日期 char--->date
  使用to_date('要轉換的字符',日期格式)函數將字符轉換爲日期
  注意1:字符必須符合日期格式
  注意2:oralce默認的轉換格式爲日月年,例如'01-1月-2018' oracle認爲是一個日期
  經常使用日期格式:
    yyyy-mm-dd
    yyyy/mm/dd
  查詢員工入職日期在82年後的信息
  select * from emp where hiredate >to_date('1982-01-01','yyyy-mm-dd')
  select * from emp where hiredate >to_date('1982/01/01','yyyy/mm/dd')     
  select * from emp where to_char(hiredate,'yyyy-mm-dd') >'1982-01-01'
  2)日期轉換爲字符  date--->char
  使用to_char('要轉換的日期',轉換格式)
  注意:若是不指名轉換格式,則使用默認格式,日月年例如:'01-1月-81'
  經常使用轉換格式:
    yyyy-mm-dd
    yyyy/mm/dd
    'yyyy"年"mm"月"dd"日"'
  select to_char(hiredate) from emp  --使用默認格式將日期轉換爲字符
  select to_char(hiredate,'yyyy-mm-dd') from emp  --使用指定格式  yyyy-mm-dd
  select to_char(hiredate,'yyyy/mm/dd') from emp  --使用指定格式 yyyy/mmm/dd
  select to_char(hiredate,'yyyy"年"mm"月"dd"日"') from emp  --使用指定格式 'yyyy"年"mm"月"dd"日"'

其餘函數:

  1)nvl():nvl(字段名,新的值)
  若是字段值不爲null,則返回該字段的值。若是爲null則返回新的值
  2)nvl2():nvl2(字段名,處理1,處理2)
  若是字段值不爲null,則執行處理1,爲null執行處理2
  3)decode():decode(字段名,值1,處理1,值2,處理2,值3,處理3,...,公共處理)
  若是字段的值和decode中的條件值相同則執行對象的處理。若是都沒有則執行公共處理
  查詢員工的工資信息
  select ename,job,sal from emp
  查詢員工的薪水信息
  select ename,job,sal+nvl(comm,0),sal+comm,sal from emp
  select ename,job,nvl2(comm,sal+comm,sal) from emp
  顯示員工的職稱
  select ename,job,decode(job,'MANAGER','經理','PRESIDENT','董事長','SALESMAN','銷售','普通員工') from emp

分組查詢&篩選學習

  關鍵字:group by 分組字段名,分組字段名....
  注意1:使用了分組後,在select語句中只容許出現分組字段和多行函數。
  注意2:若是是多字段分組,則先按照第一字段分組,而後每一個小組繼續按照第二個字段繼續分組,以此類推。
  注意3:在where子句中不容許出現多行函數。
  分組篩選
    關鍵字:having
    做用:針對分組進行分組後的數據篩選,容許使用多行函數。
    注意:having關鍵必須和分組結合使用。不容許單獨使用。  
    where和having的比較:
      where子句不容許出現多行函數,having容許出現多行函數
      where子句和having均可以使用普通字段直接進行篩選,可是where的效率高於having
      where執行順序: from--->where--->group by-->select-->order by
      having執行順序:from--->group by-->select--->having--->order by
    結論:在分組語句中,使用where進行字段級別的篩選,使用having進行多行函數的篩選。   
  查詢最高工資和員工數
  select max(sal),count(*) from emp
  查詢不一樣部門的最高工資
  select deptno,max(sal) from emp group by deptno
  查詢不一樣工做崗位的員工數
  select job, count(*) from emp group by job
  查詢不一樣部門的不一樣工做崗位的人數
  select deptno ,lower(job),count(*) from emp group by deptno,job order by deptno
  查詢不一樣部門的不一樣工做崗位的而且人數大於1的信息
  select deptno ,lower(job),count(*) from emp  group by deptno,job having count(*)>1 order by deptno
  查詢部門號大於10的不一樣部門的不一樣工做崗位的人數
    使用having關鍵字
    select deptno ,lower(job),count(*) from emp group by deptno,job  having deptno>10  order by deptno
    使用where關鍵字
    select deptno,job,count(*) from emp where deptno>10 group by deptno,job  order by deptno

數據庫的增刪改&數據備份

  注意:增長刪除修改的數據SQL語句執行完畢後,不會立馬進行數據的寫入。
    還須要手動對數據進行提交,若是數據有問題還能夠回滾
  主鍵:非空惟一的字段能夠設置爲主鍵。
    在一張表中,某個字段的值是非空惟一的,將此字段設置爲主鍵。
    主鍵的做用:惟一的標識一條數據。

增長數據

  insert into 表名(字段名,字段名,...)values(值1,值2,值3....);
  注意1:主鍵必須給值,容許爲空的字段能夠不給值。
  注意2:插入語句表名後跟的字段名爲要賦值的字段,值和字段數量和順序必須是一一對應的。
  注意3:若是是全字段插入,能夠省略字段名部分 insert into 表名 values(值1,值2,.....)
  在部門中新增一個新的部門信息,信息內容爲 編號:50,名稱:a學院,地址:北京
  insert into dept(deptno,dname,loc)values(50,'a學院','北京');
  insert into dept(deptno,dname,loc)values(60,'a學院','北京');
  insert into dept values(60,'a學院','北京');
  在部門中新增一條數據,只有部門編號和名稱,沒有地址。
  insert into dept(deptno,dname)values(70,'a學院');

刪除數據

  delete from 表名 刪除表中的全部記錄
  truncate table 表名  刪除表中的全部記錄,可是效率高於delete
  delete from 表名 where 條件 --刪除指定的數據,只要符合條件就會刪除
  delete from dept where deptno=50 --刪除指定的數據
       delete from dept --清空表數據
       truncate table dept--清空表中數據

更新數據

  update 表名 set 字段名=新的值,字段名=新的值...(會將字段的值所有改成新的值)
  update 表名 set 字段名=新的值,字段名=新的值... where 條件(將符合條件的數據的字段改成新的值)
  update dept set dname='a學院',loc='上海'
  update dept set dname='a學院',loc='上海' where deptno=50

數據的備份

  注意:只會備份表結構和表的數據,約束不會備份。   表級別備份     所有備份:create table 新的表名 as select * from 備份表名     部分備份:create table 新的表名 as select 字段名,字段名,...from  備份表名   數據總體插入     insert into 插入表名 select * from 表名     注意:查詢語句結果的字段數據必須和插入表名的字段數量一致,類型要一致。        create table deptBak as select * from dept  --所有備份        create table deptBak2 as select deptno,dname from dept  -- 部分備份        insert into deptBak2 select deptno,dname from dept
相關文章
相關標籤/搜索