细枝末节
1. 内连贯的INNER和外连贯的OUTER能够省略2. 筛选条件放在WHERE后,连贯条件放在ON后,进步分离性,便于浏览3. 外连贯查问的后果集为主表中所有记录4. LEFT和RIGHT作用是指定主表5. 全连贯是将两表都作为主表6. 穿插连贯后果集是笛卡尔乘积
格局
SELECT 查问列表FROM 表1 别名 [连贯类型]JOIN 表2 别名ON 连贯条件[WHERE 筛选条件][GROUP BY 分组][HAVING 筛选条件][ORDER BY 排序列表]
连贯类型:
1. 内连贯: IINER2. 外连贯: 左外连贯: LEFT [OUTER] 右外连贯: RIGHT [OUTER] 全外连贯: FULL [OUTER]3. 穿插连贯: CROSS
内连贯
格局
SELECT 查问列表FROM 表1 别名INNER JOIN 表2 别名ON 连贯条件
分类
1. 等值连贯2. 非等值连贯3. 内连贯
等值连贯
示例
/* 查问员工名,部门名 */SELECT e.name, d.nameFROM emp eINNER JOIN dept dON e.dept_id = d.id
/* 查问名字中蕴含e的员工名和工种名 */SELECT e.name, j.nameFROM emp eINNER JOIN job jON e.job_id = j.idWHERE e.name LIKE '%e%';
/* 查问部门个数>3的城市名和部门个数 */SELECT city, COUNT(*)FROM location lINNER JOIN dept dON d.loc_id = l.idGROUP BY cityHAVING COUNT(*)>3
/* 查问员工名,部门名,工种名,并按部门降序 */SELECT e.name, d.name, j.nameFROM emp eINNER JOIN dept d ON e.dept_id = d.idINNER JOIN job j ON e.job_id = j.idORDER BY d.name DESC;
非等值连贯
示例
/* 查问员工的工资级别 */SELECT salry, gradeFROM emp eINNER JOIN salary_grade gON e.salary BETWEEN g.lowwest_sal AND g.highest_sal;
自连贯
示例
/* 查问姓名中蕴含k的员工姓名及其下属姓名 */SELECT e.name, m.nameFROM emp eINNER JOIN emp mON e.mng_id = m.idWHERE e.name LIKE '%k%';
外连贯
示例
/* 查问男朋友不在男生表的女生名 *//* 第一种形式:左外连贯 */SELECT w.name, m.*FROM womwn wLEFR OUTER JOIN man mON w.cp_id = m.idWHERE m.name IS NULL;/* 第二种形式:右外连贯 */SELECT w.name m.*FROM man mRIGHT OUTER JOIN woman wON w.cp_id = m.idWHERE m.nae IS NULL;