查询语句
一.子查询
where型子查询:把内层查询的结果作为外层查询的比较条件
二.exists
存在即保留
三.函数
单行函数:一条数据返回一个结果
多行函数|组函数|聚合函数:多条数据返回一个结果
3-1.日期函数
sysdate | current_date:以date类型返回当前的日期
sysdate +|- ** :几天后或几天前的时刻
add_months(d,x):返回加上x月后的日期d的值
LAST_DAY(d):返回的所在月份的最后一天
Months_between(date1,date2):返回date1和date2之间月的数目
Next_day(sysdate,’星期一’):下一个星期一的时间
3-2.日期对象与字符串之间的转换
to_date(‘字符串’,识别日期字符串模板):
设定一个特定的时间(用一个特定的时间字符串转换为日期):
例:select to_date('2019-07-30 10:11:13','yyyy-mm-dd hh24:mi:ss') from dual;
例:select to_date('2019年07月30日 10:11:13','yyyy"年"mm"月"dd"日" hh24:mi:ss') from dual;
To_char():将日期转为特殊格式的字符串:
例:select to_char(sysdate,'yyyy"年"mm"月"dd"日" hh24:mi:ss') from dual;
3-3.其他函数
nvl(string1,string2)->如果string1位null,则结果为string2的值
decode(condition,case1,express1,case2,express2,…casen,expressn,expression)
decode(判断字段,检验字段值1,结果1,检验字段值2,结果2..,默认值)
四.组函数
--对确定的结果集使用函数得结果
--注意:1.select后 组函数不能和非组函数或分组字段一起使用
2.where 不能使用组函数
3.组函数仅在选择列表和Having字句中有效
--说明:1.组信息与单条记录不能同时查询
2.组函数不能用在where中,能使用的地方select having
3.null不参与运算
常用函数
Count() sum() max() min() avg()
五.分组
--select 数据 from 数据源 where 行过滤条件 group by 分组字段 having 组过滤信息 order by 排序字段
--执行顺序:from—where—group by—having—select—order by
group by:分组
1) select出现分组函数,就不能使用非分组信息,可以使用group by字段
2) group by字段 可以不出现select中,反之select除组函数外的,其他字段必须出现在group by中
过滤组 having:
where:过滤行记录,不能使用组函数 having:过滤组,可以使用组函数
--先过滤再分组:
select max(sal) from emp where deptno in(10,30) group by deptno ;
--先分组再过滤:
select max(sal),deptno from emp group by deptno having deptno in(10,30);
六.rowid 和 rownum 都是伪列
rowid :
--rowid相当于表中每一条记录的地址,数据插入到列表中的时候就已经存在,后续不会改变
--去重,没有主键,没有唯一的字段,可以存在多条数据重复,想达到去重,可以使用rowid
rownum : 会根据返回记录生成一个序列化的数字 必须排序,不能直接取大于1的数
七.92语法
1.笛卡尔积 : 交叉相乘
2.等值连接:可以是两个表中相同字段做连接,可以是不同字段做连接,但类型要保持一致
例:select * from emp,dept where emp.deptno=dept.deptno;
3.非等值连接:
例:select * from emp,salgrade where sal between losal and hisal;
4.自连接:特殊的等值连接(来自于同一张表)
5.外连接: 看+和,主表在,的左边就叫左外连接 主表在,的右边叫右连接