数据库--day5

  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 

猜你喜欢

转载自www.cnblogs.com/yasina/p/12792570.html
今日推荐