日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

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

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

SQL查詢操作:增刪改查

一、SQL操作符

算術操作符 + - * /

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

邏輯操作符 NOT AND OR

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

集合操作符 UNION UNION ALL INTERSECT MINUS

示例1:關于 + 與 || 拼接

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

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

提示:

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

操作符的優先級:

算術 > 連接 > 比較 > NOT > AND > OR

二、SQL語言的組成

數據定義語言DDL :CREATE、ALTER、DROP

數據操縱語言DML:INSERT、DELETE、UPDATE、SELECT

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

數據控制語言DCL:GRANT、REVOKE

二、數據操縱語言DML

1. 增加數據

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

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

INSERT INTO tb_new

SELECT * FROM emp WHERE deptno=20;

示例2:使用union插入多條數據,要借用偽表

INSERT INTO tb_new

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

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

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

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

2. 刪除數據

DELETE FROM 表名 [WHERE ]

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

DELETE FROM emp WHERE sex = ‘男’

3. 修改數據

UPDATE 表名 SET 列名=表達式, …… [WHERE ]

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

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

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

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

習題:

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

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

4. 查詢/檢索數據

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偽表,它確實是一張表,表中只有一個字段

SELECT * FROM dual;

為什么要偽表?

因為Oracle數據庫中SQL標準規定,SELECT語句中必須有FROM,就是必須有表名。

SELECT 9*999 FROM dual;

SELECT ‘好好學習’,’天天向上’ FROM dual;

提示:用dual來做一個偽表,也就是數據不在任何一張表的時候使用它。

3. 偽列ROWID、ROWNUM

ROWID 是表中行的存儲地址,唯一標識符。

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

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

在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是分組查詢,即按某個列分組,一般用于分組統計,常與聚合函數配合使用。

SELECT COUNT(*) FROM tb_name GROUP BY deptno;

4.3 HAVING子句

HAVING是對分組查詢后的結查進行過濾。

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

4.4 ORDER BY子句

ORDER BY是按某列進行升序或降序排列。

SELECT * FROM tb_name ORDER BY birthday DESC;

5. 查詢常見函數的使用

5.1 聚合函數

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

5.2 NVL(exp1, exp2)

當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分號,再進行排序,結果會導致ROWNUM混亂。

5.3 NVL(exp1, exp2, exp3)

當exp1為NULL,返回exp2,否則返回exp3

示例:

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

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

5.4 IS NULL

Oracle規定NULL不能用=號來判斷邏輯關系,須使用IS NULL。

示例:查詢沒有獎金的人

SELECT * FROM emp WHERE comm IS NULL;

四、高級查詢

1. 多表連接查詢

笛卡爾積交叉查詢:

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

內聯查詢:返回多個表中共同的數據

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

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

左、右外聯查詢:

左外聯查詢即以左表為準;右外聯查詢即以右表為準。

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

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;

(+)左外聯寫法:

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

(+)右外聯寫法:

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

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

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

全聯查詢:

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

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

2. 子查詢(嵌套查詢)

2.1 簡單子查詢

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

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子查詢是子查詢返回多個值時使用。

SELECT * FROM tb_name WHERE sid IN (

SELECT sid FROM tb_name WHERE sex = ‘男’

);

2.3 EXISTS或NOT EXISTS子查詢

EXISTS 操作對在子查詢的結果集中存在的行進行檢驗。

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

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

示例2:查找至少有一個雇員的經理

SELECT * FROM emp

WHERE EXISTS (

SELECT 'X' FROM employees WHERE r_id =e_id

);

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

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。