当我们需要的数据需从两张及以上的表中查询出来时,这时就需要连接查询。

    语法:

    1. SELECT
    2. <字段>
    3. FROM
    4. <表名>
    5. WHERE
    6. <表名 1 >.<字段> = <表名 2 >.字段;


    例子:

    1. # 查询员工和对应的部门名。
    2. SELECT
    3. last_name,
    4. department_name
    5. FROM
    6. employees,
    7. departments
    8. WHERE
    9. employees.department_id = departments.department_id;
    10. # 查询员工名、工种号、工种名。
    11. SELECT
    12. last_name,
    13. employees.job_id,
    14. job_title
    15. FROM
    16. employees,
    17. jobs
    18. WHERE
    19. employees.job_id = jobs.job_id;
    20. # 查询有奖金的员工名、部门名。
    21. SELECT
    22. last_name,
    23. department_name
    24. FROM
    25. employees,
    26. departments
    27. WHERE
    28. departments.department_id = employees.department_id
    29. AND employees.commission_pct IS NOT NULL;
    30. # 查询城市名中第二个字符为 o 的部门名和城市名。
    31. SELECT
    32. department_name,
    33. city
    34. FROM
    35. departments,
    36. locations
    37. WHERE
    38. departments.location_id = locations.location_id
    39. AND city LIKE '_o%';
    40. # 查询每个城市的部门个数。
    41. SELECT
    42. COUNT(*) AS 数量,
    43. city
    44. FROM
    45. locations,
    46. departments
    47. WHERE
    48. locations.location_id = departments.location_id
    49. GROUP BY
    50. city;
    51. # 查询有奖金的每个部门的部门名和部门的领导编号和该部门的最低工资。
    52. SELECT
    53. department_name,
    54. departments.manager_id,
    55. MIN( salary )
    56. FROM
    57. departments,
    58. employees
    59. WHERE
    60. departments.department_id = employees.department_id
    61. AND employees.commission_pct IS NOT NULL
    62. GROUP BY
    63. department_name,
    64. departments.manager_id;
    65. # 查询每个工种的工种名和员工的个数,并且按员工的个数降序。
    66. SELECT
    67. job_title,
    68. COUNT(*)
    69. FROM
    70. employees,
    71. jobs
    72. WHERE
    73. employees.job_id = jobs.job_id
    74. GROUP BY
    75. job_title
    76. ORDER BY
    77. COUNT(*) DESC;
    78. # 查询员工名、部门名和所在的城市。
    79. SELECT
    80. last_name,
    81. department_name,
    82. city
    83. FROM
    84. employees,
    85. departments,
    86. locations
    87. WHERE
    88. employees.department_id = departments.department_id
    89. AND departments.location_id = locations.location_id;
    90. # 查询员工的工资和工资级别(非等值连接)。
    91. SELECT
    92. salary,
    93. grade_level
    94. FROM
    95. employees,
    96. job_grades
    97. WHERE
    98. salary BETWEEN job_grades.lowest_sal
    99. AND job_grades.highest_sal;


    自连接,连接的两张表都是同一张表。是一种特殊的等值连接。

    例子:

    1. # 自连接
    2. # 查询员工名和上级的名称
    3. SELECT
    4. e.employee_id,
    5. e.last_name,
    6. m.employee_id,
    7. m.last_name
    8. FROM
    9. employees AS e,
    10. employees AS m
    11. WHERE
    12. e.manager_id = m.manager_id;


    参考: