1. 程式人生 > >常用資料庫常用命令使用

常用資料庫常用命令使用

SQL:Structured Query Language,結構化查詢語言(資料以查詢為主,99% 都是在進行查詢操作)。
SQL 主要分為三種:
• DDL:Data Definition Language,資料定義語言,用來維護儲存資料的結構(資料庫、表),代表指令為create、drop和alter等。
• DML:Data Manipulation Language,資料操作語言,用來對資料進行操作(表中的內容)代表指令為insert、delete和update等,不過在 DML 內部又單獨進行了一個分類,即 DQL(Data Query Language),資料查詢語言,代表指令為select.
• DCL:Data Control Language,資料控制語言,主要是負責(使用者)許可權管理,代表指令為grant和revoke等。

SQL 是關係型資料庫的操作指令,是一種約束,但不強制,類似於 W3C,因此這意味著:不同的資料庫產品(如 Oracle 和 MySQL)內部可能會有一些細微的區別。

在 SQL 中,將資料型別分成了三大類,分別為:數值型、字串型和日期時間型。


Oracle常用命令的使用:(以scott使用者的預設建立的表做測試)

命令圖示:


基本查詢:

          /**EMP僱員--DEPT部門--SALGEADE銷售分數**/
  select *from emp;
  select * from dept;
  select * from salgrade;
/**分組和聚合函式一起用**/
  select distinct count(*) as empnum from emp group by deptno order by empnum desc;
  /**別名查詢(如果有特殊字元用雙引號)和去重查詢**/


  select empno " 僱員 編號 ", ename " 僱員 名稱 " from emp;
  select distinct deptno from emp;
  /**對結果做運算**/
  select empno,ename,sal+999 from emp;
  select * from emp where not JOB = 'CLERK';
  select * from emp where sal in (800,1000,1200,1400,1600,1800);
  select * from emp where comm is not null;
  select * from emp where comm is null;
  select * from emp where sal between 1000 and 2900;
  /**模糊查詢**/

  select * from emp where ename like '%T_';
  /**帶有特殊符號的查詢使用轉義字元,關鍵字指出轉義符號**/
  select * from emp where ename like '%\%R%' escape '\'; 
  /**空值處理、空值參與的運算都會導致結果為空**/
  select (sal+nvl(comm,0))*12 年薪 from emp where empno = 7369;
  select * from emp order by comm desc nulls first;/**空值排在前面**/
  select * from emp order by comm desc nulls last;/**空值排在後面**/

  /**常用函式--dual 虛表, 意義:補全語法**/

          replace,substr,length,||,to_char,to_date,round,trunc,mod,decode,case when,nvl,Coalesce,count,max,min,avg,sum

  /**字串的操作**/
  select substr('你好中國人',0,2) from dual;
  select replace('你好中國人','中國','外國') from dual;
  select length('abcdefghijklmnopqrstuvwxyz') from dual;
  select concat('你好','中國人') from dual;/**或者||**/select '你好' || '中國人' from dual;
  /**日期**/
  select round(months_between(sysdate,hiredate)/12) from emp;/**round 返回當前值四捨五入後的值**/
  select months_between(to_date('1981/1/1','yyyy.mm.dd'),to_date('1978/1/1','yyyy.mm.dd'))from emp;

