重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
Hello,写的语言格式有些丑
创新互联客户idc服务中心,提供BGP机房服务器托管、成都服务器、成都主机托管、成都双线服务器等业务的一站式服务。通过各地的服务中心,我们向成都用户提供优质廉价的产品以及开放、透明、稳定、高性价比的服务,资深网络工程师在机房提供7*24小时标准级技术保障。
练习题目:
3、多表连接(等值连接)
①案例1 :查询员工名、部门名
②为表起别名
# ③添加筛选条件
# 案例:查询 工资5000 的工种名和员工名、工资
④添加分组和筛选
#01 案例:查询每个部门的员工个数和部门名
⑤排序
#01 案例:查询每个部门的员工个数和部门名
⑥ 三表连接
# 案例:查询员工名、部门名和所在城市
4、多表连接(等值连接)练习
传统模式的多表连接
1. 显示所有员工的姓名,部门号和部门名称。
2. 查询90 号部门员工的job_id 和90 号部门的location_id
3. 选择所有有奖金的员工的last_name , department_name , location_id , city
----------- 三表连查
4. 选择city 在Toronto 工作的员工的
last_name , job_id , department_id , department_name ----------- 三表连查
5. 查询每个工种、每个部门的部门名、工种名和最低工资 ----------- 三表连查
6. 查询每个国家下的部门个数大于2 的国家编号
5、非等值查询
2.非等值连接
#案例1:查询员工的工资以及对应的工资级别
#案例2:查询名字中第三个字符为a,第五个字符为e的员工的工资以及对应的工资级别
6、内连接
#案例1 :查询员工名、部门名
案例2:查询有奖金的员工名、部门名
案例3:查询城市名、员工名和部门名
9、练习
一、查询编号3的女神的男朋友信息,如果有则列出详细,如果没有,用null填充
#二、查询哪个城市没有部门
三、查询部门名为SAL或IT的员工信息
#四、选择指定员工的姓名,员工号,以及他的管理者的姓名和员工号,结果类似于下面的格式
/*
employees Emp# manager Mgr#
kochhar 101 king
100
*/
10、单行子查询
案例1:谁的工资比Abel高
①查询Abel的工资
②查询员工的信息满足工资①的结果
案例2:题目:返回job_id与141号员工相同,salary比143号员工多的员工 的姓名,job_id 和工资
①查询141的job_id
②查询143的salary
③查询 姓名,job_id 和工资,满足job_id=①并且salary②
案例3:返回公司工资最少的员工的last_name,job_id和salary
①查询最低工资
②查询员工的last_name,job_id和salary满足 salary=①
案例4:查询最低工资大于50号部门最低工资的部门id和其最低工资
①查询50号部门的最低工资
②查询每个部门的最低工资
③筛选最低工资①
11、多行子查询
二、多行子查询
案例1:返回location_id是1400或1700的部门中的所有员工姓名
①查询location_id是1400或1700的部门编号
②查询department_id满足①结果的员工姓名
案例2:返回其它部门中比job_id为‘IT_PROG’部门任意工资低的员工的员
工号、姓名、job_id 以及salary
①查询job_id为‘IT_PROG’部门工资
②返回其它部门中,工资any ①的结果
题目:返回其它部门中比job_id为‘IT_PROG’部门所有工资都低的员工
#的员工号、姓名、job_id 以及salary
12、子查询练习题
#1. 查询和Zlotkey 相同部门的员工姓名和工资
#2. 查询工资比公司平均工资高的员工的员工号,姓名和工资。
#①查询公司平均工资
② 查询工资①的员工的员工号,姓名和工资。
#3. 查询各部门中工资比本部门平均工资高的员工的员工号, 姓名和工资
①查询各部门的平均工资
②查询员工的员工号, 姓名和工资,满足本部门并且工资①
4. 查询姓名中包含字母u 的员工在相同部门的员工的员工号和姓名
①查询姓名中包含字母u的员工的部门
② 部门=①的员工的员工号和姓名
5. 查询在部门的location_id 为1700 的部门工作的员工的员工号
①查询loaction_id =1700的部门编号
② 查询员工号,满足部门号=①
#6. 查询管理者是King 的员工姓名和工资
①查询员工名是king的编号
#② 查询员工姓名和工资,领导的编号=①
#7. 查询工资最高的员工的姓名,要求first_name 和last_name 显示为一列,列名为 姓. 名
①查询最高工资
②查询姓名,工资=①
14、子查询巩固练习
# 1 、查询工资最低的员工信息
#①查询公司的最低工资
②查询员工信息,满足 salary=①
2. 查询平均工资最低的部门信息
①查询每个部门的平均工资
②查询①结果中avg(salary) 字段中的最低值
# ③查询部门编号,满足平均工资= ②结果
④查询部门信息,满足 department_id= ③
3*. 查询平均工资最低的部门信息和该部门的平均工资
4. 查询平均工资最高的 job 信息
①查询每个job的平均工资
②查询①结果中的 avg(salary)的最高值
③查询每个工种的平均工资,满足 平均工资=②
④工种表和③连接 , 查询平均工资最高的 job 信息
# 5. 查询平均工资高于公司平均工资的部门有哪些?
#①查询公司的平均工资
②查询每个部门的平均工资,并且平均工资①
6. 查询平均工资最高的部门的 manager 的详细信息:
①查询平均工资最高的部门编号
②查询部门编号=①的manager的详细信息
定义:查询中嵌套查询就是子查询
子查询的本质:
找出工资大于Mark的员工名字和工资
分析:
1.查询出Mark的工资是多少
2.查询出高于1450工资的人
整合成子查询
子查询的特点:
为什么相关子查询的效率极其低下?
结论:
性能排序/优先使用
关联/分组查询无关子查询相关子查询
1. 找出工资比'BLAKE'多的员工
2. 列出薪金高于公司平均薪金的所有员工,所在部门
3. 查询出工资最低的员工的姓名,工作,工资
4. 列出薪金高于在部门30工作的所有员工的薪金的员工姓名和薪金、部门名称
或者
5.查找出职位和'MARTIN' 或者'SMITH'一样的员工的平均工资
6. 列出薪金比“BLAKE”或“WARD”多的所有员工的编号、姓名、部门名称、其领导姓名。
7. 找出各个部门中大于他所在部门平均工资的员工名和工资
8. 查找出收入(工资加上奖金),下级比自己上级还高的员工编号,员工名字,员工收入
9. 得到每个月工资总数最少的那个部门的部门编号,部门名称,部门位置
10. 查找出部门10和部门20中,工资最高第3名到工资第5名的员工的员工名字,部门名字,部门位置
11. 以职位分组,找出平均工资最高的两种职位
12. 查询出各部门总薪资,平均薪资,总人数,显示部门编号,部门名称与部门总薪资(没有员工的部门也需要统计)
你这个也没有列个表结构啊,不会是因为我在pc版看不到你的题目内容?不过估计表结构都差不多,比如是这样:
表名:tb
字段:name(姓名),gender(性别)、salary(工资)
那么sql的写法就是:
select gender, sum(salary) from tb group by gender;
这样就可以了
首先需要确认几个问题或者说条件:
1、所有人员从属于三级部门
2、所有分支终端都是三级部门
这样的话语句是非常好写的,使用表内联合查询就好,不需要使用连接查询语句如下,具体字段我就不写了,自己参悟吧;
SELECT u.*,a.`name`,b.`name`,c.`name` FROM yonghu u,bumen a,bumen b,bumen c
WHERE a.`parentid` = b.`departid` AND b.`parentid` = c.`departid` AND a.`departtype` = 3 AND
b.`departtype` = 2 AND c.departtype = 1 AND u.uid = a.departid;
如果不符合上述条件的话 就需要加入逻辑判断了,比较复杂,下班了 没有心情写!
mysql分组查询group by
select sum(薪水) from 表 group by 部门字段
mysql两个表关联的实际收入
1. 高级SQL语句INNER JOIN 非常实用在接触这个语句之前 我要到数据库查询不同表的 内容我一般需要执行2次sql语句 循环2次。
2. 而现在有了这个语句 可以简化成只执行1次语句 循环一次
$result = mysql_query(”
SELECTstates.state_id,states.state_name,cities.city_id,cities.city_name,cities.region_idFROM `states`INNER JOIN citiesON states.state_id=cities.state_idWHERE states.countrycode=’nl’”
);
3. 我来解说一下,一个数据库中 2个表名 states and cities
states 目前我所需要的内容是state_id 和 state_name
cities 目前我所需要的内容是 city_id 和 city_name 和region_id
4. 为什么特意设定所需要的字段而不全部显示出来呢?因为 sql服务器 执行的sql语句结果越长 解析时间越长 执行时间就长套一句我们老板说的话 你这样就等于kill sql server
5. 好了关键的地方来了INNER JOIN citiesINNER JOIN 这个命令是将不同表加入到执行中
6. 这样就可以节省sql语句了
7. ON states.state_id=cities.state_id 这句话好像是重叠在一起 应为2个表这个字段都是相同的 具体效果自己去试验一下。