用戶、角色、許可權、表空間 create tablespace test1_tablespace datafile ‘test1file.dbf’ size 10m; create temporary tablespace temptest1_tablespace tempfile ‘temp1fil ...
用戶、角色、許可權、表空間
create tablespace test1_tablespace datafile ‘test1file.dbf’ size 10m;
create temporary tablespace temptest1_tablespace tempfile ‘temp1file.dbf’ size 10m;
創建永久表空間和臨時表空間,並指定表空間名字,指定文件名稱,大小(如不指定位置即放在預設位置)
select file_name from dba_data_files where tablespace_name=’test1_tablespace’;
select file_name from dba_temp_files where tablespace_name=’temptest1_tablespace’;
查看上面剛創建的永久表空間和臨時表空間的文件所在位置(dba_data_files、dba_temp_files)
connect sys/oracle@orcl as sysdba 鏈接使用系統管理用戶sys密碼oracle,並以sysdba身份鏈接實例orcl(sysdba資料庫管理員許可權,sysoper資料庫操作員許可權,另外不寫實例的話會鏈接預設實例)
create user yan identified by test default tablespace test1_tablespace temporary tablespace temptest1_tablespace;
創建用戶yan密碼test,設置預設表空間test1_tablespace、臨時表空間temptest1_tablespace
select username from dba_users; 從dba_users表中查詢username
grant connect to yan; 授權connect操作給用戶yan
connect yan/test 鏈接使用用戶yan密碼test
alter user yan identified by test123; 修改yan用戶密碼為test123
alter user yan account lock; 鎖定用戶yan(解鎖就是unlock,當然要切換到有許可權的用戶下去執行此類命令)
drop user yan cascade; 刪除用戶yan及其創建的數據(cascade參數是連同其創建的東西全部刪除)
CONNECT(連接角色) 只可以登錄ORACLE,不可以創建實體,不可以創建資料庫結構
RESOURCE(資源角色) 可以創建實體,不可以創建資料庫結構
DBA(資料庫管理員角色) 擁有全部許可權,最高許可權,只有DBA才可以創建資料庫結構
grant connect to user01;
grant resource to user01;
grant dba to user01;
創建自定義的角色
create role 角色名;
例子:create role manager;
賦予許可權、回收許可權
grant 許可權 to 角色或用戶 (grant A to B)
例子:grant create table,create view to manager; 創建表、創建視圖許可權給角色manager
grant manager to user01,user02; 角色manager賦予給用戶user01、user02
revoke 許可權或角色 from 角色或用戶 (grant A from B)
例子:revoke manager from user01; 回收用戶user01的角色manager許可權
revoke create table,create sequence from manager; 回收角色manager的創建表、創建序列許可權
select * from system_privilege_map
create session 創建會話 create sequence 創建序列 create table 創建表 create user 創建用戶 alter user 更改用戶drop user 刪除用戶 create view 創建視圖
授權對象許可權、回收對象許可權
對象許可權有select、update、insert、delete、all......
grant 對象許可權 on 對象 to 用戶或角色 (如對象on user01.school)
revoke 對象許可權 on 對象 from 用戶或角色 (如對象on user01.work)
數據字典 dba_tablespace、user_tablespace
select tablespace_name from dba_tablespace;
select tablespace_name from user_tablespace;
數據字典 dba_users、user_users
select default_tablespace,temporary_tablespace from dba_users where username=’system’
alter user 用戶名 default tablespace或temporary tablespace 表空間名
alter user user01 default tablespace test1_tablespace temporary tablespace temptest1_tablespace
修改表空間狀態
alter tablespace 表空間名 online或offline或read only或read write
修改表空間數據文件
alter tablespace 表空間名 add datafile’filename.dbf’ size 10M; 此為增加數據文件
alter tablespace 表空間名 drop datafile’filename.dbf’; 此為刪除數據文件(不能刪除第一個創建的數據文件,除非刪除整個表空間)
刪除表空間
drop tablespace 表空間名 (只刪除表空間,不刪除對應數據文件)
drop tablespace 表空間名 including contents (刪除表空間及對應數據文件)
表管理
DDL 數據定義語言
DML 數據操作語言
DCL 數據控制語言
TCL 事務控制語言
DDL常用語句:
create table 創建表 create index 創建索引 drop table 刪除表 drop index 刪除索引 truncate 刪除表所有行 alter table 更改表結構,增加、修改、刪除列 alter table add constraint 在已有表中增加約束
DML常用語句:
insert 添加數據 update 修改數據 delete 刪除數據 select 查詢數據
DCL常用語句:
grant 授予許可權 revoke 撤銷許可權 lock 鎖定
TCL常用語句:
commit 提交事務 rollback 回退事務 savepoint 設置保存點
創建表語法結構:
create table 表名 ( 列名 列數據類型 , 列名 列數據類型 ... ...);
數據類型:字元類型、數值類型、日期時間類型、LOB類型
字元類型有 char、varchar2
數值類型 number[(p[,s])] p表示精度,s表示小數點位數
如 number(5,0)最多可存儲5位數整數 number(5,2)最大可存儲999.99的浮點數
日期類型有 date
LOB類型有CLOB、BLOB
例子:create table student( sid number(8,0),name varchar2(20),sex char(2),birthday date,address varchar2(50) );
約束是oracle提供的自動保持數據完整性的一種方法,它通過限制欄位中的數據、記錄中數據和表之間的數據來保證數據的完整性。
約束語法結構:[constraint 約束名] <約束類型>
主鍵約束、唯一性約束、預設約束、非空約束、檢查約束、外部鍵約束
主鍵約束 primary key 它是唯一確定表中每一條記錄的標識符,其值不能為NULL,也不能重覆。表中主鍵只能有一個,但可以由多個列組成。
create table student(
sid number(8,0),
name varchar2(20),
sex char(2),
birthday date,
address varchar2(50),
constraint sid_pk primary key(sid) );
修改表添加主鍵約束
alter table student add constraint sid_pk primary key(sid);
非空約束用於確保列不能為NULL,它是列級約束。
列級約束:column [CONSTRAINT constraint_name] constraint_type 列級約束必須跟在列的定義後面
表級約束:column,… …
[CONSTRAINT constraint_name] constraint_type
(column,… …), 表級約束不與列一起,而是單獨定義的
create table student(
sid number(8,0),
name varchar2(20) not null, 列級約束
sex char(2) constraint nn_sex not null, 列級約束
birthday date,
address varchar2(50),
constraint sid_pk primary key(sid) ); 表級約束
修改表添加約束格式:
ALTER TABLE table_name ADD [CONSTRAINT constraint_name] constraint_type (column);
而非空約束要使用MODIFY語句 ALTER TABLE table_name MODIFY (column datatype NOT NULL);
刪除約束方式可以禁用或者徹底刪除
DISABLE|ENABLE CONSTRAINT constraint_name;
DROP CONSTRAINT constraint_name;
DROP PRIMARY KEY 為何這個可以這樣寫,因為表中只有一個呀,寫不寫約束名都知道的
ALTER TABLE table_name MODIFY column_name datatype NULL;
唯一約束用於指定一個或者多個列的組合值具有唯一性,以防止在列中輸入重覆值。
create table student(
sid number(8,0) unique, 列級約束
name varchar2(20),
sex char(2),
birthday date,
address varchar2(50),
constraint uk_sid unique(sid)); 表級約束
修改表添加唯一約束 alter table student add constraint uk_sid unique(sid);
檢查約束對輸入列或者整個表中的值設置檢查條件,以限制輸入值,保證數據完整性。
create table student(
sid number(8,0),
name varchar2(20),
sex char(2) check(sex=’男’ or sex=’女’), 列級約束
birthday date,
address varchar2(50),
constraint sid_pk primary key(sid) );
create table student(
sid number(8,0),
name varchar2(20),
sex char(2),
birthday date,
address varchar2(50),
constraint ck_sex check(sex=’男’ or sex=’女’)); 表級約束
修改表添加檢查約束 alter table student add constraint ck_sex check(sex=’男’ or sex=’女’);
外鍵約束是用於建立和加強兩個表數據之間的鏈接的一列或多列。它是唯一涉及兩個表關係的約束
列級約束:
CREATE TABLE 從表
(column_name datatype REFERENCES
主表(column_name) [ON DELETE CASCADE],… …);
表級約束:
CONSTRAINT constraint_name FOREIGN KEY (column_name)
REFERENCES 主表(column_name) [ON DELETE CASCADE]
設置外鍵約束時主表的欄位必須是主鍵列(或唯一列),主從表中相應欄位必須是同一數據類型,從表中外鍵欄位的值必須來自主表中的相應欄位的值(或為NULL)
例子:
主表 create table department ( depid varchar2(10) primary key, depname varchar2(30) );
從表 create table student (sid number(8,0), name varchar2(20), sex char(2), birthday date, address varchar2(50),
depid varchar2(10) references department(depid) ); 列級約束,其中從表列名稱可以和主表名稱不一樣
主表 create table department ( depid varchar2(10) primary key, depname varchar2(30) );
從表 create table student (sid number(8,0), name varchar2(20), sex char(2), birthday date, address varchar2(50),
depid varchar2(10), constraint fk_depid foreign key(depid)
references department(depid) on delete cascade ); 表級約束,同樣從表定義的列可以和主表名稱不一樣
添加列語句結構:
ALTER TABLE 表名 ADD 新增列名 數據類型
ALTER TABLE student ADD tel varchar2(11)
修改列語句結構:
ALTER TABLE 表名 MODIFY 列名 新數據類型
ALTER TABLE student MODIFY tel number(11,0)
修改列名語句結構:
ALTER TABLE 表名 RENAME COLUMN 列名 TO 新列名
ALTER TABLE student RENAME COLNMN sex TO gender
刪除表語句
TRUNCATE TABLE 表名 (用於刪除表全部數據,但表結構還在,這種刪除方式也叫截斷表)
DROP TABLE 表名 (刪除表結構)
添加信息語句結構:
INSERT INTO 表名[(列1,列2,… …)] VALUES(值1,值2,… …)
INSERT INTO student (sid,name,sex) VALUES(18733,’周小仙’,’男’)
查詢信息語句結構:
SELECT * column_name FROM 表名
SELECT * FROM student SELECT sid,name,sex FROM student
修改信息語句結構:
UPDATE table SET column = value [WHERE condition]
UPDATE student SET tel = ‘15899999999’ WHERE sid = 18733
刪除信息語句結構:
DELETE FROM table [WHERE condition]
DELETE FROM student WHERE sid = 18733
事務可以看作是由資料庫的若幹操作組成的一個單元,這些操作要麼都完成,要麼都取消,從而保證數據滿足一致性的要求。
事務組成可以是一條或者多條DML,或一條DDL,或一條DCL
DML語句需要使用COMMIT提交事務或使用ROLLBACK回滾事務
DDL和DCL是自動提交事務的
使用事務的原因主要是為保證數據的安全有效,這裡需要提到“表鎖”
基本查詢
語法格式:
SELECT * {[DISTINCT] column_name | expression [alias],… …} FROM table_name [WHERE condition]
其中expression指表達式,alias指列的別名,condition指查詢條件
查詢有特定列查詢、全部列查詢、排除重覆行、日期列的查詢、條件查詢(過濾數據,涉及運算符使用、範圍查詢、模糊查詢、空值判斷、邏輯運算符使用等)查詢結果排序
SELECT DISTINCT deptno,job FROM emp 排除重覆數據
ALTER SESSION SET nls_language=’SIMPLIFIED CHINESE’ 以簡體中文顯示日期
ALTER SESSION SET nls_date_format=’YYYY/MM/DD’ 以特定格式顯示日期
運算符優先順序 + - * / 從左到右執行,乘除高於加減,括弧內優先
NULL表示未知值,和其運算結果也為空(即NULL)
另外列可以給予預設值,使用default
列的別名用於改變列的顯示標題
列別名可以跟在列名的後面,也可以在二者之間加AS關鍵字
SELECT empno “雇員編號”, ename “雇員名”, sal*12 “全年工資” FROM emp
SELECT empno AS “雇員編號”, ename AS “雇員名”, sal*12 AS “全年工資” FROM emp
連接符 ||
它把列與列,列與字元 連接在一起
Select ename ||’的崗位是:’|| job as 員工的職位信息描述 from emp
WHERE子句過濾條件
select * from emp where deptno=20
select * from emp where job=’manager’
select * from emp where hiredate=’22-3月-86’
範圍查詢between…and和in
模糊查詢like (通配符%表示0個或多個字元,通配符_表示單個字元)
判斷空值is null
模糊查詢中如果字元值本身就包含_和%字元,就需要用escape選項和轉義符實現
Select * from emp where ename like ‘G\_%’ escape ‘\’ 其實模糊查詢的是G_%
另外判斷是否為空,不可以寫成=NULL,<>NULL 這都是錯誤寫法,應該是is null或is not null
NOT優先順序最高,AND其次,OR最低
單列排序、多列排序、列別名排序
SELECT *|column_name FROM table_name [WHERE condition] [ORDER BY column_name [ASC|DESC] ]
當SELECT語句包含多個子句(where,group by,having,order by)時,order by必須是最後一條語句
Select ename,sal from emp order by sal desc 降序排序
Select empno,ename,sal*12 年收入 from emp order by 年收入 desc 使用列別名排序
Select empno,ename,deptno,sal from emp order by deptno asc, sal desc 多列排序
單行函數
顧名思義就是輸出一行的函數,當然多行函數就是輸出一行或多行的函數
單行函數有字元函數、數值函數、日期函數、轉換函數、通用函數
字元函數:1.大小寫控制函數 有UPPER、LOWER、INITCAP
2.字元控制函數 有CONCAT、SUBSTR、LENGTH、INSTR、LPAD、RPAD、TRIM、REPLACE
UPPER(char) 用於將字元串轉換為大寫格式
LOWER(char) 用於將字元串轉換為小寫格式
INITCAP(char) 用於將字元串中的每個單詞的首字母轉換為大寫格式,其他字元小寫
CONCAT(str1,str2) 用於字元串的連接
例子concat(‘hello’,’oracle’) 結果:hellooracle
SUBSTR(char,m[n]) 用來截取字元串,char指定源字元串,m用於指定從哪個位置開始截取,n用於指定截取字元串的長度。如果m為0,則從首字元開始,如果m為負數,則從尾部開始。
例子 substr(‘hello’,1,3) 結果:hel
例子 substr(‘hello’,0,3) 結果:hel
例子 substr(‘hello’,-1,1) 結果:o
LENGTH(char) 用於返回字元串的長度,字元串中的尾碼空格也記作字元串的長度。
例子 length(‘oracle ‘) 結果:7
INSTR(char1,char2[,n[m]]) 用於指定字元串在源字元串中的位置,char1源字元串,char2指定字元串,n用於指定起始搜索位置,m用於指定字元串第m次出現的次數(n,m預設都是1)
例子 instr(‘hello oracle’,’oracle’) 結果:7
例子 instr(‘hello oracle hello oracle’,’oracle’,2,2) 結果:20
LPAD(char1,n,char2) 用於在字元串的左端填充字元,char1源字元串,char2被填充字元,n用於指定填充後的char1的總長度。
例子 lpad(‘hello’,10,’#’) 結果:#####hello
RPAD(char1,n,char2) 用於在字元串的右端填充字元,char1源字元串,char2被填充字元,n用於指定填充後的char1的總長度。
例子 rpad(‘hello’,10,’@’) 結果:hello@@@@@
REPLACE(char,search_string[,replacement_string]) 用於替換字元串的子串內容,char源字元串,search_string被替換子串,replacement_string替換子串
例子 replace(‘hello oracle’,’oracle’,’world’) 結果:hello world
數值函數有ROUND、TRUNC、MOD
ROUND(n,[m]) 用於四捨五入結果,n可以是任意數字,m必須是整數
例子 round(25.328,2) 結果:25.33 round(25.328,-1) 結果:30
TRUNC(n,[m]) 用於截取數字,n可以是任意數字,m必須是整數
例子 trunc(25.328,2) 結果:25.32 trunc(25.328,-1) 結果:20
MOD(m,n) 用於求餘數,m除於n得到的餘數,如果n為0,則返回結果為m
例子 mod(25,6) 結果:1 mod(25,0) 結果:25
日期函數常用函數有SYSDATE、MONTHS_BETWEEN、ADD_MONTHS、NEXT_DAY、LAST_DAY、ROUND、TRUNC
SYSDATE 用於返回當前系統日期
例子 select sysdate from dual
MONTHS_BETWEEN(d1,d2) 用於返回日期d1和d2之間相差的月數。d1大於d2結果為正數,否則為負數
例子 select months_between(sysdate,hiredate) from emp
ADD_MONTHS(d,n) 用於返回特定日期時間之後或之前的月份所對應的日期時間。(求出若幹月之後的日期)d用於指定日期時間,n可以是任意整數。
例子 select ename,add_months(hiredate,30*12) from emp
NEXT_DAY(d,char) 用於返回特定日期之後的第一個工作日所對應的日期。D用於指定日期時間值,char用於指定工作日。註意:當使用該函數時,工作日必須與日期語言匹配,假如日期語言為AMERICAN,那麼周一對應於MONDAY;假如日期語言為簡體中文,那麼周一對應於”星期一”。
例子 select sysdate,next_day(sysdate,’星期一’) from dual
ROUND(d,[fmt]) 用於返回日期時間的四捨五入的結果。d用於指定日期的時間值,fmt用於指定四捨五入的方式,如果設置fmt為YEAR,則7月1日為分界線,如果設置fmt為MONTH,則16日為分界線。
例子 如果系統時間是’20-7月-17’ round(sysdate,’YEAR’) 結果:01-1月-18 round(sysdate,’MONTH’) 結果:01-8月-17
TRUNC(d,[fmt]) 用於截斷日期時間數據。d用於指定日期的時間值,fmt用於指定截斷日期時間數據的方法,如果設置fmt為YEAR,則結果為本年度的1月1日,如果設置fmt為MONTH,則結果為本月1日。
例子 trunk(sysdate,’YEAR’) trunk(sysdate,’MONTH’)
轉換函數 TO_DATE、TO_CHAR、TO_NUMBER
TO_CHAR(d,[fmt[‘nlsparams’]]) 將日期類型轉換為字元類型。d用於指定日期值,fmt用於指定日期格式模型,‘nlsparams’用於指定日期顯示語言
例子 select to_char(hiredate,’DD-MON-RR’, ‘NLS_DATE_LANGUAGE=AMERICAN’) from emp
TO_CHAR(n,[fmt]) 將數值類型轉換為字元類型。n用於指定數值,fmt用於指定數字格式模型。
格式模型,常見的元素如下:
9:顯示數字,並且會忽略前導0
0:顯示數字,如果位數不足,則用0補齊
. :在指定位置顯示小數點
, :在指定位置顯示逗號
$ :在數字前加美元符號
L :在數字前加本地貨幣符號
例子 select sal,to_char(sal,’L999,999.99’) from emp select sal,to_char(sal,’$999.999.99’) from emp
TO_DATE(char,[fmt[‘nlsparams’]]) 將字元串轉換成日期類型的數據。Char用於匹配日期數據的字元串,fmt用於指定日期格式模型,’nlsparams’用於指定日期語言。
例子 select ename,hiredate from emp where hiredate>to_date(‘1986-3-22’,’YYYY-MM-DD’)
TO_NUMBER(n,[fmt]) 將包含數字的字元串轉換成數值類型。N是包含數字的字元串,fmt用於指定數字格式模型
例子 select ename,sal from emp where sal>to_number(‘¥2000’,’L99999’)
通用函數有NVL、NVL2、NULLIF、COALESCE
NVL(expr1,expr2) 該函數用於處理NULL,如果expr1是null,則返回expr2,如果expr1不是null,則返回expr1
例子 select ename,sal,comm,sal+nvl(comm,0) from emp
NVL2(expr1,expr2,expr3) 該函數用於處理NULL,如果expr1不是null,則返回expr2,如果expr1是null,則返回expr3
例子 select ename,sal,comm,nvl2(comm,sal+comm,sal) from emp
NULLIF(expr1,expr2) 該函數用於比較表達式expr1和expr2,如果二者相等,則返回NULL,否則返回expr1
例子 select empno,ename,hiredate,nullif(hiredate,trunk(sysdate,’MONTH’)) from emp
COALESCE(expr1,[expr2]… ) 用於返回表達式列表中的第一個NOT NULL表達式的結果
例子 select ename,sal,comm,coalesce(sal+comm,sal) from emp
CASE表達式語法格式
CASE expr
WHEN comparison_expr1 THEN return_expr1
[WHEN comparison_expr2 THEN return_expr2
… …
ELSE else_expr]
END
例子 select empno,ename,
case job
when ‘CLERK’ then ‘辦事員’
when ‘SALESMAN’ then ‘銷售’
else ‘總裁’
end
from emp
DECODE(column | expression,search1,result1,[ search2,result2, …] [default])
例子 select empno,ename,job,decode(job, ‘CLERK’, ‘辦事員’, ‘SALESMAN’ , ‘銷售’, ‘總裁’) from emp
單行函數看可以嵌套。嵌套函數的執行順序是由內到外。
例子 to_char(next_day(add_months(hiredate,3),’星期一’),’YYYY-MM-DD’)
to_char(round(sal/30,2),’L999,999’)
分組函數
分組函數有avg、sum、min、max、count、wm_concat
分組函數就是多行函數,作用於一組數據,並一組數據返回一個值。
Select avg(sal) from emp
Select min(sal) from emp
Select max(sal) from emp
Select count(*) from emp
Distinct關鍵字去除重覆記錄 select count(distinct deptno) from emp
WM_COUCAT行轉列(讓查詢結果行轉列)該函數可以把列值以 逗號 分隔起來,並顯示成一行。
Select wm_concat(ename) from emp
使用分組函數要註意空值的問題,分組函數會自動忽略空值,如果要空值的數據,可以用NVL函數
數據分組 GROUP BY
在select列表中的所有未包含在組函數中的列都應包含在group by子句中
正確寫法:select deptno,avg(sal) from emp group by deptno
錯誤寫法:select deptno,avg(sal) from emp
錯誤寫法:select deptno,job,avg(sal) from emp group by deptno
正確寫法:select deptno,job,avg(sal) from emp group by deptno,job
包含在group by子句中的列不必包含在select列表中
Select avg(sal) from emp group by deptno
Having子句 用於對分組後的結果進行過濾
Select deptno,avg(sal) from emp group by deptno having avg(sal)>2500 這裡的having不能換成where
不能在where子句中使用組函數,可以在having子句中使用組函數。
分組函數嵌套時候需要配合group by子句一起使用
例子 select * max(avg(sal)) from emp group by deptno 如果沒有group by子句會報錯的
多表查詢和笛卡爾集
多表查詢顧名思義就是從多個表中獲取數據
笛卡爾集是集合的一種,它是數學上的概念。假設A和B都是集合,A和B的笛卡爾積用A*B來表示,那麼A*B所形成的集合叫笛卡爾集。
Oracle多表查詢
等值連接,它是指使用等值比較符 = 指定連接條件的查詢
例子 select empno,ename,job,dname from emp,dept where emp.deptno=dept.deptno
例子 用表別名方式 select e.empno,e.ename,e.job,d.dname from emp e,dept d where e.deptno=d.deptno
在連接查詢中,當有多個連接條件時,使用AND指定其他條件
例子 select e.empno,e.ename,e.job,d.dname from emp e,dept d where e.deptno=d.deptno and e.deptno=10
不等值連接,它是指使用除等值比較符之外的其他比較操作符執行連接查詢
例子 select e.empno,e.ename,e.sal,s.grade from emp e,salgrade s where e.sal between losal and hisal
外連接是標準連接的拓展,它不僅會返回滿足連接條件的所有記錄,而且還會返回不滿足連接條件的部分記錄
外連接是用+操作符來完成的,分右外連接、左外連接
右外連接:SELECT table1.column, table2.column FROM table1,table2 WHERE table1.column(+)=table2.column
返回右邊表table2的全部記錄,包括不滿足條件的記錄。返回左邊table1滿足條件的記錄。
左外連接:SELECT table1.column, table2.column FROM table1,table2 WHERE table1.column=table2.column(+)
返回左邊表table1的全部記錄,包括不滿足條件的記錄。返回右邊table2滿足條件的記錄。
例子 select d.deptno,d.dname,count(e.empno) from dept d,emp e where d.deptno=e.deptno(+) group by d.deptno,d.dname
自連接是同一張的互相連接,實質是將同一張表看成是多張表
SQL:1999標準
SELECT table1.column_name, table2.column_name FROM table1
[CROSS JOIN table2]|[NATURAL JOIN table2]|[JOIN table2 USING (column_name)]|
[JOIN table2 ON (table1.column_name= table2.column_name)]|
[LEFT | RIGHT | FULL OUTER JOIN table2 ON (table1.column_name= table2.column_name)]
交叉連接
例子 select e.detpno,e.ename,d.deptno,d.dname from emp e cross join dept d
自然連接是一種特殊的等價連接,它將表中具有相同名稱的列自動進行記錄匹配。自然連接不必指定任何同等連接條件
例子 select table1.column_name,table2.column_name from table1 natural join table2
內連接,返回兩個表中想匹配的數據(只返回滿足條件的數據)
等值連接、非等值連接、自然連接都屬於內連接
用USING子句建立相等連接
例子 select e.ename,e.sal,d.dname from dept d join emp e using(deptno) 兩個表都有的列deptno
用ON子句建立相等連接
例子 select e.ename,e.sal,d.dname from dept d join emp e on e.deptno=d.deptno
左外連接、右外連接、完全外連接
例子 select e.ename,e.sal,d.dname from dept d left join emp e on e.deptno=d.deptno
例子 select e.ename,e.sal,d.dname from dept d right join emp e on e.deptno=d.deptno
例子 select e.ename,e.sal,d.dname from dept d full join emp e on e.deptno=d.deptno
Set運算符,並不是set這個符號,它是集合操作符,專門用於合併多條SELECT語句的結果。
有union/union all 並集 intersect 交集 minus 差集
例子 select deptno,empno,ename from emp1
union
select deptno,empno,ename from emp2
union all與union不同的是它不會取消重覆行,並且不會對結果集數據進行排序
例子 select deptno,empno,ename from emp1
union all
select deptno,empno,ename