日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

oracle将查询结果声明为伪表,Oracle查询操作(增删改查,伪表,高级查询)实例讲解...

發(fā)布時(shí)間:2025/4/5 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 oracle将查询结果声明为伪表,Oracle查询操作(增删改查,伪表,高级查询)实例讲解... 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

SQL查詢操作:增刪改查

一、SQL操作符

算術(shù)操作符 + - * /

比較操作符 = != < > <= >= BETWEEN……AND IN LINK IS NULL

邏輯操作符 NOT AND OR

連接操作符 || 用來連接字符串

集合操作符 UNION UNION ALL INTERSECT MINUS

示例1:關(guān)于 + 與 || 拼接

SQL Server寫法: SELECT sid, sname, sex +’生’ FROM tb_name;

Oracle寫法: SELECT sid, sname, sex||’生’ FROM tb_name;

提示:

在Sql Server中“+”既有算術(shù)作用,也有字符串拼接作用;但在Oracle中,“+”就只有算術(shù)作用。

操作符的優(yōu)先級:

算術(shù) > 連接 > 比較 > NOT > AND > OR

二、SQL語言的組成

數(shù)據(jù)定義語言DDL :CREATE、ALTER、DROP

數(shù)據(jù)操縱語言DML:INSERT、DELETE、UPDATE、SELECT

事物控制語句TCL:COMMIT、ROLLBACK、SAVEPOINT

數(shù)據(jù)控制語言DCL:GRANT、REVOKE

二、數(shù)據(jù)操縱語言DML

1. 增加數(shù)據(jù)

INSERT INTO 表名[(列名1,列名2,……)] VALUES (值1, 值2,……);

示例1:將部門編號為20的員工插入到新表中

INSERT INTO tb_new

SELECT * FROM emp WHERE deptno=20;

示例2:使用union插入多條數(shù)據(jù),要借用偽表

INSERT INTO tb_new

SELECT 1,'張三','男' FROM dual UNION

SELECT 2,'李四','女' FROM dual UNION

SELECT 3,'王五','男' FROM dual UNION

SELECT 4,'趙六','女' FROM dual;

2. 刪除數(shù)據(jù)

DELETE FROM 表名 [WHERE ]

示例:刪除性別為男的記錄

DELETE FROM emp WHERE sex = ‘男’

3. 修改數(shù)據(jù)

UPDATE 表名 SET 列名=表達(dá)式, …… [WHERE ]

示例1:修改emp表中編號7369的薪水sal為1000.

UPDATE emp SET sal=1000 WHERE 編號=’7369’

示例2:修改emp表中編號7369的薪水sal為800,姓名后添加個(gè)S。

UPDATE emp SET sal=800, name=name ||’s’ WHERE 編號=’7369’

習(xí)題:

--修改emp表中部門編號為30的工資+100。

--將emp表中所有人的工資提升10%。

4. 查詢/檢索數(shù)據(jù)

SELECT * FROM 表名

三、查詢/檢索

1. 簡單查詢

SELECT * FROM tb_name;

SELECT sid, sname FROM tb_name;

SELECT DISTINCT sname FROM tb_name;

SELECT age*2 FROM tb_name;

SELECT sname AS 姓名 FROM tb_name;

2. 查詢中的偽表dual

dual偽表,它確實(shí)是一張表,表中只有一個(gè)字段

SELECT * FROM dual;

為什么要偽表?

因?yàn)镺racle數(shù)據(jù)庫中SQL標(biāo)準(zhǔn)規(guī)定,SELECT語句中必須有FROM,就是必須有表名。

SELECT 9*999 FROM dual;

SELECT ‘好好學(xué)習(xí)’,’天天向上’ FROM dual;

提示:用dual來做一個(gè)偽表,也就是數(shù)據(jù)不在任何一張表的時(shí)候使用它。

3. 偽列ROWID、ROWNUM

ROWID 是表中行的存儲地址,唯一標(biāo)識符。

通過ROWID可快速查找到某行。

ROWNUM 類似SQL Server中的ROW_NUMBER()函數(shù),為查詢出的每條記錄進(jìn)行連續(xù)不間斷編號。

在Oracle中一般用于分頁。

示例1:查看偽列

SELECT *,ROWID,ROWNUM FROM tb_name;

示例2:求前兩條記錄(Oracle不支持TOP)

SELECT *,ROWNUM FROM emp WHERE ROWNUM<3;

示例3:求3~5條記錄(ROWNUM只能作用于小于號)

SELECT * FROM (

SELECT *,ROWNUM rid FROM emp

) tb WHERE rid>2 AND rid<5;

示例4:求薪水前5的人

SELECT t.*, ROWNUM FROM (

SELECT * FROM emp ORDER BY sal DESC

) t WHERE ROWNUM < 6;

4. 查詢子句

4.1 WHERE子句

WHERE是條件查詢,WHERE后一般都接查詢的條件。

SELECT * FROM tb_name WHERE sex=’男’;

SELECT * FROM tb_name WHERE age<18;

