Oracle數據庫(三)表操作,連接查詢,分頁
復制表
--復制表 create table new_table as select * from Product
--復制表結構不要數據 create table new_table as select * from Product where 1=2
在where後面跟一個不成立的條件,就會僅復制表的結構而不復制表的內容。
刪除表
--刪除表 delete table new_table --刪除表,無法找回 truncate table new_table
序列
序列(SEQUENCE)其實是序列號生成器,可以為表中的行自動生成序列號,產生一組等間隔的數值(類型為數字)。其主要的用途是生成表的主鍵值,可以在插入語句中引用,也可以
通過查詢檢查當前值,或使序列增至下一個值。
使用語句創建序列
----創建序列 create sequence user_seq increment by 1 start with 1 nomaxvalue nominvalue nocache
多表查詢
select * from p_emp e ,p_dept d where e.deptno=d.deptno
笛卡爾積
笛卡爾積在sql中實現的方式是交叉連接,所有連接方式都會先生成臨時笛卡爾積表,笛卡爾積是關系代數的一個概念,表示兩個表中每一行數據任意組合。
簡單來說,就是兩個表不加條件限制的進行連接,出現的數據行數是兩個表數據行數的乘積。
內連接
select * from p_emp e ,p_dept d where e.deptno=d.deptno
內連接的局限性:如果有空值,查詢結果可能會有缺失。
解決辦法:
以一個表為基準進行外鏈接:
--左外鏈接 select * from p_emp e left join p_dept d on e.deptno=d.deptno
或者使用 + 符號
select * from p_emp e, p_dept d where e.deptno=d.deptno(+)
查詢用戶的表
--查詢所有表 select * fromuser_tables
自連接
有些情況可能會遇到,將一個表的相同或者不同列的數據進行比較,需要將一個表來進行當做兩個表進行自連接,進而比較其中的數據再進行查詢
--自連接 select e1.ename,e2.ename from p_emp e1,p_emp e2 where e1.empno=e2.mgr
層次查詢
oracle中的select語句可以用START WITH...CONNECT BY PRIOR子句實現遞歸查詢,connect by 是結構化查詢中用到的,其基本語法是:
select ... from <TableName>
where <Conditional-1>
start with <Conditional-2>
connect by <Conditional-3>
;
<Conditional-1>:過濾條件,用於對返回的所有記錄進行過濾。
<Conditional-2>:查詢結果重起始根結點的限定條件。
<Conditional-3>:連接條件
--層次查詢 select e.*,level from p_emp e connect by prior e.empno=e.mgr start with e.ename=‘KING‘ order by level
偽列:
level
rownum
rownum是oracle系統順序分配為從查詢返回的行的編號,返回的第一行分配的是1,第二行是2,依此類推,這個偽字段可以用於限制查詢返回的總行數,
而且rownum不能以任何表的名稱作為前綴。
需要註意的是:如果按照主鍵排序,rownum的順序會跟著變化,如果不是按照主鍵排序,rownum不會變。
--查詢前十列數據 select e.*,rownum from p_emp e where rownum <=10 --6-10列數據,嵌套查詢 select * from (select e.*,rownum rownu from p_emp e where rownum <=10) r where r.rownu >5
Oracle數據庫(三)表操作,連接查詢,分頁