=================================================================================================
第二天
第二天第二天
第二天:
::
:
Single Row Function:
varchar2:
1) nvl('hello','world')-----> 'hello'
nvl(null,'world')--------> 'world'
2) select id,last_name,dept_id
from s_emp
where lower(last_name)='smith';
3) select id,concat(last_name,first_name),dept_id
from s_emp;
concat(last_name,first_name)--->result1;
concat(result1,title);
--> concat(concat(last_name,first_name),title);
System.out.println(stu.toString());
select substr('String',-4,3)
from dual;
dual: dummy table ,为了维护 select 的完整性
select id,last_name,dept_id
from s_emp
where last_name like 'S%';
where substr(last_name,1,1)='S';
number: round trunc
date:日期类型
1) select sysdate from dual;
标准的日期格式:
年: yy 08
yyyy 2008
rr 08
rrrr 2008
year two thousand and eight
月: mm 06
mon JUN
month june
日: dd 19
ddth 19th
ddsp ninteen
ddspth ninteenth
星期: d 4
dy thu
day thursday
小时: hh24 22
hh 10
am pm
分钟: mi 秒: ss
select id,last_name,dept_id,
to_char(start_date,'yyyy-month-dd,hh24:mi:ss') "sdate"
from s_emp
where dept_id=41;
update s_emp
set
start_date=to_date('19-jun-08,11:24:56','dd-mon-yy,hh24:mi:ss')
where id=100;
update s_emp
set start_date=to_date('19-jun-90','dd-mon-yy')
where last_name='S_abc';
select id,last_name,to_char(salary,'$99,999.00')
from s_emp;
select id,last_name,
to_char(start_date,'fmdd-mm-yyyy,fmhh:mi:ss') "sdate"
from s_emp;
fm:在不引起歧义的情况下去掉前置的零和空格
类似于开关变量,第一次写打开功能,再写关闭
Join:数据来源于多张表
数据来源于多张表数据来源于多张表
数据来源于多张表,叫多表联合查询,多个表之间要做连
接
1.等值连接
等值连接等值连接
等值连接(内连接
内连接内连接
内连接) 条件: fk-----pk
select s_emp.last_name,s_emp.dept_id,
s_dept.id,s_dept.name
from s_emp,s_dept
where s_emp.dept_id=s_dept.id;
oracle:select e.last_name,e.dept_id,d.id,d.name
from s_emp e,s_dept d
where e.dept_id=d.id;
标准 sql:select e.last_name,e.dept_id,d.id,d.name
from s_emp e inner join s_dept d
on e.dept_id=d.id
where e.last_name='Smith';
select e.last_name,e.dept_id,d.id,d.name
from s_emp e join s_dept d
on e.dept_id=d.id
where e.last_name='Smith';
打印出员工的名字,所在部门的名字,以及所在地区的名
字
select e.last_name,d.name,r.name
from s_emp e,s_dept d,s_region r
where e.dept_id=d.id
and d.region_id=r.id;
select e.last_name,d.name,r.name
from s_emp e join s_dept d
on e.dept_id=d.id
join s_region r
on d.region_id=r.id;
2.外连接
外连接外连接
外连接(左外
左外左外
左外,右外
右外右外
右外,全外
全外全外
全外)
打印所有的客户名字,以及所对应的销售代表的名字
1)左外:如果左边对应的右边的值为空时,右边补 null
oracle:select c.name,c.sales_rep_id,e.id,e.last_name
from s_customer c,s_emp e
where c.sales_rep_id=e.id(+);
标准 sql:select c.name,c.sales_rep_id,e.id,e.last_name
from s_customer c left outer join s_emp e
on c.sales_rep_id=e.id;
2)右外 :如果右边对应的左边的值为空时,左边补 null
select c.name,c.sales_rep_id,e.id,e.last_name
from s_customer c,s_emp e
where e.id(+)=c.sales_rep_id;
select c.name,c.sales_rep_id,e.id,e.last_name
from s_emp e right join s_customer c
on c.sales_rep_id=e.id;
3)全外 :都不补空值(null)
select c.name,c.sales_rep_id,e.id,e.last_name
from s_customer c full outer join s_emp e
on c.sales_rep_id=e.id;
3.自连接: 本表的 fk 指向本表的 pk
可以给表起不同的别名,再做连接。
打印出员工的姓名和他的经理的名字
select e.last_name,m.last_name
from s_emp e,s_emp m
where e.manager_id=m.id;