1. 程式人生 > >oracle基礎教程(第二天)

oracle基礎教程(第二天)

一、oracle表的管理 表名和列的命名規範 1.必須以字母開頭 2.長度不能超過30字元 3.不能使用oracle的保留字(關鍵字) 4.只能使用如下字元 A-Z,a-z,0-9,$,#等 oracle支援的資料型別 1.字元型     char    定長  最大2000字元        比較佔用空間,但是對於定長的資料很實用,查詢速度極快,例如身份證號欄位設定為char(18)     例子:char(10) '小韓'    前四個字元放'小韓',後添6個空格不全     varchar2  變長  最大4000字元     例子:varchar2(10)  '小韓'  oracle分配四個字元,這樣可以節省空間      clob
(character large object)  字元型大物件  最大4G     2.數字型     number  範圍  -10的38次方-10的38次方     可以表示整數,也可以表示小數     number(5,2)     表示一個小數有5位有效數,2位小數     範圍:-999.99~999.99     number(5)     表示一個五位整數     範圍:-99999~99999 3.日期型別     date                    包括年月日和時分秒     timestamp          這是oracle9i對date資料型別的拓展 4.圖片型別
blob    二進位制資料    可以存放圖片/聲音  最大4G 建表 --學生表     SQL>create table student(  --  表名     xh number(4),    --    學號     xm varchar2(20),    --    姓名     sex char(2),    --    性別     birthday date,    --    出生日期     sal number(7,2)    --    獎學金     ); --班級表     SQL>create table class(     classId number(2),     cname varchar2(20)     ); 修改表
新增一個欄位 SQL>alter table student add (classId number(2)); 修改欄位的長度 SQL>alter table student modify (xm varchar2(30)); 修改欄位的型別/或是名字(不能有資料) SQL>alter table student modify (xm char(30)); 刪除一個欄位 SQL>alter table student drop column sal; 修改表的名字 SQL>rename student to stu; 刪除表 SQL>drop table student; 新增資料 所有欄位都插入 SQL>insert into student values ('A001','張三','男','01-5月-05',,10); ORACLE中預設的日期格式'DD-MON-YY'  dd日子(天) mon 月份  yy 2位的年  '09-6月-99'  1999年6月9日 改日期的預設格式 SQL>alter session set nls_date_format = 'yyyy-mm-dd'; 修改後,可以用我們熟悉的格式新增日期型別: SQL>insert into student values ('A002','MIKE','男','1905-05-06',,10); 插入部分欄位 SQL>insert into student (xh,xm,sex) values ('A003','JOHN','女'); 插入空值 SQL>insert into student (xh,xm,sex,birthday) values ('A004','MARTIN','男',null); 改一個欄位 SQL>update student set sex='女' where xh='A001'; 修改多個欄位 SQL>update student set sex='男',birthday='1980-04-01' where xh='A001'; 刪除資料 SQL>delete from student; 刪除所有記錄,表結構還在,寫日誌,可以恢復,速度慢 需要設定儲存點:savepoint aa;  回滾儲存點:rollback to aa; SQL>drop table student;   刪除表的結構和資料
SQL>
delete from student where xh='A001';  刪除一條記錄
SQL>
truncate table student; 刪除表中的所有記錄,表結構還在,不寫日誌,無法找回刪除的記錄,速度快 簡單的查詢語句 查看錶結構 SQL>desc dept; 查詢所有列 SQL>select * from dept; 查詢指定列 SQL>select ename,sal,job,deptno from emp; 如何取消重複行 SQL>select distinct deptno,job from emp; 使用算術表示式顯示每個僱員的年工資 SQL>select sal*12+nvl(comm,0)*12     "年工資",ename,comm from emp; 使用列的別名 SQL>select ename "姓名",sal*12 "年收入" from emp; 如何處理null值 使用nvl函式來處理 如何連線字串(||) SQL>select ename || ' is a ' || job from emp; 使用where子句 如何顯示工資高於3000的員工? SQL>select * from emp where sal >=3000; 如何查詢1982.1.1後入職的員工? SQL>select * from emp where hiredate > '1-1月-1982'; 如何顯示工資在2000到2500的員工情況? SQL>select ename,sal from emp where sal between 2000 and 2500; 如何使用like操作符 %:表示任意0到多個字元   _:表示任意單個字元 如何顯示首字元為S的員工姓名和工資? SQL>select ename,sal from emp where ename like 'S%'; 如何顯示第三個字元為大寫O的所有員工的姓名和工資? SQL>select ename,sal from emp where ename like '__O%'; 在where條件中使用in 如何顯示empno為123,345,800...的僱員情況? SQL>select ename,empno from emp where empno in (123,345,7844);
使用is null的操作符 如何顯示沒有上級的僱員的情況? SQL> select * from emp where mgr is null; 使用邏輯操作符號 查詢工資高於500或是崗位為MANAGER的僱員,同時還要滿足他們的姓名首字母為大寫的J SQL> select * from emp where (sal > 500 or job = 'MANAGER') and ename like 'J%'; 使用order by子句 如何按照工資的從低到高的順序顯示僱員的資訊? SQL> select * from emp order by sal; 按照部門號升序而僱員的工資降序排列 SQL> select * from emp order by deptno,sal desc; 使用列的別名排序 SQL>select ename,sal*12 "年薪" from  emp order by "年薪"; oracle表複雜查詢 - 單表查詢 說明:在實際應用中經常需要執行復雜的資料統計,經常需要顯示多張表的資料,現在我們給大家介紹較為複雜的select語句 資料分組函式-max,min,avg,sum,count 如何顯示所有員工中最高工資和最低工資? SQL>select max(sal),min(sal) from emp; 顯示所有員工的平均工資和工資總和? SQL> select sum(sal),avg(sal) from emp; 計算共有多少員工? SQL> select count(*) from emp; 擴充套件要求: 請顯示工資最高的員工的名字,工作崗位 SQL> select ename,sal from emp where sal = (select max(sal) from emp); 請顯示工資高於平均工資的員工資訊 SQL> select * from emp where sal > (select avg(sal) from emp); group by和having子句 group by用於對查詢的結果進行分組顯示 having子句用於限制分組顯示結果 如何顯示每個部門的平均工資和最高工資 SQL>select avg(sal),max(sal),deptno from emp group by deptno; 顯示每個部門的每種崗位的平均工資和最低工資 SQL>select avg(sal),min(sal),deptno,job from emp group by deptno,job; 顯示平均工資低於2000的部門號和他的平均工資 SQL> select deptno,avg(sal),max(sal) from emp group by deptno having avg(sal)<2000; 對資料分組的總結 1.分組函式只能出現在選擇列表、having、order by子句中 2.如果在select語句中同時包含有group by,having,order by,那麼他們的順序是group by,having,order by 3.在選擇列中如果有列、表示式和分組函式,那麼這些列和表示式必須有一個出現在group by子句中,否則會出錯。 如select deptno,avg(sal),max(sal) from emp group by deptno having avg(sal)<2000;     這裡deptno就一定要出現在group by中。 oracle表複雜查詢 - 多表查詢 說明 多表查詢是指基於兩個和兩個以上的表或是檢視的查詢,在實際應用中,查詢單個表可能不滿足你的需求,(如顯示sales部門位置和其員工的姓名),這種情況下需要使用到(dept表和emp表) 顯示僱員名,僱員工資及其所在部門的名字【笛卡爾積】 規定:多表查詢的條件是 至少不能少於表的個數-1 SQL>select t1.ename,t1.sal,t2.dname,t2.deptno from emp t1,dept t2 where t1.deptno=t2.deptno; 如何顯示部門號為10的部門名、員工名和工資 SQL>select t1.ename,t1.sal,t2.dname,t2.deptno from emp t1,dept t2 where t1.deptno=t2.deptno and t1.deptno=10; SQL>select t1.dname,t2.ename,t2.sal from dept t1,(select ename,sal,deptno from emp where deptno=10) t2 where t1.deptno=t2.deptno; 顯示各個員工的姓名,工資,及其工資的級別 SQL>select t2.grade,t1.ename,t1.sal from emp t1,salgrade t2 where t1.sal between t2.losal and t2.hisal; 擴充套件要求: 顯示僱員名,僱員工資及其所在部門的名字,並按部門排序。 SQL>select t2.ename,t2.sal,t1.dname,t1.deptno from dept t1,emp t2 where t1.deptno=t2.deptno order by t1.deptno; 自連線 自連線是指在同一張表的連線查詢 顯示某個員工的上級領導的姓名 SQL>select a1.ename,a1.mgr,a2.ename from emp a1,emp a2 where a1.mgr=a2.empno; 什麼是子查詢 子查詢是指嵌入到其他sql語句中的select語句,也叫巢狀查詢 單行子查詢是指只返回一行資料的子查詢語句 請思考,如何顯示與smith同一部門的所有員工。 SQL>select * from emp where deptno=(select deptno from emp where ename='SMITH'); 多行子查詢是指返回多行資料的子查詢語句 請思考,如何查詢和部門10的工作相同的僱員的名字,崗位,工資和部門號 SQL>select ename,job,sal,deptno from emp where job in (select job from emp where deptno=10); 在多行子查詢中使用all操作符 請思考,如何顯示    工資比部門30的所有員工的工資高的員工的姓名,工資和部門號 SQL>select * from emp where sal > all (select sal from emp where deptno=30); 擴充套件要求: 大家想想還有沒有別的查詢方法。 SQL>select * from emp where sal > (select max(sal) from emp where deptno=30); 在多行子查詢中使用any操作符 請思考,如何顯示工資比部門30的任意一名員工的工資高的員工的姓名,工資和部門號 SQL>select * from emp where sal > any (select sal from emp where deptno=30); 擴充套件要求: 大家想想還有沒有別的查詢方法。 SQL>select * from emp where sal > (select min(sal) from emp where deptno=30);
多列子查詢 多列子查詢是指查詢返回多個列資料的子查詢語句 請思考如何查詢與smith的部門和崗位完全相同的所有僱員 SQL> select * from emp where (deptno,job)=(select deptno,job from emp where ename='SMITH'); 在from子句中使用子查詢 請思考,如何顯示高於自己部門平均工資的員工的資訊 SQL>select * from emp t1,(select deptno,avg(sal) avg_sal from emp group by deptno) t2 where t1.sal>t2.avg_sal and t1.deptno=t2.deptno; 這裡需要說明的是當在from子句中使用子查詢的時候,該子查詢會被作為一個檢視來對待,因此叫做內嵌檢視。黨在from子句中使用子查詢時,必須給子查詢指定別名。 分頁查詢 oracle分頁一共有三種方式: 1、rownum分頁 (select * from emp) 2、顯示rownum[oracle分配的] SQL>select a1.*,rownum rn from (select * from emp) a1; 3、按rownum分頁查詢 SQL>select * from (select a1.*,rownum rn from (select * from emp) a1) where rn<=10; SQL>select * from (select * from (select a1.*,rownum rn from (select * from emp) a1) where rn<=10) where rn>=6; 4、幾個查詢變化 a.指定查詢列,只需要修改最裡層的子查詢 b.如何排序,只需要修改最裡層的子查詢 用查詢結果建立新表 這個命令是一種快捷的建表方法 SQL>create table mytable(id,name,sal,job,deptno) as select empno,ename,sal,job,deptno from emp; 合併查詢 有時候在實際應用中,為了合併多個select語句的查詢結果,可以使用集合操作符號,union(合併去重),union all(合併不去重),intersect(取交集),minus(取差集)。比and,or的效率高很多在oracle中操作資料-使用特定格式插入日期值 如何插入列帶有日期的表,並按照年-月-日的格式插入。 SQL>insert into emp values('9996','ROSE','CLERK','7902',to_date('1993/7/22','yyyy/mm/dd'),'1000.00','200.00','10'); SQL>select * from emp where to_char('RKSJ','yyyy-mm-dd') >='2016-05-12'; 在oracle中操作資料-使用子查詢插入資料 當使用values子句時,一次只能插入一行資料,當使用子查詢插入資料時,一條insert語句可以插入大量的資料。當處理行遷移或者裝載外部表的資料到資料庫時,可以使用子查詢來插入資料。 SQL>insert into kkk (myid,myname,mydept) select empno,ename,deptno from emp where deptno = 10; 在oracle中操作資料-使用子查詢更新數 使用update語句更新資料時,既可以使用表示式或者數值直接修改資料,也可以使用子查詢修改資料 希望員工scott的崗位、工資和補助與smith員工一樣。 SQL>update emp set (job,sal,comm) = (select job,sal,comm from emp where ename = 'SMITH') where ename = 'SCOTT';

