连接查询sql192

root
233
文章
0
评论
2021年4月13日19:25:53 评论 3262字阅读10分52秒

连接查询

又叫多表查询,当查询的字段来自多个表时,

等值连接

使用第一张表 的每一行,匹配第二章表的每一行,通过连接条件筛选,满足条件筛选出来

1.查询女神名和对应的男神名

SELECT name,boyname
FROM boys,beauty
WHERE beauty.boyfriend_id= boys,id;

 

2.查询部门名和对应的部门名

SELECT last_name,deparyment_name
FROM employees,departments
WHERE employees.department_id=departments.department_id;

 

 

为表起表名

1.查询员工名,工种号,工种号

SELECT last_name,p1.job_id,job_title
FROM employees p1,jobs p2
WHERE p1.job_id=p2.job_id

 

添加筛选

1.查询有奖金的员工名,部门名

SELECT last_name,deparment_name,commission_pct
FROM employees p1,departments p2
WHERE p1.department_id=p2.department_id
AND p1.commission_pct IS NOT NULL;

执行

Russell	        Sal	0.4
Partners	        Sal	0.3
Errazuriz	        Sal	0.3
Cambrault	Sal	0.3
Zlotkey	        Sal	0.2
Johnson 	        Sal	0.1

2.查询城市名中第二个字符为o的部门名和城市名

SELECT deparyment_name,city
FROM deparyment p1,locations p2
WHERE p1.location_id =p2.location_id
AND city LIKE '_o%';

执行

IT	       Southlake
Shi	        South San Francisco
Mar     	Toronto
Hum	London

添加分组

1.查询每个城市的部门个数

SELECT COUNT(*) 个数,city
FROM departments p1,locations p2
WHERE p1.location_id =p2.location_id
GROUP BY city

执行

1	London
1	Munich
1	Oxford
21	Seattle
1	South San Francisco
1	Southlake
1	Toronto

2.查询有奖金的每个部门的部门名和部门的领导编号和该部门的最低工资

SELECT department_name,p1.manager_id,MIN(salary)
FROM departments p1,employeees p2
WHERE p1.department_id=p2.department_id
AND commission_pct IS NOT NULL
GROUP BY department_name,p1.manager_id

 

 

3.查询每个工种的工种名和员工个数,并且按员工个数降序

SELECT job_title,COUNT(*)
FROM employees p1.jobs p2
WHERE p1.job_id=p2.job_id
GROUP BY job_title
ORDER BY COUNT(*) DESC;

 

三表连接

1.查询员工名,部门名,所在的城市

SELECT last_name,department_name,city
FROM employees p1,departments p2,locations p3
WHERE p1.department_id = p2.department_id
AND p2.location_id = p3.location_id;

结果

Whalen	Adm	Seattle
Hartstein	Mar         	Toronto
Fay	        Mar	        Toronto
Raphaely	Pur	        Seattle
Khoo	Pur	        Seattle
Baida	Pur	        Seattle
Tobias	Pur	        Seattle
Himuro	Pur	        Seattle
Colmenares	Pur	Seattle
Mavris	Hum	London
Weiss	Shi	        South San Francisco

添加筛选

SELECT last_name,department_name,city
FROM employees p1,departments p2,locations p3
WHERE p1.department_id = p2.department_id
AND p2.location_id = p3.location_id
AND city LIKE 'S%';

结果

Hunold	IT	Southlake
Ernst	IT	Southlake
Austin	IT	Southlake
Pataballa	IT	Southlake
Lorentz	IT	Southlake
Weiss	Shi	South San Francisco
Fripp	Shi	South San Francisco

 

非等值连接

 

1.查询员工的工资和工资级别

job_grades工资级别表

employees员工工资表

SELECT salary,grade_level
FROM job_grades p1,employees p2
WHERE salary BETWEEN p1.`lowest_sal` AND p1.`highest_sal`;

结果

24000	E
17000	E
17000	E
9000	C
6000	C
4800	B
4800	B

2.筛选,只看A级别的

SELECT salary,grade_level
FROM job_grades p1,employees p2
WHERE salary BETWEEN p1.`lowest_sal` AND p1.`highest_sal`
AND p1.`grade_level`='A';

结果

2900	A
2800	A
2600	A
2500	A
2700	A
2400	A
2200	A
2800	A
2500	A

 

自连接【自己连接自己】

1.查询员工名和上级的名称

SELECT
p1.last_name,
p1.employee_id,
p2.last_name,
p2.employee_id
FROM employees p1,employees p2
WHERE p1.`manager_id`=p2.`employee_id`;

练习:

1.显示员工表的最大工资,工资平均值

select MAX(salary),AVG(salary)
from employees;

2.查询员工表的empyee_id,job_id,last_name,按department_id降序,salary升序

select employee_id,job_id,last_name
from employees
ORDER BY department_id DESC,salary ASC
206	AC_ACCOUNT	Gietz
205	AC_MGR	Higgins
113	FI_ACCOUNT	Popp
111	FI_ACCOUNT	Sciarra
112	FI_ACCOUNT	Urman
110	FI_ACCOUNT	Chen
109	FI_ACCOUNT	Faviet

3.查询员工表的job_id中包含a和e的,并且a在e前面

SELECT job_id
FROM employees
WHERE job_id  LIKE '%a%e%'
AD_PRES
SA_REP
SA_REP
SA_REP
SA_REP
SA_REP

4.

已知表student,里面有id(学号),name(名字),gradeid(年纪编号)

已知表grade,里面有id(年纪编号),name(年纪名)

已知表result,里有id,score,studentNo(学号)

要求查询,姓名,年纪名,成绩

SELECT p1.name,p2.name,p3.score
FROM student p1,grade p2,result p3
WHERE p1.`gradeid`=p2.`id`
AND p1.`id`=p3.`studentNo`

5.显示当前日期,以及去前后空格,截取子字符串的函数

select now();
select trim(字符 from '')

 

 

继续阅读
weinxin
我的微信
这是我的微信扫一扫
  • 文本由 发表于 2021年4月13日19:25:53
  • 除非特殊声明,本站文章均为原创,转载请务必保留本文链接
Mysql 创建表 MySQL

Mysql 创建表

Mysql 创建表   Mysql创建数据库 CREATE DATABASE db_name //字符集 CHARACTER SET charset_name //校验规则 COLLATE ...
Mysql数据类型 MySQL

Mysql数据类型

Mysql数据类型   INT整形类型---属性 unsigned/signed 无符号/有符号 unsigned无符号,创建一个无符号的列 mysql> create table z...
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: