mysql和Oracle的簡單比較

來源:互聯網
上載者:User

標籤:範圍   ext   rom   art   工作   空值   toe   data   ant   

ORA-27101: shared memory realm does not exist解決方案:

1、用CMD進入命令列
2、sqlplus /nolog
3、conn / as sysdba
4、startup

首先介紹一下SQL92/99標準的四大分類

  DML(資料操縱語言):

select,insert,update,delete

 


  DDL(資料定義語言 (Data Definition Language)):

create table,alert table,drop table,truncate table

 


  DCL(資料控制語言):

grant 許可權 to scott,revoke 許可權 from scott

 


  TCL(事務控制語言):

commit,rollback,

 

下面會分別用類似的需求體現mysql和Oracle的區別

  mysql建立資料庫:

create database xxx;

  在Oracle中是建立資料表空間

create tablespace xxx;

--指定存放空間
datafile ‘C:xxx.dbf‘
--指定大小
size 100m
--大小滿了自動成長
autoextend on
--每次自動成長的大小
next 10m

  建立表mysql和oracle是一樣的

create table 表名{
  欄位名 類型(長度) [約束],
  .....
  .....
}

但是他們的類型各不相同:

 

mysql:
  varchar(n) 字串
  int 整型
  double 浮點
  date 時間

oracle:

  char:固定長度的字元類型,最多儲存2000個位元組
  varchar2:可變長度的字元類型,最多儲存4000位元組
  LONG:大文本類型,最大可以儲存2個G
  number:數實值型別
  number(5) 最大可以存99999
  number(5,2) 最大可以存999.99
  date:日期時間,精確到秒

mysql修改表結構

 

alter table category add ‘desc‘ varchar(20);

 

代表給category這個表添加一個字串長度為20的名為desc的欄位

 

Oracle修改表結構

  

alter table category add (desc varchar2(20));

 

同上

 

mysql修改欄位

  

alter table category change ‘desc‘ description varchar(30);

 

將desc這一列的欄位的字元長度改為30

 

Oracle修改欄位

  

alter table category modify(desc varchar2(30));

 

同上

 

mysql刪除欄位

  

alter table category drop desc;

 

刪除category表中desc這列

 

Oracle刪除欄位

  

alter table category drop column desc;

 

同上

 

 mysql和Oracle的增刪改SQL語句都一樣 

插入記錄(insert)
  

insert into category(cid,cname) values(1,‘xxx‘);

 

代表向category表中的cname列插入xxx資料


修改資料(update)
  

update category set cname = yyy where id =1;

 

代表將category表中id為1的cname欄位改為yyy


刪除資料(delete)
  

delete from category where id = 1;

 

代表刪除category表中的id為一的欄位資料

 

mysql和Oracle的jdbc串連

首先是Oracle
  Oracle匯入一個ojdbc14.jar的包
  反射載入驅動為:oracle.jdbc.driver.OracleDriver
  擷取串連:jdbc:oracle:thin:@192.168.80.10:1521:orcl

下面是mysql

  反射載入驅動為:com.mysql.jdbc.Driver
  擷取串連:jdbc:mysql://localhost:3306/test

下面是mysql和Oracle共有的屬性,主要是查詢語句

  這裡使用的是Scott使用者在Oracle中示範

基本查詢:(單表查詢)

  查詢emp表的所有內容
  

select * from emp;

 


  查詢emp表的不重複的工作
 

 select distinct job from emp;

 


  查詢員工的編號,姓名,月薪,年薪
 

 select empno,ename,sal,sal*12 from emp;

 

使用where語句查詢:

  查詢emp表中20號部門的員工資訊
  

select * from emp where deptno = 20;

 


  查詢姓名是SMITH的員工,字串使用‘‘,內容大小寫敏感
  

select * from emp where ename = ‘SMITH‘;

 

範圍查詢:

  查詢工資大於1500的員工
  

select * from emp where sal > 1500;

 


  查詢薪水在1300到1600之間的員工,包括1300和1600
  

select * from emp where sal between 1300 and 1600;

 


  查詢不是20號或30號部門的員工
 

 select * from emp where deptno not in (30,20);

 

like關鍵字:

  查詢姓名以大寫字母N結束的員工
  

select * from emp where ename like ‘%N‘;

 

空值查詢:

  查詢傭金為null的員工
  

select * from emp where comm is null;

 

and和or使用:

  查詢無傭金且工資大於1500的員工
  

select * from emp where(comm is null) and (sal > 1500);

 


  查詢職位是"MANAGER"或職位不是"ANALYST"的員工
 

 select * from emp where (job=‘MANAGER‘) or (job<>‘ANALYST‘);

 

排序查詢和order by使用

  查詢員工資訊(編號,姓名,月薪,年薪),按月薪升序排序,預設升序,如果月薪相同,按oracle內建的校正規則排序
  

select empno,ename,sal,sal*12 from emp order by sal asc;

 


  查詢員工資訊(編號,姓名,月薪,年薪),按月薪降序排序
  

select empno,ename,sal,sal*12 from emp order by sal desc;

 

彙總統計

  統計工資最高的人
  

select max(sal) from emp;

 


  統計工資最低的人
  

select min(sal) from emp;

 


  根據工號統計所有人數
  

select count(deptno) from emp;

 


  分組後的條件查詢
  查詢部門平均工資大於2000元的部門
  

select deptno "部門編號",trunc(avg(sal),0) "部門平均工資" from emp group by deptno having trunc(avg(sal),0) > 2000 order by 2 desc;

 


  這裡的2代表的是第二個條件,也就是部門平均工資

 

需要注意的是:
  where是行過濾器,針對原始記錄,跟在from後面,先執行
  having是組過濾器,針對分組後的記錄,跟在group by後面,後執行

下面是多表查詢:

  串連查詢:
  內串連查詢:只能查詢出合格記錄
  外串連查詢:既能查詢出合格記錄,也能根據一方強行將另一方查詢出來

多表外串連查詢:(左外串連)
  按部門10,20,30,40號,統計各部門員工人數,要求顯示部門號,部門名,人數
  首先是sql99:
  

select dept.deptno "部門號",dept.dname "部門名",count(emp.empno) "人數" from dept left join emp on    dept.deptno = emp.deptno group by dept.deptno,dept.dname;

 


  下面是Oracle專用語句:
  

select dept.deptno "部門號",dept.dname "部門名",count(emp.empno) "人數" from dept,emp where dept.deptno = emp.deptno(+) group by dept.deptno,dept.dname;

 


  右外串連
  首先是sql99:
  

select dept.deptno "部門號",dept.dname "部門名",count(emp.empno) "人數" from emp left join dept on emp.deptno = dept.deptno group by dept.deptno,dept.dname;

 

 

  下面是Oracle專用語句:
 

 select dept.deptno "部門號",dept.dname "部門名",count(emp.empno) "人數" from dept,emp where emp.deptno(+) = dept.deptno group by dept.deptno,dept.dname;

 

 

  自串連查詢:

顯示"SMITH的上級是FORD"
 

 select users.ename || ‘的上級是‘ ||boss.ename from emp users,emp boss where users.mgr = boss.empno;

 

 

子查詢:
  查詢條件未知的事務
  查詢工資比WARD高的員工資訊
  

select * from emp where sal > (select sal from emp where ename = ‘WARD‘);

 

mysql和Oracle的簡單比較

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.