相關推薦

oracle基礎教程第二

一、oracle表的管理 表名和列的命名規範 1.必須以字母開頭 2.長度不能超過30字元 3.不能使用oracle的保留字(關鍵字) 4.只能使用如下字元 A-Z,a-z,0-9,$,#等 oracle支援的資料型別 1.字元型     char    定長  最大2

oracle基礎教程第一

一、做專案該用什麼資料庫要考慮哪些方面? 1.專案的規模 2.負載量多大,使用者多大 3.成本 4.安全性 小型資料庫(access、foxbase) 1.負載量小,使用者量在1000人以內,比如留言板,小型資訊系統 2.成本在千元左右 3.對安全性要求不高 中型資料庫

python基礎教程第二---1.4數字和表達式

pan com -1 一行 img 分享 cnblogs 第二版 輸出結果 一、除法 二、取余運算 對於整數: 對於浮點數: 2.75/0.5是為了說明除法結果是5.5 取余的時候(2.75-5*0.5)==0.25就得到了第一行的輸出結果0.25啦 這

嵌入式linux基礎教程第二第一章

       linux已經成為很多裝置的作業系統,手機、DVD播放器、電子遊戲機、數碼相機、網路交換機和無線網路裝置、機頂盒、高清電視、藍光DVD播放器、汽車的資訊娛樂中心和很多日常使用的電器等都在使用linux作業系統。linux已經成為很多裝置的嵌入式作業系統 一.為

