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 大于最小的
<any 小于最大的
<all 小于最小的
<all大于最大的
子查詢的結果是多行多列
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.目前事務復原段的資源不會釋放