a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁 > 數據庫 > Oracle > 正文

oracle學習筆記之基本查詢

2024-08-29 13:55:01
字體:
來源:轉載
供稿:網友

把學習的Oracle的基本操作記錄一下,同時也加深一下記憶

數據庫,Oracle 11g,用戶Scott

清屏SQL> host cls SQL> --清屏當前用戶SQL> --當前用戶SQL> show userUSER 為 "SCOTT"查詢當前用戶下的表 SQL> select * from tab;TNAME TABTYPE CLUSTERID------------------------------ ------- ----------BONUS TABLEDEPT TABLEEMP TABLESALGRADE TABLE

查看emp表的表結構

SQL> desc emp 名稱 是否為空? 類型 ----------------------------------------- -------- ---------------- EMPNO NOT NULL NUMBER(4) ENAME VARCHAR2(10) EMPJOB VARCHAR2(9) MGR NUMBER(4) HIREDATE DATE SAL NUMBER(7,2) COMM NUMBER(7,2) DEPTNO NUMBER(2)

設置行寬和列寬

SQL>set linesize 120 SQL>col ename for a8 SQL>col sal for 9999

在編寫sql語句時盡量少使用 *,用列名替代,提高查詢效率

c命令 用來修改上一次輸入的錯誤命令,/ 表示執行上一條sql語句。如:

SQL> select empno , ename , sal , sal*12 年薪 2 form emp;form emp*第 2 行出現錯誤:ORA-00923: 未找到要求的 FROM 關鍵字SQL> c /form/from 2* from empSQL> / EMPNO ENAME SAL 年薪---------- -------- ----- ---------- 7369 SMITH 800 9600 7499 ALLEN 1600 19200 7521 WARD 1250 15000 7566 JONES 2975 35700 7654 MARTIN 1250 15000 7698 BLAKE 2850 34200 7782 CLARK 2450 29400 7788 SCOTT 3000 36000 7839 KING 5000 60000 7844 TURNER 1500 18000 7876 ADAMS 1100 13200 EMPNO ENAME SAL 年薪---------- -------- ----- ---------- 7900 JAMES 950 11400 7902 FORD 3000 36000 7934 MILLER 1300 15600已選擇14行。所有包含null的sql表達式都為null,null永遠都不等于null,需要用is null代替,如:當查詢員工的年收入(由月薪*12+獎金組成)時,可以看到沒有獎金的員工的年收入查出來為空

SQL> select sal*12 , comm ,sal*12+comm from emp;

SAL*12 COMM SAL*12+COMM---------- ---------- ----------- 9600 19200 300 19500 15000 500 15500 35700 15000 1400 16400 34200 29400 36000 60000 18000 0 18000 13200

解決辦法,nvl函數,nvl函數會判斷獎金(comm)值是否為空,如果為空comm的值則為0,否則為comm的值。如:

