sql常用语法
时间:2010-10-13 来源:sq1990
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;
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;
相关阅读 更多 +