数据库总结
truncate、delete和drop 的区别
1、表数据和表结构
truncate、delete都会删除表中的数据,不删除表的结构(定义),drop不仅会删除表数据也会删除表结构。
2、是否加入事务
1.drop、truncate都是DDL语句(数据定义语言),执行后会自动提交。
delete是DML语句,不会自动提交。
2. delete 语句是数据库操作语言(dml),这个操作会放到 rollback segement 中,事务提交之后才生效;如果有相应的 trigger,执行的时候将被触发。
truncate、drop 是数据库定义语言(ddl),操作立即生效,原数据不放到 rollback segment 中,不能回滚,操作不触发 trigger。
使用order by 和 limit 的组合,能够找出一个列中最高或者最低的值。
select prod_price from products order by prod_price desc limit 1;
// prod_price desc 对价格进行降序排列,然后取第一个,获得最大值
order by 子句位置
多条件组合语句,顺序不能出现错误,不然将产生错误。
order by 位于from 子句之后,limit 位于order by 子句之后。
例子:
1. 语句 查询出每门课都大于80 分的学生姓名
name kecheng fenshu
张三 语文 81
张三 数学 75
李四 语文 76
李四 数学 90
王五 语文 81
王五 数学 100
王五 英语 90
答案一:: select distinct name from table where name not in (select distinct name from table where fenshu<=80)
答案二:select name from table group by name having min(fenshu)>80
2. 学生表 如下:
自动编号 学号 姓名 课程编号 课程名称 分数
1 2005001 张三 0001 数学 69
2 2005002 李四 0001 数学 89
3 2005001 张三 0001 数学 69
删除除了自动编号不同, 其他都相同的学生冗余信息
A: delete tablename where 自动编号 not in(select min( 自动编号) from tablename group by 学号, 姓名, 课程编号, 课程名称, 分数)
3. 说明:两张关联表,删除主表中已经在副表中没有的信息
SQL:
Delete from info where not exists (select * from infobz where info.infid=infobz.infid )