1,多表查询的思路
/*多表查询思路
1,分析题目涉及那些表;
2,如果数据来自多张表,就要使用多表查询
找到两个表中相同的字段用等于号链接起来并放在
where子句后面
3,如果需要对单条记录做过滤,就要把过滤条件追加到
where字句后面,用and连接起来;
4,如果要对多组数据做统计,就要用到group by;
5,如果需要分组之后的数据进行过滤,需要用到having;
6,如果需要对数据进行排序,就要用到order by。
2,Delete,truncate,drop的区别
delete
[from] 表名
[where过滤条件]
truncate
table 表名
drop table表名
delete:会发起事务,可以有where过滤条件(即删除指定的数据),属于dml语句,删除效率比truncate低
truncate:不会发起事务,不能有where过滤条件(即只能删除表中所有的数据),属于ddl语句,删除效率比delete高,但有危险性
若表中有列是其他表的外键,则不能在该表中使用truncate(即truncate会影响外键列)
drop table表名:即删除表的数据又删除表的结构。
3.模糊查询
-----模糊查询: like
例:查询出名字以"MA"开头的全部职工的姓名、工种、工资和部门号
select ename,job,sal,deptno from emp
where ename like 'MA%';
select 列名
from 表名1 表别名1,表名2 表别名2
where 表别名1.列名=表别名2.列名(+) 或 表别名1.列名(+)=表别名2.列名;
select ... from table1 t1,table2 t2 where t1.id =
t2.id(+); --左连接
select ... from table1 t1,table2 t2 where t1.id(+) =
t2.id; --右连接
在where子句的条件中必须包含外部连接操作符"(+)"。当该操作符加在表的列名上时,每当该表没有行与另一表的一行连接时,Oracle将为该表列产生空值(需要哪个表产生空值,就在哪个表的字段上加上(+) )。
PS:右连接,等号右边的表为主表,等号左边的表为从表
主表和从表的关系
4,对重复的行,只返回一个值(去重)的关键字
distinct:对于指定的字段所选择的重复行,只返回一行
例:查找出20号部门中有多少种不同的工种。
select distinct job from emp
where deptno = 20
5,增,删,改,查的语法
1》新增数据
insert into 表名(列1,列2...列N) values(值1,值2...值N);
在Oracle字符串用单引号引起来
*/
insert into t_class values (1, '测试就业班');
commit;
insert into t_class values (2, '测试周末班');
rollback;
结束事务的两种方式:
a1)、commit,提交事务,所有的操作都生效,操作的结果直会永久保存在数据库中
a2)、rollback,回滚事务,所有的操作都不会生效,操作的结果直接扔掉,不会永久保存到数据库中
------ 当我们要向表中插入时间格式的数据时,需要使用to_date()函数把字符串转换为时间格式
2》删除数据库的数据
delete [from] 表名
[where过滤条件]
3》修改数据库的数据
update 表名
set 列1 = 值1,列2 = 值2...列N = 值N
[where过滤条件];
例:将职工ALLEN提升为经理,工资增至$8000,奖金增加40%
update emp
set job = 'MANAGER',sal = 8000,comm=1.4*comm
where ename = 'ALLEN';
4》分组查询命令的基本格式为:
select 字段名
from 表名
[where 过滤条件]
[group by 字段];
Having 分组后数据的条件过滤