SQL> select sal*12 , comm ,sal*12+nvl(comm,0) from emp; SAL*12 COMM SAL*12+NVL(COMM,0)---------- ---------- ------------------ 9600 9600 19200 300 19500 15000 500 15500 35700 35700 15000 1400 16400 34200 34200 29400 29400 36000 36000 60000 60000 18000 0 18000 13200 13200concat字符串拼接函數SQL> select concat('Hello ',' World') from dual;CONCAT('HELL------------Hello WorldSQL>--dual偽表‘||’用法,字符串拼接 SQL> select ename||'的薪水是'||sal 字符串 from emp;字符串----------------------------------------------------------SMITH的薪水是800ALLEN的薪水是1600WARD的薪水是1250JONES的薪水是2975修改系統默認日期格式。select * from v$nls_parameters,查詢會話參數,可以看到日期對應的格式是 DD-MON-RR,修改其值即可,如SQL> alter session set NLS_DATE_FORMAT='yyyy-mm-dd';會話已更改。SQL> select sysdate from dual;SYSDATE----------2017-03-06between … and …SQL> select * from emp where sal between 1000 and 2000;in 在集合中查詢SQL> select * from emp where deptno in (10,20);如果在集合中含有null,不能使用not in,可以使用inSQL> select * from emp where deptno not in (10,20,null);未選定行SQL> select * from emp where deptno in (10,20,null); EMPNO ENAME EMPJOB MGR HIREDATE SAL COMM DEPTNO---------- -------- --------- ---------- ---------- ----- ---------- ---------- 7369 SMITH CLERK 7902 1980-12-17 800 20 7566 JONES MANAGER 7839 1981-04-02 2975 20 7782 CLARK MANAGER 7839 1981-06-09 2450 10

like模糊查詢

SQL> --查詢名字以S開頭的員工SQL> select ename,empjob from emp where ename like 'S%';ENAME EMPJOB-------- ---------SMITH CLERKSCOTT ANALYSTSQL> --查詢名字是四個字的員工SQL> select ename , empjob from emp where ename like '____';ENAME EMPJOB-------- ---------WARD SALESMANKING PRESIDENTFORD ANALYSTorder by,作用域后面所有的列,先按照第一個列排序,如果相同再按照第二個排序,以此類推。此外,desc作用于靠它最近的列SQL> select ename , empjob ,deptno , sal from emp order by deptno , sal desc;ENAME EMPJOB DEPTNO SAL-------- --------- ---------- -----KING PRESIDENT 10 5000CLARK MANAGER 10 2450MILLER CLERK 10 1300SCOTT ANALYST 20 3000FORD ANALYST 20 3000JONES MANAGER 20 2975ADAMS CLERK 20 1100SMITH CLERK 20 800BLAKE MANAGER 30 2850ALLEN SALESMAN 30 1600TURNER SALESMAN 30 1500

a命令用于追加命令

SQL> select ename , empjob,deptno from emp order by deptno ;ENAME EMPJOB DEPTNO-------- --------- ----------CLARK MANAGER 10KING PRESIDENT 10MILLER CLERK 10JONES MANAGER 20FORD ANALYST 20ADAMS CLERK 20SMITH CLERK 20SCOTT ANALYST 20WARD SALESMAN 30TURNER SALESMAN 30ALLEN SALESMAN 30已選擇14行。SQL> a desc; 1* select ename , empjob,deptno from emp order by deptno descSQL> /ENAME EMPJOB DEPTNO-------- --------- ----------BLAKE MANAGER 30TURNER SALESMAN 30ALLEN SALESMAN 30MARTIN SALESMAN 30WARD SALESMAN 30JAMES CLERK 30SCOTT ANALYST 20JONES MANAGER 20SMITH CLERK 20ADAMS CLERK 20FORD ANALYST 20

函數:函數分為單行函數與分組函數,單行函數只對一行進行變換,每行只返回一個結果。分組函數作用于一組數據,并對一組數據返回一個值。

單行函數操作:

字符函數,lower()轉小寫,upper()轉大寫,initcap()首字母大寫

SQL> select lower('Hello') 轉小寫 , upper('Hello') 轉大寫 , initcap('hello') 首字母大寫 from dual;轉小寫 轉大寫 首字母大寫 ----- ----- -----hello HELLO Hello取子串函數,substr(a,b)從a中,第b位開始取。substr(a, b,c)從a中第b位開始取,取c位SQL> select substr('Hello World',3) 子串 from dual;子串---------llo WorldSQL> select substr('Hello World',3,3) 子串 from dual;子---llolength()返回字符長度,lengthb()返回字節長度SQL> select length('世界你好') 字符 , 2 lengthb('世界你好') 字節 from dual; 字符 字節---------- ---------- 4 8instr(a,b)查找函數,在a中查找b,返回位置SQL> select instr('Hello World','ll') 位置 from dual; 位置---------- 3lpad左填充,rpad右填充SQL> select lpad('abcd',10,'*') 左 , rpad('abcd',10,'*') 右 2 from dual;左 右---------- ----------******abcd abcd******trim()去掉前后指定的字符SQL> select trim('H' from 'Hello WorldH') from dual;TRIM('H'FR----------ello World四舍五入SQL> select round(45.926,2),round(45.926,1),round(45.926,0),round(45.926,-1),round(45.926,-2) from dual;ROUND(45.926,2) ROUND(45.926,1) ROUND(45.926,0) ROUND(45.926,-1) ROUND(45.926,-2)--------------- --------------- --------------- ---------------- ---------------- 45.93 45.9 46 50 0SQL> select trunc(45.926,2),trunc(45.926,1),trunc(45.926,0),trunc(45.926,-1),trunc(45.926,-2) from dual;TRUNC(45.926,2) TRUNC(45.926,1) TRUNC(45.926,0) TRUNC(45.926,-1) TRUNC(45.926,-2)--------------- --------------- --------------- ---------------- ---------------- 45.92 45.9 45 40 0格式化顯示時間SQL> select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;TO_CHAR(SYSDATE,'YY-------------------2017-03-06 15:05:12

多行函數

sum()函數計算總和SQL> select sum(sal) from emp; SUM(SAL)---------- 29025count()計算個數SQL> select count(*) from emp; COUNT(*)---------- 14

組函數自動濾空,可以嵌套濾空函數來屏蔽濾空功能

多表查詢

等值連接

SQL> select e.ename , e.empno ,e.sal , d.dname 2 from emp e ,dept d 3 where e.deptno=d.deptno;ENAME EMPNO SAL DNAME-------- ---------- ----- --------------CLARK 7782 2450 ACCOUNTINGKING 7839 5000 ACCOUNTINGMILLER 7934 1300 ACCOUNTINGJONES 7566 2975 RESEARCHFORD 7902 3000 RESEARCHADAMS 7876 1100 RESEARCHSMITH 7369 800 RESEARCHSCOTT 7788 3000 RESEARCHWARD 7521 1250 SALESTURNER 7844 1500 SALES右外連接 SQL> select d.deptno , d.dname , count(e.empno) from 2 emp e , dept d 3 where e.deptno(+)=d.deptno 4 group by d.deptno , d.dname; DEPTNO DNAME COUNT(E.EMPNO)---------- -------------- -------------- 10 ACCOUNTING 3 40 OperaTIONS 0 20 RESEARCH 5 30 SALES 6左外連接語法,e.deptno=d.deptno(+),符號左邊的表將比包含。

暫時先記這么多吧。。。。。。。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 久久久久网站 | 日韩中文视频 | 精品在线一区二区 | 国产精品久久久久久亚洲调教 | 91精品国产一区二区三区蜜臀 | 亚洲精品一二三 | 91久久精品久久国产性色也91 | 日韩精品成人 | 国产高清一区 | 自拍第一页 | 久久久av| 亚洲成人动漫在线观看 | 蜜桃做爰免费网站 | 亚洲精品在线免费看 | 国产精品视频一二三区 | 在线观看v片 | 国产一区免费在线 | 日韩一区二区免费视频 | 日韩精品在线视频 | 国产91亚洲精品 | aa级毛片毛片免费观看久 | 操操日 | 成人一区av偷拍 | 中文字幕爱爱视频 | 久久久精品一区二区 | 精品一区二区三区日本 | 国产一区二区av | 精品久久久久久久久久久久包黑料 | segui88久久综合9999 | 午夜一级毛片 | 亚洲狠狠爱一区二区三区 | 日本成人久久 | 91久久久久久久 | 一区二区三区高清 | 国产高清久久久 | 日韩精品一区在线观看 | 久久99精品国产自在现线 | 三级网站大全 | 久久99一区 | 青青久久av北条麻妃海外网 | 国产亚洲综合视频 |