SELECT * FROM(SELECT id,realname FROM T_USER ORDER BY id asc ) WHERE ROWNUM <=3
从第10条记录开始,提取10条记录
SELECT * FROM (SELECT ROWNUM rn,id,realname FROM (SELECT id,realname FROM T_USER)WHERE ROWNUM<=20) t2 WHERE T2.rn >=10;
按照学生ID排名,从第10条记录开始,提取10条记录
SELECT * FROM (SELECT ROWNUM rn,id,realname FROM (SELECT id,realname FROM T_USER ORDER BY id asc)WHERE ROWNUM<=20) t2 WHERE T2.rn >=10;
多表查询
如果在查询的时候,直接从多个表中获取数据。没有添加条件判断,会出现笛卡尔积
笛卡尔集会在下面条件下产生
省略连接条件
连接条件无效
所有表中的所有行互相连接
为了避免笛卡尔集, 可以在 WHERE 加入有效的连接条件
等值查询
1 2 3 4 5
SELECT employees.employee_id, employees.last_name, employees.department_id, departments.department_id, departments.location_id FROM employees, departments WHERE employees.department_id = departments.department_id;
非等职查询
1 2 3 4 5
-- EMPLOYEES表中的列工资应在JOB_GRADES表中的最高工资与最低工资之间 SELECT e.last_name, e.salary, j.grade_level FROM employees e, job_grades j WHERE e.salary BETWEEN j.lowest_sal AND j.highest_sal;
内连接
1 2 3 4 5 6 7 8
SELECT e.last_name, d.department_name FROM employees e, departments d WHERE e.department_id = d.department_id
-- SQL1999语法的方式 SELECT e.last_name, d.department_name FROM employees e INNERJOIN departments d ON e.department_id = d.department_id
左外连接
1 2 3 4 5 6 7 8
SELECT e.last_name, d.department_name FROM employees e, departments d WHERE e.department_id = d.department_id(+)
-- SQL1999方式 SELECT e.last_name, d.department_name FROM employees e LEFTOUTERJOIN departments d ON (e.department_id = d.department_id)
右外连接
1 2 3 4 5 6 7 8
SELECT e.last_name, d.department_name FROM employees e, departments d WHERE e.department_id(+) = d.department_id
-- SQL1999方式 SELECT e.last_name, d.department_name FROM employees e RIGHTOUTERJOIN departments d ON (e.department_id = d.department_id)
满外连接
1 2 3 4 5
-- 满外连接 SELECT e.last_name, e.department_id, d.department_name FROM employees e FULLOUTERJOIN departments d ON (e.department_id = d.department_id)