python基礎教程第二

第十章 自帶電池 匯入模組: import sys sys.path.append('c:/python27')//告訴程式到這裡找模組 1.1. 若模組是一個程式,則在匯入時只執行一次,後面匯入不在執行,修改後可以用reload函式重新匯入,這

oracle基礎教程第五管理索引、許可權和角色

期望目標 1.掌握維護oracle資料完整性的技巧 2.理解索引概念,會建立索引 3.管理oracle的許可權和角色 維護資料的完整性 資料的完整性用於確保資料庫資料遵從一定的商業和邏輯規則。在oracle中,資料完整性可以使用約束、觸發器、應用程式(過程、函式)三種方法

【自學筆記】0基礎自學機器學習 第二

    定義:機器學習是人工智慧的一個分支領域,主要關於構造和研究可以從資料中學習的系統。                小不忍則亂大謀,不可急功近利,工欲善其事,必先利其器,得能吃苦。 &

Python入門基礎第二:基本資料型別

一、運算子  1、算數運算子 2、比較運算子 3、邏輯運算子 4、賦值運算子 5、成員運算子 二、基本資料型別 1、數字  通常的int, long,float,long等等都被支援。而且會看你的具體數字來定義變數的型別。 2、字串  單引

python基礎第二

今天是2019年1月1日,也是我開始python學習之旅的第二天,希望堅持學習下去,學有所成吧!先總結下今天的知識點: 1、編碼初識:   最早使用ASCII碼,一個位元組8位,可以表示256個字元,對於大小寫字母、數字、特殊字元已經足夠使用,隨著計算機的普及,中文就有9萬多個,所以明顯不夠用,後來推出了

