insert
insert into table_name [column1,column2,…] values(value1,value2,…);
insert into table_name [column1,column2,…] select (column1,column2,…) from table_name2;
insert into : 指明要插入表中的字段
values : 插入相应字段中的值
SQL> create table dept4 as select * from dept where 1!=1;
表已创建。
2. Update
update table_name set column1 = value1[,column2=value2,…] where expression;
SQL> update newemp set sal = sal*1.1 ;
已更新14行。
SQL> select ename,sal from newemp;
ENAME SAL
---------- ----------
SMITH 880
ALLEN 1760
WARD 1375
JONES 3272.5
MARTIN 1375
BLAKE 3135
CLARK 2695
SCOTT 3300
KING 5500
TURNER 1650
ADAMS 1210
ENAME SAL
---------- ----------
JAMES 1045
FORD 3300
MILLER 1430
已选择14行。
SQL> update newemp set sal = sal*1.2 where ename = 'WARD' ;
已更新 1 行。
SQL> select ename,sal from newemp;
ENAME SAL
---------- ----------
SMITH 880
ALLEN 1760
WARD 1650
JONES 3272.5
MARTIN 1375
BLAKE 3135
CLARK 2695
SCOTT 3300
KING 5500
TURNER 1650
ADAMS 1210
ENAME SAL
---------- ----------
JAMES 1045
FORD 3300
MILLER 1430
已选择14行。
3. delete
delete from table_name [where expression];
使用delete语句删除表中的数据,并不能释放被善用的数据块空间,它只是把哪些被删除的数据块标记为 Unused,将来还可以回退(rollback)操作.
4. merge
把数据从一个表中复制到另一个表,插入新数据或替换掉旧数据.
merge into table11 using table2 on expression
when matched then update…
when not matched then insert …;
SQL> merge into newemp ne
2 using emp e
3 on (ne.empno = e.empno)
4 when matched then
5 update set ne.sal = e.sal
6 when not matched then
7 insert values(e.empno,e.ename,e.job,e.mgr,e.hiredate,e.sal,e.comm,e.deptno);
14 行已合并。
表连接查询
连接查询是指将两个或两个以上的表或视图的查询,在实际应用中,查询单个表可能无法满足需求
1.简单连接
使用逗号将两个或多个表进行连接
自然连接是指使用相等比较(=) 指定连接条件,主要用于检索主从表之间的关联数据
select table1.column,table2.column… from table1,table2
where table1.column1 = table2.column2;
显示部门名称,员工名称,工资 只显示部门编号为10的
表的别名:
SQL> select dname as 部门名称,ename "员工姓名",sal 员工工资 from dept d,emp e where e.deptno = d.deptno and d.deptno = 10;
部门名称 员工姓名 员工工资
-------------- ---------- ----------
ACCOUNTING CLARK 2450
ACCOUNTING KING 5000
ACCOUNTING MILLER 1300
内连接
内连接用于返回满足条件的记录
select table1.column,table2.column…
from table1 [inner] join table2
on table1.column1 = table2.column2;
SQL> select d.dname,e.ename from dept d inner join emp e on d.deptno = e.deptno;
DNAME ENAME
-------------- ----------
SALES ALLEN
SALES WARD
RESEARCH JONES
SALES MARTIN
SALES BLAKE
ACCOUNTING CLARK
RESEARCH SCOTT
ACCOUNTING KING
SALES TURNER
RESEARCH ADAMS
SALES JAMES
DNAME ENAME
-------------- ----------
RESEARCH FORD
ACCOUNTING MILLER
已选择13行。
外连接
select table1.column,table2.column…
from table1 [left | right] join table2
on table1.column1 = table2.column2;
外连接是内连接的扩展,他不仅会返回满足条件的所有记录,也会返回不满足条件的记录,如果连接表中(主表)有一列空值,也会被显示;
SQL> select d.dname,e.ename from dept d left join emp e on d.deptno = e.deptno;
DNAME ENAME
-------------- ----------
SALES ALLEN
RESEARCH JONES
SALES MARTIN
SALES BLAKE
ACCOUNTING CLARK
RESEARCH SCOTT
ACCOUNTING KING
SALES TURNER
RESEARCH ADAMS
SALES JAMES
DNAME ENAME
-------------- ----------
RESEARCH FORD
ACCOUNTING MILLER
吃饭部
OPERATIONS
已选择15行。
SQL> select d.dname,e.ename from dept d ,emp e where d.deptno = e.deptno(+);
DNAME ENAME
-------------- ----------
SALES ALLEN
SALES WARD
RESEARCH JONES
SALES MARTIN
SALES BLAKE
ACCOUNTING CLARK
RESEARCH SCOTT
ACCOUNTING KING
SALES TURNER
RESEARCH ADAMS
SALES JAMES
DNAME ENAME
-------------- ----------
RESEARCH FORD
ACCOUNTING MILLER
吃饭部
OPERATIONS
已选择15行。
自连接
同一张表之间的连接查询
SQL> select m.ename||' 是 '||e.ename||' 领导!' from emp m,emp e where m.mgr = e.empno;
M.ENAME||'是'||E.ENAME||'领导!
------------------------------
FORD 是 JONES 领导!
SCOTT 是 JONES 领导!
JAMES 是 BLAKE 领导!
TURNER 是 BLAKE 领导!
MARTIN 是 BLAKE 领导!
WARD 是 BLAKE 领导!
ALLEN 是 BLAKE 领导!
MILLER 是 CLARK 领导!
ADAMS 是 SCOTT 领导!
CLARK 是 KING 领导!
BLAKE 是 KING 领导!
M.ENAME||'是'||E.ENAME||'领导!
------------------------------
JONES 是 KING 领导!
SMITH 是 FORD 领导!
已选择13行。
SQL> select m.ename,e.ename from emp m,emp e where m.mgr = e.empno;
ENAME ENAME
---------- ----------
FORD JONES
SCOTT JONES
JAMES BLAKE
TURNER BLAKE
MARTIN BLAKE
WARD BLAKE
ALLEN BLAKE
MILLER CLARK
ADAMS SCOTT
CLARK KING
BLAKE KING
ENAME ENAME
---------- ----------
JONES KING
SMITH FORD
已选择13行。
交叉连接(笛卡尔积)