SELECT * FROM tb_name WHERE name LIKE ‘張%’;

4.2 GROUP BY子句

GROUP BY是分組查詢,即按某個(gè)列分組,一般用于分組統(tǒng)計(jì),常與聚合函數(shù)配合使用。

SELECT COUNT(*) FROM tb_name GROUP BY deptno;

4.3 HAVING子句

HAVING是對分組查詢后的結(jié)查進(jìn)行過濾。

SELECT COUNT(*) FROM tb_name GROUP BY deptno HAVING COUNT(*)>2;

4.4 ORDER BY子句

ORDER BY是按某列進(jìn)行升序或降序排列。

SELECT * FROM tb_name ORDER BY birthday DESC;

5. 查詢常見函數(shù)的使用

5.1 聚合函數(shù)

COUNT(*或列名)、SUM(列名)、AVG(列名)、MAX(列名)、MIN(列名)

5.2 NVL(exp1, exp2)

當(dāng)exp1為NULL,則用exp2替代。與SQL Server中的isNull()相同。

示例:求emp表中每人的收入(薪水+獎金)

SELECT sal+NVL(comm, 0) FROM emp;

注意:

SELECT t.*,ROWNUM FROM emp t ORDER BY sal+NVL(comm,0);

先通過ROWNUM分號,再進(jìn)行排序,結(jié)果會導(dǎo)致ROWNUM混亂。

5.3 NVL(exp1, exp2, exp3)

當(dāng)exp1為NULL,返回exp2,否則返回exp3

示例:

SELECT sal+NVL(comm, 0, comm+100) FROM emp;

--如果comm為NULL,則用0替代comm的值;否則comm+100。

5.4 IS NULL

Oracle規(guī)定NULL不能用=號來判斷邏輯關(guān)系,須使用IS NULL。

示例:查詢沒有獎金的人

SELECT * FROM emp WHERE comm IS NULL;

四、高級查詢

1. 多表連接查詢

笛卡爾積交叉查詢:

SELECT e.ename, d.dname FROM emp e, dept d

內(nèi)聯(lián)查詢:返回多個(gè)表中共同的數(shù)據(jù)

SELECT * FROM emp e, dept d WHERE e.deptno = d.deptno;

SELECT * FROM emp e INNER JOIN dept d ON e.deptno = d.deptno;

左、右外聯(lián)查詢:

左外聯(lián)查詢即以左表為準(zhǔn);右外聯(lián)查詢即以右表為準(zhǔn)。

怎么判斷左表還是右表?前面的表為左表,后面的表為右表。

SELECT * FROM emp e LEFT JOIN dept d ON e.deptno=d.deptno;

SELECT * FROM emp e RIGHT JOIN dept d ON e.deptno=d.deptno;

(+)左外聯(lián)寫法:

SELECT * FROM emp e, dept d WHERE e.deptno=d.deptno(+);

(+)右外聯(lián)寫法:

SELECT * FROM emp e, dept d WHERE e.deptno(+)=d.deptno;

提示: (+)=:放在等號的左邊,表示右連接;

=(+):放在等號的右邊,表示左連接;

全聯(lián)查詢:

全聯(lián)不支持(+)這種寫法

SELECT * FROM emp e FULL JOIN ,dept d ON e.deptno=d.deptno;

2. 子查詢(嵌套查詢)

2.1 簡單子查詢

簡單子查詢是指子查詢返回一個(gè)值時(shí)做為外部查詢的一個(gè)條件。(使用>、=、

SELECT deptno FROM emp WHERE ename=’KING’

示例1:求收入第3~6名的員工

SELECT * FROM (

SELECT t.*, ROWNUM mya FROM (

SELECT * FROM emp ORDER BY sal+NVL(comm,0) DESC

) t

) a WHERE mya BETWEEN 3 AND 6;

--ROW_NUMBER()寫法:

SELECT * FROM (

SELECT t.*,ROW_NUMBER() OVER(ORDER BY sal+NVL(comm,0) DESC) myr FROM emp t

) t WHERE myr BETWEEN 3 AND 6;

2.2 IN或NOT IN子查詢

IN或NOT IN子查詢是子查詢返回多個(gè)值時(shí)使用。

SELECT * FROM tb_name WHERE sid IN (

SELECT sid FROM tb_name WHERE sex = ‘男’

);

2.3 EXISTS或NOT EXISTS子查詢

EXISTS 操作對在子查詢的結(jié)果集中存在的行進(jìn)行檢驗(yàn)。

示例1:查找是否存在emp表

IF EXISTS( SELECT * FROM sysdatabases WHERE name=’emp’ )

示例2:查找至少有一個(gè)雇員的經(jīng)理

SELECT * FROM emp

WHERE EXISTS (

SELECT 'X' FROM employees WHERE r_id =e_id

);

如果返回X,則TRUE;否則FALSE.最后看是不是TRUE,即返回X。

總結(jié)

以上是生活随笔為你收集整理的oracle将查询结果声明为伪表,Oracle查询操作(增删改查,伪表,高级查询)实例讲解...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。