vue的一些坑第二

作用 小童 過濾 文本 click rip col 官方 小數點 首先啊感謝一位小童鞋的指出其實我寫的這些內容算不上坑,只是平時使用的時候的一點小問題,不過只是個名字啦!再次致謝 1:兩個簡寫的命令 v-bind:class可以簡寫為 :class v-on:click可

python基礎教程十一

list repeat stop row lis flatten ror 教程 [1] 叠代器 本節進行叠代器的討論。只討論一個特殊方法---- __iter__ ,這個方法是叠代器規則的基礎。 叠代器規則 叠代的意思是重復做一些事很多次---就像在循環中做的

Spring框架第二

boolean 反射 rman pro actor . jdk 文件 開源框架 優勢 一、 註入 a) set   i. JDK     1.八種基本類型(+包裝類)+String        <bean id="User" class="com.dsl.tes

Linux學習入門第二--------基本的系統命令

安裝的映象版本是ubuntu 14.04! 1.sudo apt-get  命令 例如:sudo  apt-get  install   sl     //安裝一個名為sl的小程式   終

Angular 基礎教程7.0

課程亮點 按照初學者的學習路線規劃內容 所有程式碼均採用 Angular 7.0 版本 覆蓋日常開發中使用頻率最高的特性 To B、To C 型介面,移動端 PWA 全面覆蓋 附贈 3 個附錄,對比 5.0、6.0、7.0 版本 讀者反饋 《Angular 初學者快速

