首页 > 其他 > 详细

07链接查询

时间:2019-11-19 15:13:31      阅读:83      评论:0      收藏:0      [点我收藏+]
  1 #连接查询 
  2 /*
  3 含义:又称多表表查询,当查询的字段来自多表时,就会用到连接查询
  4 
  5 笛卡尔乘积现象:表1 有m行,表二有n行,结果=n*m行
  6 
  7 发生原因:没有有效的连接条件
  8 如何避免:添加有效的连接条件
  9 
 10 分类 :
 11     按年份:    
 12         aq192标准 :仅仅支持内链接
 13         aq199标准【推荐】:支持内链接 + 外连接(左外 + 右外) + 交叉连接
 14     按功能分类:
 15         内链接:
 16             等值连接
 17             费等值连接
 18             自连接
 19         外连接:
 20             左外连接
 21             右外连接
 22             全外连接
 23         叫擦连接
 24                 
 25 */
 26 
 27 SELECT    NAME ,boyName FROM boys,beauty
 28 
 29 WHERE beauty.boyfriend_id = boys.id;
 30 
 31 #一.sq92标准
 32 
 33 #1.等值连接
 34 /*
 35 1).夺标等值连接的结果为多表的交集部分
 36 2).n表连接至少需要n-1个连接条件
 37 3).多表的顺序没有要求
 38 4).一般需要为表其别名
 39 5).可以搭配前面介绍的字句使用 排序 分组 筛选
 40 */
 41 
 42 #案例1:查询女神对应的男神名
 43 SELECT NAME,boyName
 44 FROM boys,beauty
 45 WHERE beauty.boyfriend_id = boys.id;
 46 
 47 #案例2.查询员工名对应的部门名
 48 SELECT last_name,department_name 
 49 FROM employees,departments
 50 WHERE employees.department_id = departments.department_id;
 51 
 52 #2.为表其别名
 53 /*
 54 1).提高语句的简洁度
 55 2).区分多个重名字段
 56 注意:如果为表起了别名,则查询的字段就不能使用原来的字段
 57 */
 58 #查询员工名 工种名 工种号
 59 
 60 SELECT e.last_name,e.job_id,j.job_title
 61 FROM employees e,jobs j
 62 WHERE e.job_id = j.job_id;
 63 
 64 #3.加筛选
 65 
 66 #案例1:查询有奖金的员工名,部门名
 67 SELECT last_name,separtment_name,commission_pct
 68 FROM employees e,departments d
 69 WHERE e.department_id = d.department_id
 70 AND e.commission_pct IS NOT NULL;
 71 
 72 #案例2:查询城市名中第二个字符为o的 部门名和城市名
 73 
 74 SELECT department_name,city
 75 FROM departments d ,locatons l
 76 WHERE d.location_id = l.location_id
 77 AND city LIKE _o%;
 78 
 79 #4.加分组
 80 
 81 #案例1:查询每个城市的部门个数
 82 
 83 SELECT COUNT(*) 个数,city
 84 FROM department d,location l
 85 WHERE d.location_id = l.location_id 
 86 GROUP BY city;
 87 
 88 #案例2:查询有奖金的每个部门的部门名和部门领导编号和该部门最低工资
 89 
 90 SELECT department_name,d.manager_id,MIN(salary)
 91 FROM departmens d,employees e
 92 WHERE d.department_id=e.department_id
 93 AND commission_pct IS NOT NULL
 94 GROUP BY department_name,manager_id;
 95 
 96 #5.加排序
 97 
 98 #案例1:查询每个工种的工种名和员工个数,并且按员工个数降序
 99 
