Chinaunix首页 | 论坛 | 博客
  • 博客访问: 688654
  • 博文数量: 118
  • 博客积分: 2933
  • 博客等级: 少校
  • 技术积分: 1779
  • 用 户 组: 普通用户
  • 注册时间: 2010-07-27 10:16
文章存档

2013年(35)

2012年(27)

2011年(23)

2010年(33)

分类: 数据库开发技术

2010-10-13 22:16:14

1:
   2个表的连接
1.select * from BJXXB, XSXXB where BJXXB.bh = XSXXB.xh;

BJXXB,XSXXB为2个表bh,xh分别为2个表的字段。
 
 
 
 
1.一般的相等连接:
select * from a, b where a.id = b.id;
这个就属于内连接。
 
对于外连接:
Oracle中可以使用“(+) ”来表示,9i可以使用LEFT/RIGHT/FULL OUTER JOIN 
 
LEFT OUTER JOIN:左外关联 
SELECT e.last_name, e.department_id, d.department_name 
FROM employees e 
LEFT OUTER JOIN departments d 
ON (e.department_id = d.department_id); 
等价于 
SELECT e.last_name, e.department_id, d.department_name 
FROM employees e, departments d 
WHERE e.department_id=d.department_id(+) 
结果为:所有员工及对应部门的记录,包括没有对应部门编号department_id的员工记录。 
 
RIGHT OUTER JOIN:右外关联 
SELECT e.last_name, e.department_id, d.department_name 
FROM employees e 
RIGHT OUTER JOIN departments d 
ON (e.department_id = d.department_id); 
等价于 
SELECT e.last_name, e.department_id, d.department_name 
FROM employees e, departments d 
WHERE e.department_id(+)=d.department_id 
结果为:所有员工及对应部门的记录,包括没有任何员工的部门记录。 
 
FULL OUTER JOIN:全外关联 
SELECT e.last_name, e.department_id, d.department_name 
FROM employees e 
FULL OUTER JOIN departments d 
ON (e.department_id = d.department_id); 
结果为:所有员工及对应部门的记录,包括没有对应部门编号department_id的员工记录和没有任何员工的部门记录。
 

2 查询语句
不在乎大小写

查询的话看第十讲
SELECT  查询字段,查询字段 (数据库名).FROM ‘表名’ WHERE 条件
SELECT *FROM  '表名' WHERE 【(字段id=2)】//条件
查询分组语句:
SELECT *FROM  '表名' group by ‘字段名’
排序查询:
(按照注册时间排序)
SELECT *FROM  '表名' order by '字段名' ASC//正序排序(desc倒序)
多重排序!!!
SELECT *FROM  '表名' limit m,n//列出从第m+1到n条
插入语句
insert into 表名 (字段…,…) values (‘值’…,…now())//            每一个字段必须一一对应每一个值,id因为自动累加所以可以不给它负值,now()函数自动获取电脑时间
update更新语句
UPDATE 表名 SET 字段 = ‘值’ WHERE (id=6)//条件 limit 
 
prinr_r($变量名)
 
 
 

/*= 等于 、<>不等于、in 包含 、 not in 不包含、 like 匹配
      BETWEEN  在范围  、 not BETWEEN  不在范围  < 、>
 
3。 删除语句
 
delete from BJXXB where BH=5;
4 分页查询
 
1.SELECT * FROM (SELECT A.*, ROWNUM RN FROM (SELECT * FROM BJXXB) A WHERE ROWNUM <= 5)WHERE RN >= 1
2.SELECT * FROM (SELECT A.*, ROWNUM RN FROM (SELECT * FROM BJXXB) A )WHERE RN BETWEEN 1 AND 3
只需要改动  BJXXB为新表的名字即可。
2的执行效率明显没有1高所以一般都用1。
这是由于CBO优化模式下,Oracle可以将外层的查询条件推到内层查询中,
以提高内层查询的执行效率。对于第一个查询语句,第二层的查询条件WHERE
ROWNUM <= 40就可以被Oracle推入到内层查询中,这样Oracle查询的结果一
旦超过了ROWNUM限制条件,就终止查询将结果返回了。
  而第二个查询语句,由于查询条件BETWEEN 21 AND 40是存在于查询的第三层
,而Oracle无法将第三层的查询条件推到最内层(即使推到最内层也没有意义,因为最内层查询不知道RN代表什么)
。因此,对于第二个查询语句,Oracle最内层返回给中间层的是所有满足条件的数据,
而中间层返回给最外层的也是所有数据。数据的过滤在最外层完成,显然这个效率要比第一个查询低得多。
 
5 更新数据
  update bjxxb set bjmc='luo' where bh=1;
阅读(1354) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~