Odoo 自定義Widgets 基礎教程章節1

大家好, 此次,我們主要講解 Odoo 中的Widgets。 網上、論壇裡很多提及Widget的文章,但很少說Odoo自定義Widget 是如何實現的,這一直是大家所苦惱的地方。本章,將對Odoo中的Widget 進行基礎講解。 首先, Widget【掛件】產生的目的,是為了方便後端開發人員在不熟悉Ja

LeetCode刷題之路第二

5.最長迴文子串 給定一個字串 s,找到 s 中最長的迴文子串。你可以假設 s 的最大長度為1000。 示例 1: 輸入: “babad” 輸出: “bab” 注意: "aba"也是一個有效答案。 示例 2: 輸入: “cbbd” 輸出: “bb” 這個演算

小米VR一體機遊戲開發日記第二

unity裝了一個晚上終於裝完了,不知道為啥要裝個VS 2017,搞得我完全不知道入口在哪?在“程式”裡面找半天沒找到在哪裡開啟,後來在安裝資料夾裡找到了unity.exe,執行居然報錯,什麼“應用程式****報錯 ”之類的。百度了一下,缺了一些dll,在這個地方找到了,ht

長文 | LSTM和迴圈神經網路基礎教程PDF下載

來自公眾號 機器學習演算法與Python學習目錄:前言前饋網路回顧迴圈網路時間反向傳播BPTT梯

不抱怨21實踐手冊第二

【每日箴言】 你什麼時候放下,什麼時候就沒有煩惱。 一、路過心上的故事:          有這樣一個古寺,寺裡的老方丈養了一隻狗,取名叫“放下”,於是每天早晚,老方丈都會拿著一隻碗,喊:‘放下’!‘放下’!叫這隻狗來吃飯。弟子很奇怪,就問他為什麼給狗取了這麼一個名字,方

Android菜鳥App開發,第一個App第二

package com.noodles.timelocus.view; import android.content.Context; import android.content.Intent; import android.graphics.Canvas; import android.graphics