100 SELECT job_title,COUNT(*)
101 FROM employees e,jobs j
102 WHERE e.job_id = j.job_id
103 GROUP BY job_title
104 ORDER BY COUNT(*) DESC;
105 
106 #7.三表连接
107 
108 #案例:查询员工名 部门名和所在的城市
109 
110 SELECT last_name,deparment_name,city 
111 FROM employees e,department d ,locations l
112 WHERE e.department_id = d.department_id
113 AND d.location_id = l.location_id 
114 AND city LIKE s%
115 ORDER BY department_name DESC;
116 
117 #2.非等值连接
118 
119 #案例:查询员工工资和工资等级
120 
121 SELECT salary,grade_level 
122 FROM employees e,job_grades g
123 WHERE salary BETWEEN g.lowest_sal AND g.highest_sal
124 AND g.grade_level = A;
125 
126 #3.自连接 
127 
128 #案例:查询员工名和上级的名称
129 SELECT e.employees_id,e.last_name,m.employee_id,m.last_name
130 FROM employees e,employees m
131 WHERE e.,amager_id = employee_id;
132 
133 #二. sql99语法
134 /*
135 语法:
136     select 查询列表
137     from 表1 别名 【链接类型】
138     join 表2 别名
139     on 连接条件
140     【where 筛选条件】
141     【group by 分组】
142     【having 筛选条件】
143     【order by 排序列表】
144     
145 分类:
146     内联(☆):inner
147     外联
148         左外(☆):left 【outer】
149         左外(☆):right 【outer】
150         全外:full 【outer】
151 交叉链接;cross
152 */
153 
154 #1.内连接
155 /*
156 语法:
157     select 查询列表
158     from 表1 别名
159     inner join 表2 别名
160     on 链接条件;
161 分类:
162     等值链接
163     非等值链接
164     自连接
165 特点:
166     1)可以添加排序 分组 筛选
167     2)inner 可以省略
168     3)筛选条件放在where后面 链接条件放在on后面 提高分离性,便于阅读
169     4)inner join 链接和sql92语法中的等值链接效果是一样的,都是查询交集
170 */
171 
172 #1.等值连接
173 
174 #案例1.查询员工名 和部门名
175 
176 SELECT last_name,department_name
177 FROM employees e
178 INNER JOIN departments d
179 ON e.department_id = d.department_id;
180 
181 #案例2.查询名字中包含e员工名和工种名(添加筛选)
182 
183 SELECT last_name,job_title
184 FROM employees e
185 INNER JOIN jobs j
186 ON e.job_id = j.job_id
187 WHERE e.last_name LIKE %e%;
188 
189 #案例3 查看部门个数>3的城市名和部门个数,(添加分组+ 筛选)
190 
191 SELECT city ,COUNT(*) 部门个数
192 FROM departments d
193 INNER JOIN locations l
194 ON d.location_id = l.location_id
195 GROUP BY city 
196 HAVING COUNT(*)>3;
197 
198 #案例4:查询那个部门的员工个数大于3的部门名和员工个数,并降序(添加排序)
199 #1)查询每个部门员工个数
200 
201 SELECT COUNT(*),department_name
202 FROM employees e 
203 INNER JOIN departments d
204 HAVING COUNT(*)>3
205 ORDER BY COUNT(*) DESC;
206 
207 
208 #案例5:查询员工名 部门名 工种名 并按照部门名降序
209 
210 SELECT last_name ,department_name,job_title
211 FROM employees e
212 INNER JOIN department d ON e.department_id = d.department_id
213 INNER JOIN jobs j ON e.job_id = j.job_id
214 ORDER BY department_name DESC;
215 
216 #二.非等值连接
217 
218 #查询员工工资级别
219 
220 SELECT salary,grade_level
221 FROM employees e
222 JOIN job_grades g
223 ON e.salary BETWEEN g.lowest_sal AND g.highest_sal
224 GROUP BY grade_level
225 HAVING COUNT(*)>20
226 ORDER BY grade_level DESC;
227 
228 
229 #三.自连接
230 
231 #案例:查询员工姓名中包含字符k的员工名字 、上级名字
232 
233 SELECT e.last_name,m.last_name
234 FROM employees e
235 JOIN employees m
236 ON e.manager_id = m.employee_id
237 WHERE e.last_name LIKE %k%;
238 
239 
240 #外连接
241 
242 /*
243 应用:
244     用于查询一个表有 另一个表没有的记录
245 特点:
246     1.外连接的查询结果为主表中的所有记录
247         如果从表中又和他匹配的,则显示匹配的值
248         如果从表中没有和它匹配的 则显示NULL
249         外连接的查询结果 = 内连接结果 + 主表中有而从表中没有的记录
250     2.左外连接,left  join 左边是主表
251        右外连接,right join 右边是主表
252     3.左外和右外交换两个表的顺序 可以实现同样的效果
253     4.全外连接=内连接的结果+表1中有但表2中没有+表2中有但表1中没有
254 */
255 
256 #引入
257 
258 SELECT b.name,bo.*
259 FROM beauty b
260 LEFT OUTER JOIN boys bo
261 ON b.boyfriend_id = bo.id
262 WHERE bo.id IS NULL;
263 
264 
265 #案例1:查询那个部门没有员工
266 #左外
267 
268 SELECT d.*,e.employee_id
269 FROM departments d
270 LEFT OUTER JOIN employees e
271 ON d.department_id = e.department_id 
272 WHERE e.employee_id IS NULL;
273 
274 
275 #右外 
276 
277 SELECT d.*,e.employee_id
278 FROM employees e
279 LEFT OUTER JOIN departments d
280 ON d.department_id = e.department_id 
281 WHERE e.employee_id IS NULL;
282 
283 #全外 (不支持)
284 
285 
286 #交叉连接
287 
288 SELECT b.*,bo.*
289 FROM beauty b
290 CROSS JOIN boys bo;

DQL

07链接查询

原文:https://www.cnblogs.com/zhengyinboke/p/11889534.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!