数据库学习笔记

SQL查询技巧详解
本文详细介绍了SQL查询中where、group by、having、order by等子句的使用方法及执行顺序,通过具体示例展示了如何实现复杂的数据筛选和排序。此外还涉及了Oracle数据库的日期查询、LIKE操作符用法、数据迁移、JOIN操作的区别,以及MySQL中timestamp和datetime字段的默认值设置。

同时出现了where,group by,having,order by的时候,执行顺序和编写顺序:

完成一个复杂的查询语句,需求如下: 
按由高到低的顺序显示个人平均分在70分以上的学生姓名和平均分,为了尽可能地提高平均分,在计算平均分前不包括分数在60分以下的成绩,并且也不计算贱人(jr)的成绩。 分析: 
1.要求显示学生姓名和平均分 
因此确定第1步select s_name,avg(score) from student 
2.计算平均分前不包括分数在60分以下的成绩,并且也不计算贱人(jr)的成绩 
因此确定第2步 where score>=60 and s_name!=’jr’ 

3.显示个人平均分 
相同名字的学生(同一个学生)考了多门科目

因此按姓名分组 确定第3步 group by s_name 

4.显示个人平均分在70分以上 
因此确定第4步 having avg(s_score)>=70 

5.按由高到低的顺序 
因此确定第5步 order by avg(s_score) desc

总结:1>sql语句写的时候having子句必须跟在group by子句之后,在order by子句之前。

   2>利用group by子句根据某字段进行分组,该字段一定要出现在select语句里。

   3>每查询一条主线都会到子查询所有的结果去比对。

 

 

oracle查询时间段:

select * from mytable where to_char(install_date,'YYYYMMDD') > '20050101';
select * from mytable where install_date  > to_date('2005-01-01','yyyy-mm-dd');  

oracle like运用

app_key like CONCAT('%',CONCAT(#{appKey},'%'))

 

oracle数据库使用plsqldev迁移数据:

数据量较大的时候,直接运行sql脚本会卡死,需打开命令窗口,把sql脚本放在某个目录下(例如e盘中room.sql),

需要注意的是如果insert中的的内容有特殊字符的话(例如&等),

首先执行命令 set define off,然后才能insert成功,否则会报错,

接着执行@@e:\room.sql

 

 

数据库join:

  得出的结论是:条件放在on与放在where后面的作用是不一样的。on对中间结果进行筛选(个人更倾向于中间运算),
再由where对最终结果进行筛选。(on子句在where子句之前)
  inner join和left join不一样,inner join左边或右边的结果为空,该行记录就不显示了。
而left join会以左边的表为保留表,就算右边的结果为空,该行仍然显示。
 

游标的使用:

declare
--类型定义
cursor c_job is
select room_id,multiple
from multiple_log 
where id in (select max(id) from multiple_log group by room_id);
--定义一个游标变量c_row c_job%ROWTYPE ,该类型为游标c_job中的一行数据类型
c_row c_job%rowtype;
begin
for c_row in c_job loop
dbms_output.put_line(c_row.room_id||'-'||c_row.multiple);
update user_count u set u.multiple = c_row.multiple 
where u.room_id = c_row.room_id ;
end loop;
end;

  

mysql  timestamp  datetime 默认设置

在创建新记录的时候把这个字段设置为当前时间,但以后修改时,不再刷新它

TIMESTAMP DEFAULT CURRENT_TIMESTAMP

在创建新记录的时候把这个字段设置为0(可以随意设置),以后修改时刷新它 
TIMESTAMP ON UPDATE CURRENT_TIMESTAMP

在创建新记录和修改现有记录的时候都对这个数据列刷新
TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP

在创建新记录的时候把这个字段设置为给定值,以后修改时刷新它

TIMESTAMP DEFAULT ‘yyyy-mm-dd hh:mm:ss’ ON UPDATE CURRENT_TIMESTAMP

 

 

 

 

转载于:https://www.cnblogs.com/cangqiongbingchen/p/6434337.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值