select*fromempwherehiredate>to_date('1981/1/1','yyyy.mm.dd')and           hiredate<to_date('1981/12/31','yyyy.mm.dd')

  /**資料處理**/
  /**round四捨五入**/
  select round(4.8) from dual;
  select round(4.1) from dual;
  /**trunc截斷,捨棄小數部分**/
  select trunc(3.141592654) from dual;
  /**ceil向上取整**/
  select ceil(3.15) from dual; 
  /**floor向下取整**/
  select floor(3.9898) from dual;
  /**絕對值**/
  select abs(-56.5) from dual;
  /**取餘**/
  select mod(25,4) from dual;
  /**轉換函式,orable不提供日期和字串的自動轉化**/
  select to_char(sysdate) from dual;
  select to_date('2018/3/20','yyyy,mm.dd') from dual;
  select to_number('12315') from dual;
  /**通用函式**/
  select concat('123','456') from dual;
  /**nvl--第一個值不為空取之,若為空,則取第二個**/
  select nvl(1,null) from dual;
  /**nullif--相等則為null,否則取第一個**/
  select nullif(4,1) from dual;
  /**nvl2--如果第一個不為空則選擇第二個,否則選擇第三個**/
  select nvl2(1,2,3) from dual;
  /**coalesce--返回第一個不為空的值**/
  select coalesce(null,null,null,9,null,8) from dual;
  /**條件表示式**/
  select * from emp;
  select ename,(case job when 'CLERK' then '文員'
    when 'SALESMAN' then '銷售員'
    when 'MANAGER' then '管理員'
    else '其他' end) from emp;
  /**decode--特有關鍵字**/
  select decode(job,'CLERK','文員','SALESMAN','銷售員','MANAGER','管理員') from emp;
  /**多行函式**/
  --分組函式
  --(where與having區別
  /**where 是在from後面, 在group by 前。where 過濾的是物理表(from)中的資料,先過濾再分組
  having 是在group by 後面, 過濾分組後的資料**/
  select * from emp;
  select deptno,count(1) from emp group by deptno;
  select deptno,count(1) from emp group by deptno having deptno = 10;
  --聚合函式
  --count,max,min,avg,sum
  select count(1) from emp;
  select max(sal) from emp;
  select min(sal) from emp;
  select avg(sal) from emp;
  select sum(comm) from emp;
  /**練習**/
  select * from emp;
  select ename
  /**-----------------------------------------**/
  --部門員工數量大於三
  select count(1) from emp group by deptno having count(1)>3;
  select * from emp
  select e1.empno,e1.ename,e1.hiredate from emp e1,emp e2 where e1.empno = e2.mgr 
  /**內連線查詢**/
  --隱式內連線(僱傭表和部門表
  select * from emp e,dept d where e.deptno = d.deptno;
  --顯式內連線
  select * from emp e join dept d on e.deptno = d.deptno;
  /**外連線**/
  --左外連線
  select * from emp e left outer join dept d on e.deptno = d.deptno;
  select * from dept;select * from emp;
  --右外連線
  select * from emp e right outer join dept d on d.deptno = e.deptno;
  --Orable外連線(+號連線的是外表)
  select * from emp e,dept d where e.deptno = d.deptno(+);
  select * from emp e,dept d where e.deptno(+) = d.deptno;
  
  /**自關聯**/
  select e.empno,e.ename,e.mgr,m.ename from emp e, emp m where e.mgr = m.empno;
  /**子查詢**/
  select * from emp where sal = (select max(sal) from emp);
  select * from emp where sal>(select sal from emp where empno = 7654) and job = (select job from emp where           empno = 7788) and empno <> 7788;
  select * from (select deptno,min(sal) from emp group by deptno) e,dept where e.deptno = dept.deptno
  /**多行子查詢**/
  select * from emp where empno in (select distinct mgr from emp);
  select * from emp where empno not in (select distinct mgr from emp where mgr is not null);
  /**exists**/
  select * from emp where exists(select * from emp where emp.deptno = 10);  
  select avg(sal) from emp e where e.deptno = (select min(deptno) from emp)
  /**集合**/
  --union

  --union all

          --row是一個偽列,rowid是資料儲存的實體地址
          select rownum,rowid,ename from emp;
          --找出工資表中工資最高的前三名
          select rownum,ename,sal from emp order by sal desc;


          --要先按照降序排序後再使用偽列生成的序號進行顯示
          select rownum,ename,sal from (select ename,sal from emp order by sal desc) where rownum<=3;
          select rownum,t.* from (select ename,sal from emp order by sal desc) t where rownum<=3;


          /**Oracle的分頁補充:
          查詢員工表中的第5條記錄到第10條記錄.
          <=5 and >=10
          */

        --rownum--每當按照條件查詢出一條記錄,則當前rownum+1生成對應的序號加到當前記錄上,但是如果當前沒有查詢出滿足條件的結果時,rownum當然不會自動增長了.rownum從1開始

        select * from ( select rownum rn,e.* from emp e where rownum<=10) t where t.rn>=5;

          /**
          找出員工表中薪水大於本部門平均薪水的員工資訊
          分析:部門的平均薪水
          */
          select * from emp e where e.sal>(select avg(sal) from emp);


          /**
          統計每年入職員工的個數
          分析:算出年 to_char(hiredate,'yyyy')
          count, 按年分組 
          */
       select to_char(hiredate,'yyyy') 年份,count(to_char(hiredate,'yyyy')) 數量 from emp group by to_char(hiredate,'yyyy')        order by 年份;

          --(EXTRACT:擷取日期型別對應的部分)語法如下:  
          --EXTRACT (  
          --        { YEAR | MONTH | DAY | HOUR | MINUTE | SECOND }  
          --        | { TIMEZONE_HOUR | TIMEZONE_MINUTE }  
          --        | { TIMEZONE_REGION | TIMEZONE_ABBR } 
          select extract(year from hiredate ) 年份,count(extract (year from hiredate)) 數量 from emp group by extract(year           from hiredate) order by 年份;
          select extract(year from hiredate ) 年份,count(1) 數量 from emp group by extract(year from hiredate) order by 年份;

          --行列互換--(重要)
          select 
          sum(decode(t.y,'1980',t.c,0)) "1980",
          sum(decode(t.y,'1981',t.c,0)) "1981",
          sum(decode(t.y,'1982',t.c,0)) "1982",
          sum(decode(t.y,'1987',t.c,0)) "1987",
          count(1) total from
          (select extract(year from hiredate ) y,count(1) c from emp group by extract(year from hiredate) order by y) t;

          --集合的運算(並、交、差)
           /**select後面的列的型別,順序必須一致
          運用場景:多張表的結果集合運算
          並集: union     去重複
          union all  所有
          交集:  intersect
          差集: minus
          **/
          select * from emp union select * from emp;

          select * from emp  union all select * from emp;

          --工資大於1500,或者是20部門下的員工

          select * from emp where sal>1500 or deptno = 20;

          select * from emp where sal>1500
          union
          select * from emp where deptno = 20;

          控制語句:

--建立表空間
          create tablespace yang
          datafile 'c:\yang.dbf'
          size 50M
          autoextend on
          next 10M ;
          --給使用者設定建立的表空間
          alter user yanghao identified by yanghao default tablespace yang;
          --檢視使用者的表空間
          select username, default_tablespace from user_users;
          --建立一張使用者賬號表
          create table counts (id number(10) primary key,username varchar2(20),password varchar2(20),description clob);
          --刪除表
          drop table counts;
          --插入資料
          insert into counts values(1,'1','hahaha1','good1 ideas');
          insert into counts values(2,'2','hahaha2','good2 ideas');
          insert into counts values(3,'3','hahaha3','good3 ideas');
          insert into counts values(4,'4','hahaha4','good4 ideas');
          insert into counts values(5,'5','hahaha5','good5 ideas');
          insert into counts values(6,'6','hahaha6','good6 ideas');
          --查看錶資料
          select * from counts;
          --建立當前操作的一個儲存點(方便回滾到固定的儲存狀態)
          savepoint a_point;
          rollback to a_point;
          commit;
          --建立一個counts表的試圖,只顯示當前1~3標號的使用者
          create or replace view count_view as
          select * from counts where id<=3 with read only;
          --檢視當前的檢視
          select * from count_view;
          --事務
          --4個特性(ACID)
          --A: 原子性, 不可再分割
          --C: 一致性,要麼成功,要麼失敗
          --I: 隔離性 (髒讀,不可重複讀(update),虛/幻讀(insert,delete))
          --D: 持久化性, 事務一旦提交,就會儲存到磁碟中
          --MySql支援的事務級別有哪些?
          -可重複讀(Repeatable Read,預設),提交讀(Read Committed),序列化(Serializable), 未提交讀(Read Uncommmited)
          --Oracle支援的事務級別

          -- Read Committed(預設), Serializable, read only

          --序列資料庫提供一種數值型別,且按一定規則自動增長的序號 場景:需要自動增長主鍵,或需要自動增長的序號
          --建立自定義的序列
          create sequence incre_key 
          start with 1
          minValue 1
          maxValue 10
          cycle
          increment by 1
          cache 3
          --使用序列(在一次session累加)
          create table test(testId number(10),name varchar2(10));
          insert into test values(incre_key.nextval,'haha');
          select incre_key.currval from dual;
          drop table test;
          /**
          索引
          是什麼? 一組資料庫已經算好了的資料結構
          作用: 提交查詢效率,缺點:插入與刪除的效率會降低
          使用 create index 名稱 on table(列名,...), bitmap, btree
          如果有多個列,就叫複合索引(索引的列必須都用上時,索引才生效) 
          一個表最多不要超過5個索引
          */
          --索引的使用
          --1. 資料量大的表
          --2. 經常執行表更新的操作(insert,update,delete), 不適合索引
          --3. 索引的列不要出現空值
          --4. 經常查詢條件的列或排序的列可以建索引
          --索引的失效:
          -- not, in, is not, is null
          select * from stu where sname='學生第1學生';--9.860
          --建立索引
          create index index_stu_sname on stu(sname);
          --再查詢一次當前的資料時間減少
          select * from stu where sname='學生第2學生';--0
          /**
            觸發器: 它是一段寫好的plsql語句
            行級:影響了多少條記錄,就觸發多少次
            語句:不影響了多少記錄,只觸發一次
            create or replace trigger
            before|after
            on insert|update|delete
            for each row   --代行級
            begin
            --程式碼
            end;
            作用: 記錄日誌,同步資料
          */
          create or replace trigger pre_insert
          before
          insert on counts
          begin
                  raise_application_error(-20111,'週三不能插入員工資訊');
          end;

          insert into counts values(88,'test','test','test');
          /**移除觸發器**/
          drop trigger pre_insert;
          /**
          同義詞:
           reate synonym 名字 for 表
          作用: 簡化編寫,遮蔽表名的含義, 資料庫同步ETL
          */
          select * from user_tables;
          create synonym students for stu;
          select * from students;
          select * from counts;

          儲存結構、資料庫程式設計:

          /**pl/sql程式設計**/
          declare
                i number(10):=incre_key.nextVal;
                name counts.username%type;
                psd counts.password%type;
          begin
                  name:='test';
                  psd:='test'
                  insert into counts values(i,name,psd,'test');
                  commit;
                  dbms_output.put_line('name: '||test||'psd: 'psd);
          end;
          /**遊標的使用**/
          --使用遊標輸出emp表中的員工編號和姓名
          declare 
          cursor pc is select * from scott.emp;--遊標(返回整個emp表的資料)
          pemp scott.emp%rowtype;
          begin
                 open pc;--開啟遊標
                 loop
                  fetch pc --呼叫一次遊標
                          into pemp; --把遊標當前行的結果存到變數pemp中
                  dbms_output.put_line(pemp.empno||' '||pemp.ename);
                  exit when pc%notfound;
                 end loop;
                 close pc;--關閉遊標
          end;
          /**例外/異常**/
          declare
          pnum number;
          pnum2 varchar(10);
          begin
            pnum:=1/0;
          exception
            when zero_divide then
          dbms_output.put_line('除零異常');
            when value_error then
          dbms_output.put_line('數值轉換異常');
           when others then
          dbms_output.put_line('其他異常');
            end;

相關推薦

常用資料庫常用命令使用

SQL:Structured Query Language,結構化查詢語言(資料以查詢為主,99% 都是在進行查詢操作)。SQL 主要分為三種:• DDL:Data Definition Language,資料定義語言,用來維護儲存資料的結構(資料庫、表),代表指令為crea

MySQL資料庫常用操作命令

接上一篇的操作: 1.查詢相反條件:select   查詢欄位    from   表名    where   not   (查詢條件); 2.範圍查詢: 

MySQL資料庫常用命令大全

                                常用命令大全(持續更新) show databases;顯示所有資料庫

資料庫常用命令(部分)

1、建立資料庫 CREATE DATABASE 資料庫名; 2、刪除資料庫 drop database 資料庫名; 3、從命令提示視窗中選擇MySQL資料庫 use 資料庫名; 4、MySQL 建立資料表 CREATE TABLE table_name(表名) (column_name

瞭解SQLPLUS連線資料庫的方法 ,掌握SQLPLUS設定環境變數的操作方法 ,掌握利用SQLPLUS格式化查詢結果的方法 ,掌握常用的SQLPLUS命令,掌握在SQLPLUS編寫及運

撰寫人——軟工二班——陳喜平 – 實驗步驟: – 1、利用SQLPLUS連線oracle資料庫 sqlplus s16436220/[email protected] – 2、設定SQLPLUS的環境變數 – pagesize – linesize show p

Ubuntu下資料庫常用命令

登入MySQL $ sudo mysql -u root -p 列舉所有的資料庫 mysql> show databases; (*分號) 建立名叫database_name的資料庫 mysql> create database database_name; 進入某一個數據庫

MongoDB資料庫常用命令

1、檢視命令提示 db.help();  2、切換/建立資料庫 use mydb01;  切換到mydb的資料庫,如果該資料庫不存在,則自動建立。 MongoDB中預設的資料庫為test,如果你沒有建立新的資料庫就會執行集合或者文件操作,資料將存放在

mysql資料庫常用命令(一)

– 資料庫的操作 -- 連結資料庫 mysql -uroot -p mysql -uroot -pmysql -- 退出資料庫 exit/quit/ctrl+d -- sql語句最後需要有分號;結尾 -- 顯示資料庫版本 select version()

Linux下操作MySQL資料庫常用命令

目錄 5.查詢表 9.退出 1.連線資料庫 mysql -u -root -p 輸入密碼 2.檢視資料庫 show databases;  3.開啟資料庫

mysql資料庫常用的一些基本命令

安裝 yum - y install mysql-servse 啟動mysql服務 service mysqld start 執行埠為3306 登陸 mysql -uroot 語法 :mysql -u賬號 -p密碼 預設是空密碼 庫和表 層次關係 庫--&

Redis資料庫常用命令

Redis是一個開源的使用ANSI C語言編寫、支援網路、可基於記憶體亦可持久化的日誌型、Key-Value資料庫,並提供多種語言的API。 Redis 是一個高效能的key-value資料庫。Redis的出現,很大程度補償了memcached這類key/value儲存的不

MYSQL資料庫常用命令

MySQL是一個關係型資料庫管理系統,由瑞典MySQL AB 公司開發,目前屬於 Oracle 旗下產品。MySQL 最流行的關係型資料庫管理系統,在 WEB 應用方面MySQL是最好的 RDBMS (Relational Database Management

SQL資料庫常用命令

建立資料庫 create database student;//建立一個名為student的資料庫 建立資料庫的表 create table student //定義一個名為student的表 ( sno char(9) primary key, sname cha

MongoDB建立表步驟,Mongo常用資料庫操作命令,查詢,新增,更新,刪除_MongoDB 效能監測

->use Admin         (切換到建立使用者) ->db.TestDb          (建立資料庫) ->db.addUser(“userName”,”Pwd”)    建立使用者 ->db.auth(“userName”,

MongoDB資料庫常用操作命令

常用操作 檢視幫助 db.help() 當前資料庫的版本 db.version() 當前使用的資料庫 db.getName() 當前資料庫的狀態 db.stats() 當前資料庫的地址 db.getMongo() 查詢錯誤資訊

mysql常用的一些命令,用於檢視資料庫、表、欄位編碼

1.檢視資料庫支援的所有字符集 show character set;或show char set; 2.檢視當前狀態 裡面包括當然的字符集設定 status或者\s 3.檢視系統字符集設定,包括所有的字符集設定 show variables like 'char%'; 4.檢視資料表中字符集設定 show

資料庫常用操作命令語句

關於DOS命令: 進入命令提示符控制檯CMD,命令:打了一個字串通過回車讓計算機去執行一定的操作; 進入碟符,D: 、C: 進入到目錄 cd ,跟的目錄名稱是可以使用萬用字元*,比如要進入 d:/mydocument ,可以通過命令cd mydoc* 返回上級目錄 cd… 列式目錄 dir

常用oracle資料庫查詢命令

(1)Select * from tables(表名);//查詢表tables的內容 (2)Truncate table tables(表名);//清除表內資料;但保留格式 (3)Select  ID(列名)from tables  groupby ID(列名)、ID2(

Windows下還原Oracle資料庫常用命令

Windows環境下使用命令的方式還原資料庫: 1   win+R  進入DOS環境; 2   sqlplus /nolog                            進入Oracle命令環境 3   conn /as sysdba              

Sybase資料庫常用命令

一、Sybase資料庫簡介 1.版本 1984年,Mark B. Hiffman和Robert Epstern建立了Sybase公司,並在1987年推出了Sybase資料庫產品。SYBASE主要有三種版本,一是UNIX作業系統下執行的版本,二是Novell Netware環