进阶之数据库sql

数据库总结

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 ) 

 

猜你喜欢

转载自blog.csdn.net/m0_37636884/article/details/82427807