内连接:合并具有同一列的两个以上的表的行,结果集中不包含一个表与另一个表不匹配的行。以下为左外连接。内连接分为:等值连接和非等值连接
外连接分为:两个表在连接过程中除了返回满足连接条件的行以外还返回左(或右)表中不满足连接的行,这种连接成为左(或右)外连接。没有匹配的行时,结果表中相应的列为空(NULL),外连接的WHERE子句条件类似与内连接,但外连接条件中没有匹配行的表的列后面要加外连接运算符,即用圆括号括起来的加号(+)。左外连接和右外连接
以下范例使用的表结构如下:
创建以上表对应的sql语句:
(1)
ALTER TABLE departments DISABLE CONSTRAINT DEPT_MGR_FK; ALTER TABLE job_history DISABLE CONSTRAINT JHIST_EMP_FK; DROP TRIGGER secure_employees; DROP TRIGGER update_job_history; DROP PROCEDURE add_job_history; DROP PROCEDURE secure_dml; DELETE FROM employees WHERE manager_id IN (108, 114, 120, 121, 122, 123, 145, 146, 147, 148); DELETE FROM employees WHERE employee_id IN (114, 120, 121, 122, 123, 145, 146, 147, 148, 196, 197, 198, 199, 105, 106, 108, 175, 177, 179, 203, 204); DELETE FROM locations WHERE location_id NOT IN (SELECT DISTINCT location_id FROM departments); DELETE FROM countries WHERE country_id NOT IN (SELECT country_id FROM locations); DELETE FROM jobs WHERE job_id NOT IN (SELECT job_id FROM employees); DELETE FROM departments WHERE department_id NOT IN (SELECT DISTINCT department_id FROM employees WHERE department_id IS NOT NULL); UPDATE departments SET manager_id = 124 WHERE department_id = 50; UPDATE departments SET manager_id = 149 WHERE department_id = 80; DELETE FROM locations WHERE location_id IN (2700, 2400); UPDATE locations SET street_address = '460 Bloor St. W.', postal_code = 'ON M5S 1X8' WHERE location_id = 1800; ALTER TABLE departments ENABLE CONSTRAINT DEPT_MGR_FK; CREATE TABLE job_grades (grade_level VARCHAR2(3), lowest_sal NUMBER, highest_sal NUMBER); INSERT INTO job_grades VALUES ('A', 1000, 2999); INSERT INTO job_grades VALUES ('B', 3000, 5999); INSERT INTO job_grades VALUES('C', 6000, 9999); INSERT INTO job_grades VALUES('D', 10000, 14999); INSERT INTO job_grades VALUES('E', 15000, 24999); INSERT INTO job_grades VALUES('F', 25000, 40000); INSERT INTO departments VALUES ( 190 , 'Contracting' , NULL , 1700 ); COMMIT;