前言 cross join ,是笛卡爾積;nature join 是自然連接。 正文 內外連接 inner join inner join 的inner可以省略。 內連接 在一個表中能夠找到在另一個表中與之對應的記錄,來組成新的記錄顯示出來,舍棄表中在另一個表中沒有對應記錄的記錄。 等值連接 一
cross join ,是笛卡爾積;nature join 是自然連接。
inner join 的inner可以省略。
在一個表中能夠找到在另一個表中與之對應的記錄,來組成新的記錄顯示出來,舍棄表中在另一個表中沒有對應記錄的記錄。
一個表中的某個字段是另一個表的外鍵
例如。emp表和dept表存在多對一的關聯關系,由外鍵字段deptno來維護,即emp表來主動維護這一關系。
between and 來實現非等值連接;
select e.ename,e.sal,s.grade from emp e join salgrades on e.sal between s.losal and s.hisal;
表中的字段之間尋在引用關系,通過得同一個表取不同別名來實現自身連接。
select e.empno,m.name from emp e join emp m on m.empno=e.mgr;
外連接【陪陪時會將驅動表中所有記錄顯示
左外連接會將主表對應的所有信息顯示,從表與之匹配的記錄顯示。
select * from emp join dept on emp.deptno=dept.deptno(+); --加號在join 右邊的表的屬性上位左連接
select * from emp left join dept on emp.deptno=dept.deptno;
加號在join 左邊的表的屬性上位右連接
將兩表中所有匹配和不匹配記錄顯示出來。
多行函數,輸入一組記錄,輸出一行記錄。max、min、avg、sum和count函數。
1.如果在select之后有某個字段名稱,那么此字段必須作為分組的條件之一。
select deptno,max(sal) from emp group by deptno;--在分組查詢中,select 之后除了組函數以外,查詢的字段名稱和個數最好和group by 之后的字段名稱和個數一致。
2.過濾分組查詢可以使用having關鍵字,having用于過濾分組之后的結果
select deptno,avg(sal) from emp group by deptno having avg(sal)>2000;--having不能單獨使用,它必須出現在group by 之后。
3.where 不可接分組函數
4.分組查詢的執行順序
先執行from,在執行where,或在分組,最好才執行select。
查詢中含有查詢
查詢結果是一行一列
單行子查詢可以使用比較運算符(<,>,=,!=,<>)
select enamel ,sal rom emp where sal>(select sal from emp where ename='SOTT');
子查詢的結果是一行多列
select enamel,sal。deptno from emp where (deptno,sal) in(select deptno,max(sal) from emp group by deptno having deptno=10);
子查詢的結果是多行一列
select * from emp where deptno in(select deptno from emp where job='CLERK');
注:
=any 跟in的效果一樣,匹配子查詢的所有值
>any 大于最小的
子查詢的結果是多行多列
select enamel,sal。deptno from emp where (deptno,sal) in(select deptno,max(sal) from emp group by deptno );
子查詢和主查詢進行關聯查詢
select * from emp out where sal>(select avg(sal) from emp where out.deptno=deptno group by deptno);--先將主表out的第一條記錄的deptno傳到子查詢,并將查詢結果返回到主查詢,主查詢將符合條件的記錄放入到結果集中,依次循環該過程,直到循環到主表的最后一條記錄。
例子
select * from emp out where empno in(select mgr from emp);;--查詢出所有的領導
select * from emp out where exists(select 'x' from emp where mgr=out.empno);--exists,假如存在,子查返回的是true,并不關注子查詢返回的具體的結果。
集合查詢中的字段個數和類型要一致,這稱為select的同構。
select job from emp deptno=10 union all select job from emp deptno=20;
注:
union all 并集,并且不去除重復
union 并集,去除重復
intersect 交集
minus 差集
number 數字類型
varchar2字符串類型;可變長
char 字符串類型,固定長度,占用空間不變,執行效率高
date日期類型
clob 字符型大數據類型
blob 字節型大數據類型
create table 表名(字段名 數據類型 約束,字段名 數據類型 約束);
復制表只能復制表結構和數據,復制不了約束。
create table 表名1 as select * from emp where empno=10000;---如果where條件不成立,查不到任何東西時,該語句只復制了表結構;
注:user_constraints 存儲當前用戶的相關信息的數據字典
drop table 表名
rename 舊表名 to 新表名
alter table 表名 rename column 舊字段名 to 新字段名;
修改字段類型的前提是當前的字段值是空的,即修改的列為空。
alter table 表名 modify(字段名稱 字段類型(長度));
alter table 表名 add(字段名稱 字段類型(長度));
alter table 表名 drop (字段名稱);
alter table 表名 drop column(字段名稱);
刪除表中的所有記錄,效率比delete更高
字段的值與表中字段的類型和長度要匹配
insert into 表名(字段名稱1,字段名稱2) value(字段1的值,字段2的值);
1.一次插入多條記錄
insert into emp(empno,ename) select empno,ename from emp;
update 表名 set 被修改的字段名1=新值,被被修改的字段名2=新值
delete 【from 】 表名;
數據庫運行的最小單元,是一系列的數據操作,是數據庫應用程序的基本邏輯單元。事務是恢復和并發控制的基本單元。
1.在sql中,定義事務的預計有3條
begin transaction
commit
rollback
通常事務以begin transaction 開始,以commit或rollback結束。
注:
1.rollback 回滾事務,事務恢復到上一個事務結束之前的狀態。
2.dml執行會開啟一個事務。
3.commit 提交事務,當前操作會執行應用到數據庫
4.commit和rollback會顯式的提交事務
5.savepoint 事務點名;設置事務點
rollback to 事務點名;--在事務點之后的其他dml操作都會被取消
6.ddl語句隱式的提交事務
事務是數據庫的邏輯工作單位,事務中包括的諸操作要么都做,要么都不做。
事務執行的結果必須是使數據庫從一個一致性狀態變到另一個一致性狀態。
一個事務的執行不能被其他事務干撓。
也稱永久性,值一個事務一旦提交,它對數據庫中數據的改變就應該使永久性的。
1.表和行級別的鎖不會釋放
2.當前會話的操作在其他會話中查不到
3.當前事務可以回滾
4.當前事務回滾段的資源不會釋放
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com