1 #添加筛选 2 #查询有奖金的员工名,部门名 3 SELECT last_name,department_name,`commission_pct` 4 FROM employees AS e,`departments` AS d 5 WHERE `commission_pct`IS NOT NULL 6 AND e.`employee_id`=d.`department_id` 7 8 #查询城市名中第二个字符为o的部门名和城市名 9 SELECT department_name,`city` 10 FROM departments AS d,locations AS l 11 WHERE l.`location_id`=d.`location_id` 12 AND `city` LIKE '_o%' 13 14 #添加分组 15 #查询每个城市的部门个数 16 SELECT COUNT(*),city 17 FROM `locations` AS l,`departments` AS d 18 WHERE d.`location_id`=l.`location_id` 19 GROUP BY `city` 20 21 #查询有奖金的 每个部门的部门名和 部门的领导编号 和该部门的最低工资 22 23 SELECT department_name,d.`manager_id` ,MIN( salary ) 24 FROM `departments` AS d,`employees` AS e 25 WHERE d.`department_id`=e.`department_id` 26 AND `commission_pct` IS NOT NULL 27 GROUP BY `department_name`,d.`manager_id`; 28 29 #添加排序 30 #查询每个工种的工种名,员工个数,按员工个数降序 31 SELECT `job_title`,COUNT(*) 32 FROM `jobs`,`employees` e 33 WHERE jobs.`job_id`=e.`job_id` 34 GROUP BY `job_title` 35 ORDER BY COUNT(*) DESC; 36 37 #三表连接 38 #查询员工名,部门名,城市 39 SELECT last_name,department_name,city 40 FROM `employees`AS e,`departments`AS d,`locations` AS l 41 WHERE e.`department_id`=d.`department_id` 42 AND l.`location_id`=d.`location_id` 43 44 #---------------------------------------------------------------- 45 #多表等值连接的结果为多表的交集 46 # 47 # 48 #---------------------------------------------------------------- 49 50 /*非等值连接 51 52 53 */ 54 #查询员工的工资和工资级别 55 SELECT `salary`,`grade_level` 56 FROM `job_grades`AS jl,`employees`AS e 57 WHERE `salary`<`highest_sal`AND`salary`>`lowest_sal` 58 59 60 /*自连接 61 在一张表内查询连接 62 要给一张表取多个别名以区分 63 */ 64 #查询员工名和上级的名称 65 SELECT e.`last_name`AS 员工,m.`last_name`AS 上级 66 FROM employees AS e ,employees AS m 67 WHERE e.`manager_id`=m.`employee_id` 68 69 70 71 #--------进阶6 连接查询 --sql 99语法-----------# 72 #--------进阶6 连接查询 --sql 99语法-----------# 73 #--------进阶6 连接查询 --sql 99语法-----------# 74 #--------进阶6 连接查询 --sql 99语法-----------# 75 /* 76 支持的连接类型 77 内连接 inner 等值连接 非等值连接 自连接 78 外连接( 79 左外 left, 80 右外 right, 81 全外 full) 82 交叉连接 cross 83 84 select 查询列表 85 from 表1 别名 [连接类型] 86 join 表2 别名 87 on 连接条件 88 [where 筛选条件] 89 [group by] 90 [having] 91 [order by] 92 93 */ 94 /* 95 inner 96 #----------------1、等值连接------------------------ 97 */ 98 99 #查询员工名,部门名 100 SELECT `last_name`,`department_name` 101 FROM `departments`AS d 102 INNER JOIN `employees`AS e 103 ON d.`department_id`=e.`department_id` 104 105 #添加筛选 106 #查询名字中包含e的员工名和工种名 107 SELECT `last_name`,`job_title` 108 FROM `employees` AS e 109 INNER JOIN `jobs` AS j 110 ON e.`job_id`=j.`job_id` 111 WHERE `last_name`LIKE '%e%' 112 113 #3.查询部门个数>3的城市名名和部门个数, (分组+筛选) 114 /* 115 先查询每个城市的部门个数, 116 再根据结果筛选出部门个数大于3的城市, 117 所以用having而不是where 118 */ 119 SELECT `city`,COUNT(*) 120 FROM `locations` l INNER JOIN `departments` d 121 ON l.`location_id`=d.`location_id` 122 #where count(*)>3 123 GROUP BY `city` 124 HAVING COUNT(*)>3 125 126 #4.查询哪个部门的部门员工个数>3的部门名和员工个数, 127 # 并按个数降序(排序) 128 129 SELECT `department_name`,COUNT(*) 130 FROM `employees` e INNER JOIN `departments` d 131 ON e.`department_id` = d.`department_id` 132 GROUP BY `department_name` 133 HAVING COUNT(*)>3 134 ORDER BY COUNT(*) DESC; 135 136 #5.查询员工名、部门名、工种名,并按部门名降序 137 138 SELECT `last_name`,`department_name`,`job_title` 139 FROM `employees` e 140 INNER JOIN `departments` d ON e.`department_id`=d.`department_id` 141 INNER JOIN `jobs` j ON j.`job_id`=e.`job_id` 142 ORDER BY `department_name` DESC; 143 144 /* 145 inner 146 #----------------2、非等值连接---------------- 147 */ 148 #查询工资级别 149 SELECT 150 `grade_level`, 151 `salary` 152 FROM 153 `employees` e 154 INNER JOIN `job_grades` j 155 ON e.`salary` BETWEEN j.`lowest_sal` 156 AND j.`highest_sal` 157 158 #查询工资级别个数》20的个数,并按工资级别进行降序 159 160 SELECT 161 `grade_level`, 162 COUNT(*) 163 FROM 164 `job_grades` j 165 INNER JOIN `employees` e 166 ON e.`salary` BETWEEN j.`lowest_sal` 167 AND j.`highest_sal` 168 GROUP BY `grade_level` 169 HAVING COUNT(*) >20 170 ORDER BY `grade_level` DESC ; 171 172 /* 173 inner 174 #----------------3、自连接---------------- 175 */ 176 177 #查询员工名和他的上级的名字 178 SELECT 179 e.last_name, 180 m.last_name 181 FROM 182 `employees` AS e 183 INNER JOIN `employees` AS m 184 ON e.`manager_id` = m.`employee_id` 185 186