您好,登錄后才能下訂單哦!
SELECT能干什么?
Projection:查詢表中指定列。
Selection:查詢表中指定行。
Join:表與表之間做連接,要查看的數(shù)據(jù)放在多張表中,并且表與表之間的數(shù)據(jù)有關(guān)系。
SELECT 語(yǔ)句的基本語(yǔ)法:
SELECT 關(guān)鍵字后指定需要顯示的列。
FROM 關(guān)鍵字后面指定包含這些列的表。
為了演示SELECT命令,我們需要使用sqlplus登錄到數(shù)據(jù)庫(kù)。
切換到Oracle用戶,用如下命令解鎖scott用戶并將密碼設(shè)置成tiger
[root@11gdg1 ~]# su - oracle 11gdg1-> sqlplus / as sysdba SQL*Plus: Release 11.2.0.3.0 Production on Tue Jul 14 09:59:36 2015 Copyright (c) 1982, 2011, Oracle. All rights reserved. Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production With the Partitioning, OLAP, Data Mining and Real Application Testing options SQL> alter user scott account unlock identified by tiger; User altered.
以下所有演示都是使用scott用戶,登錄scott用戶。
SQL> conn scott/tiger Connected.
選擇所有列
SQL> select * from dept; DEPTNO DNAME LOC ---------- ------------------------------------------ --------------------------------------- 10 ACCOUNTING NEW YORK 20 RESEARCH DALLAS 30 SALES CHICAGO 40 OPERATIONS BOSTON
選擇指定列
SQL> select deptno,dname from dept; DEPTNO DNAME ---------- ------------------------------------------ 10 ACCOUNTING 20 RESEARCH 30 SALES 40 OPERATIONS
列與列之間用逗號(hào)隔開(kāi),結(jié)果顯示的順序與SELECT后字段的順序一致。
SQL語(yǔ)句編寫規(guī)則
大小寫不敏感。
語(yǔ)句可以占用一行或者多行。
關(guān)鍵字不能被省略,或者拆分成多行。
通常情況子句獨(dú)占一行。
使用縮進(jìn)增加語(yǔ)句的可讀性。
在sqlplus或者其他工具中,每個(gè)語(yǔ)句結(jié)束需要加上一個(gè)分號(hào)。告訴客戶端,你的語(yǔ)句結(jié)束了。
算術(shù)運(yùn)算符
SELECT 可以在×××或者日期類型的字段上做算術(shù)運(yùn)算,日期類型只支持+ - 運(yùn)算
SQL> select ename,sal,sal+300 from emp;
運(yùn)算符的優(yōu)先級(jí)
跟數(shù)學(xué)中的概念一樣,乘除優(yōu)先于加減,可以使用括號(hào)改變優(yōu)先級(jí)
示例四、
SQL> select ename,sal,sal*12+300 from emp; ENAME SAL SAL*12+300 ------------------------------ ---------- ---------- SMITH 800 9900 ALLEN 1600 19500 WARD 1250 15300 JONES 2975 36000
SQL> select ename,sal,sal*(12+300) from emp; ENAME SAL SAL*(12+300) ------------------------------ ---------- ------------ SMITH 800 249600 ALLEN 1600 499200 WARD 1250 390000 JONES 2975 928200 MARTIN 1250 390000
NULL值
SQL> select ename,sal,comm from emp; ENAME SAL COMM ------------------------------ ---------- ---------- SMITH 800 ALLEN 1600 300 WARD 1250 500 JONES 2975 MARTIN 1250 1400 BLAKE 2850 CLARK 2450 SCOTT 3000 KING 5000 TURNER 1500 0 ADAMS 1100 JAMES 950 FORD 3000 MILLER 1300
我們看到COMM列下的數(shù)據(jù)有些是空著的。這個(gè)是一個(gè)特殊的值,我們稱之為NULL。
null可以理解成一個(gè)不確定的、不可得的、未知的數(shù)。這個(gè)數(shù)不等于任何數(shù),包含null自身。
null并不是0或者空格。
null作用于任何算術(shù)運(yùn)算符后,其結(jié)果都是null
SQL> select ename,sal,sal+comm,sal-comm,sal*comm from emp; ENAME SAL SAL+COMM SAL-COMM SAL*COMM ------------------------------ ---------- ---------- ---------- ---------- SMITH 800 ALLEN 1600 1900 1300 480000 WARD 1250 1750 750 625000 JONES 2975 MARTIN 1250 2650 -150 1750000
列別名
SQL> select ename xingming,sal as gongzi,sal*12 "Annual salary" from emp; XINGMING GONGZI Annual salary ------------------------------ ---------- ------------- SMITH 800 9600 ALLEN 1600 19200 WARD 1250 15000
列連接
使用||將兩個(gè)字符串連接起來(lái)。
SQL> select ename||job from emp; ENAME||JOB --------------------------------------------------------- SMITHCLERK ALLENSALESMAN
字符串
使用''括起來(lái)
SQL> select ename||' is a '||job as "Employee Detail" from emp; Employee Detail --------------------------------------------------------------------------- SMITH is a CLERK ALLEN is a SALESMAN WARD is a SALESMAN
那么我的字符串本身包含單引號(hào),該怎么辦呢?Oracle使用兩個(gè)連在一起的單引號(hào)表示。
SQL> select ename||'''s salary is '||sal from emp; ENAME||'''SSALARYIS'||SAL --------------------------------------------------------------- SMITH's salary is 800 ALLEN's salary is 1600 WARD's salary is 1250 JONES's salary is 2975
當(dāng)字符串中單引號(hào)比較多時(shí),這樣寫起來(lái)很吃力,可讀性也不好。Oracle 引入了q''操作符。
格式如下
q'#string#' #為分割符,#中間的部分為字符串,字符串內(nèi)可以包含單引號(hào)。分割符可以是單字節(jié)也可以是多字節(jié)。還可以是字符對(duì)比如[],{},<>,()
SQL> select ename||q'['s salary is ]'||sal from emp; ENAME||Q'['SSALARYIS]'||SAL --------------------------------------------------------------- SMITH's salary is 800 ALLEN's salary is 1600 WARD's salary is 1250 JONES's salary is 2975 MARTIN's salary is 1250 BLAKE's salary is 2850 CLARK's salary is 2450 SCOTT's salary is 3000 KING's salary is 5000 TURNER's salary is 1500 ADAMS's salary is 1100
重復(fù)行
默認(rèn)情況下,重復(fù)的行一起被顯示。如下
SQL> select deptno from emp; DEPTNO ---------- 20 30 30 20 30 30 10 20 10 30 20
如果想對(duì)結(jié)果集去重,那么在SELECT 后跟上DISTINCT 關(guān)鍵字
SQL> select distinct deptno from emp; DEPTNO ---------- 30 20 10
而且,可以對(duì)多列一起去重
SQL> select distinct deptno,job from emp; DEPTNO JOB ---------- --------- 20 CLERK 30 SALESMAN 20 MANAGER 30 CLERK 10 PRESIDENT 30 MANAGER 10 CLERK 10 MANAGER 20 ANALYST 9 rows selected.
當(dāng)然也可以對(duì)全表去重
SQL> select distinct * from emp;
DESCRIBE命令
該命令用來(lái)顯示表結(jié)構(gòu),也就是表的定義
SQL> desc emp; Name Null? Type ----------------------------------------- -------- ---------------------------- EMPNO NOT NULL NUMBER(4) ENAME VARCHAR2(10) JOB VARCHAR2(9) MGR NUMBER(4) HIREDATE DATE SAL NUMBER(7,2) COMM NUMBER(7,2) DEPTNO NUMBER(2)
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。