oracle基礎知識過一遍(原創)

来源:https://www.cnblogs.com/outmanxiaozhou/archive/2018/12/26/10177812.html
-Advertisement-
Play Games

用戶、角色、許可權、表空間 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_filesdba_temp_files

connect sys/oracle@orcl as sysdba  鏈接使用系統管理用戶sys密碼oracle,並以sysdba身份鏈接實例orclsysdba資料庫管理員許可權,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賦予給用戶user01user02

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 創建視圖

授權對象許可權、回收對象許可權

對象許可權有selectupdateinsertdeleteall......

grant 對象許可權 on 對象 to 用戶或角色   (如對象on user01.school

revoke 對象許可權 on 對象 from 用戶或角色  (如對象on user01.work

數據字典 dba_tablespaceuser_tablespace

select tablespace_name from dba_tablespace;

select tablespace_name from user_tablespace;     

數據字典 dba_usersuser_users

select default_tablespace,temporary_tablespace from dba_users where username=’system’

alter user 用戶名 default tablespacetemporary tablespace 表空間名

alter user user01 default tablespace test1_tablespace temporary tablespace temptest1_tablespace

修改表空間狀態

alter tablespace 表空間名 onlineofflineread onlyread 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類型

字元類型有 charvarchar2

數值類型 number[(p[,s])]   p表示精度,s表示小數點位數

number(5,0)最多可存儲5位數整數  number(5,2)最大可存儲999.99的浮點數

日期類型有 date

LOB類型有CLOBBLOB

例子: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回滾事務

DDLDCL是自動提交事務的

使用事務的原因主要是為保證數據的安全有效,這裡需要提到“表鎖” 

 

基本查詢

語法格式:

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…andin

模糊查詢like               (通配符%表示0個或多個字元,通配符_表示單個字元)

判斷空值is null

模糊查詢中如果字元值本身就包含_%字元,就需要用escape選項和轉義符實現

Select * from emp where ename like ‘G\_%’ escape ‘\’  其實模糊查詢的是G_%

另外判斷是否為空,不可以寫成=NULL<>NULL 這都是錯誤寫法,應該是is nullis 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.大小寫控制函數 有UPPERLOWERINITCAP

                2.字元控制函數 有CONCATSUBSTRLENGTHINSTRLPADRPADTRIMREPLACE

UPPER(char) 用於將字元串轉換為大寫格式

LOWER(char) 用於將字元串轉換為小寫格式

INITCAP(char) 用於將字元串中的每個單詞的首字母轉換為大寫格式,其他字元小寫

CONCAT(str1,str2) 用於字元串的連接

例子concat(‘hello’,’oracle’)   結果:hellooracle

SUBSTR(char,m[n]) 用來截取字元串,char指定源字元串,m用於指定從哪個位置開始截取,n用於指定截取字元串的長度。如果m0,則從首字元開始,如果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得到的餘數,如果n0,則返回結果為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) 用於返回日期d1d2之間相差的月數。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用於指定四捨五入的方式,如果設置fmtYEAR,71日為分界線,如果設置fmtMONTH,16日為分界線。

例子 如果系統時間是’20-7-17’ round(sysdate,’YEAR’) 結果:01-1-18 round(sysdate,’MONTH’) 結果:01-8-17

TRUNC(d,[fmt]) 用於截斷日期時間數據。d用於指定日期的時間值,fmt用於指定截斷日期時間數據的方法,如果設置fmtYEAR,則結果為本年度的11日,如果設置fmtMONTH,則結果為本月1日。

例子 trunk(sysdate,’YEAR’)    trunk(sysdate,’MONTH’)

轉換函數 TO_DATETO_CHARTO_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,如果expr1null,則返回expr2,如果expr1不是null,則返回expr1

例子 select ename,sal,comm,sal+nvl(comm,0) from emp

NVL2(expr1,expr2,expr3) 該函數用於處理NULL,如果expr1不是null,則返回expr2,如果expr1null,則返回expr3

例子 select ename,sal,comm,nvl2(comm,sal+comm,sal) from emp

NULLIF(expr1,expr2) 該函數用於比較表達式expr1expr2,如果二者相等,則返回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子句會報錯的

 

多表查詢和笛卡爾集

多表查詢顧名思義就是從多個表中獲取數據

笛卡爾集是集合的一種,它是數學上的概念。假設AB都是集合,AB的笛卡爾積用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 allunion不同的是它不會取消重覆行,並且不會對結果集數據進行排序

例子 select deptno,empno,ename from emp1

        union all

        select deptno,empno,ename

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 另請參見:Navicat Premium 12.0.18 / 12.0.24安裝與激活 另請參見:Navicat Premium 12安裝與激活(親測已成功激活) 說明: 本主親自驗證過,可以激活! Navicat Premium 12 的安裝我就不說了(預設已經安裝好了),只說怎麼激活。 Navi ...
  • 摘要: 下文講述通過一條sql語句,採用over關鍵字同時對不同類型進行分組的方法,如下所示: 實驗環境:sql server 2008 R2 當有一張明細表,我們需同時按照不同的規則,計算平均、計數、求和等聚合計算時,此時我們可以使用over子句對數據進行操作。例: 我們需獲取一個學生成績的 總平 ...
  • 最近在複習資料庫相關知識點,過幾天就要考試了; 第一章 資料庫基礎知識 1、資料庫管理是數據處理的基礎工作,資料庫是數據管理的技術和手段。資料庫中的數據具有整體性和共用性。 1.2、資料庫系統的核心:資料庫管理系統。 1.3、資料庫核心:數據模型; 2、資料庫(DB)是一個按數據結構來存儲和管理數據 ...
  • 穿透: 從緩存中查詢一個數據,查到為空,需要每次都去資料庫中查詢。而從資料庫中查詢出來也為空,也就不寫入緩存。導致一個不存在的數每次都去資料庫中查詢,造成db系統很大壓力 造成緩存穿透 解決:如果從資料庫中查詢結果為空,我們也要緩存起來,避免下次訪問緩存中沒有,而去訪問資料庫 雪崩:緩存在一段是時間 ...
  • 在前面兩篇文章中( 淺談SQL Server內部運行機制 and 淺談SQL Server數據內部表現形式 ),我們交流了一些關於SQL Server的一些術語,SQL Sever引擎 與SSMS抽象模型,SQL Server內部存儲機制和SQL Server內部體繫結構等。討論的這些問題,均可以歸 ...
  • -- 創建ASM實例及ASM資料庫 一、ASM相關概念 1.什麼是ASM(Auto Storage Management) 簡稱自動存儲管理,是一種用於管理磁碟的工具 能夠在多個物理設備之間實現條帶化、鏡像數據文件、恢覆文件等 文件按分配單元AUs(allocation units)平衡分佈在磁碟組 ...
  • [20181226]簡單探究cluster table.txt--//簡單探究cluster table.以前也做過,有點生疏了.1.環境:SCOTT@book> @ ver1PORT_STRING VERSION BANNER x86_64/Linux 2.4.xx 11.2.0.4.0 Orac ...
  • 小弟初來乍到,分享一些工作學習中遇到的問題和解決方式,如有不准確或是有錯誤的地方,希望不吝賜教,謝過了。 --Dogtwo 處理某問題時遇到的MySQL問題及解決方案. 1.隨著Project數量越來越多,DB的備份文件大小也越來越大,難以導入。 之前導入備份DB時採用的方法有兩種: 1.將導出的. ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...