2018-08-16

1,多表查询的思路

/*多表查询思路

1,分析题目涉及那些表;

2,如果数据来自多张表,就要使用多表查询

找到两个表中相同的字段用等于号链接起来并放在

where子句后面

3,如果需要对单条记录做过滤,就要把过滤条件追加到

where字句后面,用and连接起来;

4,如果要对多组数据做统计,就要用到group by

5,如果需要分组之后的数据进行过滤,需要用到having

6,如果需要对数据进行排序,就要用到order by

2Delete,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 分组后数据的条件过滤

你可能感兴趣的:(2018-08-16)