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