溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Oracle 學(xué)習(xí)之SQL(一) Retrieving Data Using the SQL SELECT statement

發(fā)布時(shí)間:2020-06-28 23:38:09 來(lái)源:網(wǎng)絡(luò) 閱讀:578 作者:lqding1980 欄目:關(guān)系型數(shù)據(jù)庫(kù)

SELECT能干什么?

Oracle 學(xué)習(xí)之SQL(一) Retrieving Data Using the SQL SELECT statement

Projection:查詢表中指定列。

Selection:查詢表中指定行。

Join:表與表之間做連接,要查看的數(shù)據(jù)放在多張表中,并且表與表之間的數(shù)據(jù)有關(guān)系。


SELECT 語(yǔ)句的基本語(yǔ)法:

Oracle 學(xué)習(xí)之SQL(一) Retrieving Data Using the SQL SELECT statement

SELECT 關(guān)鍵字后指定需要顯示的列。

FROM 關(guān)鍵字后面指定包含這些列的表。

Oracle 學(xué)習(xí)之SQL(一) Retrieving Data Using the SQL SELECT statement

為了演示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)算

Oracle 學(xué)習(xí)之SQL(一) Retrieving Data Using the SQL SELECT statement


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)


向AI問(wèn)一下細(xì)節(jié)

免責(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)容。

AI