欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

MySQL数据库基础操作练习(二)连接查询

程序员文章站 2024-03-04 23:12:18
...

MySQL数据库基础操作练习(二)连接查询

数据导入
打开数据库连接,右键——>运行SQL文件,选择SQL文件导入,出现
MySQL数据库基础操作练习(二)连接查询
时,点击关闭,如果选择“开始”,会重新运行该SQL文件。

1、多表连接
连接查询:查询字段来自多张表
select 字段1,字段2
from 表1,表2
where条件
1)等值连接查询
特点:表的先后顺序没有要求;至少需要n-1个连接条件;可以使用别名,防止歧义;可以添加分组、排序、筛选
例如:

select name,age from information,garde  //从information、grade表中查询name、age
where information.id=garde.id  //两张表连接,n-1个条件
--为两张表分别起了一个别名,提高语句简洁度和效率
--防止歧义,该例中两张表都有id字段,使用i.id   g.id 避免歧义
select name,age from information i,garde g
where i.id=g.id     
select name,age from information i,garde g
where i.id=g.id 
--添加筛选条件
and tall>160  
--分组
group by sex
--排序
order by i.grade DESC

2)非等值连接查询
两张表没有相同项或者相同项不能使用
使用between and 连接

SELECT salary,grade_level
FROM employees e,job_grades g
WHERE e.`salary` BETWEEN g.`lowest_sal` AND g.`highest_sal`;

2、内连接、外连接
1)内连接
使用join on 连接
select 字段1,字段2 from 表12
join 表2 on 条件

效果跟等值连接一样;表的位置可以互换;可以起别名;可以添加筛选分组排序;至少n-1个条件

select name,age from information i
join garde g on i.id=g.id 

2)外连接
select 字段1,字段2 from 表1
left(或者right) join 表2
on 条件

查询结果:内连接的结果+主表中有但从表没有的记录(从表的字段用null填充)
左连接与右连接区别:左连接左边是主表,右连接右边是主表
查询的字段来自哪张表,该张表即为主表
查询主表中有但从表中,没有的记录
如:

select name,garde from information i
left join garde g on i.id=g.id
where g.garde>60

3、子查询
嵌套在另一个查询中的查询语句称为子查询,外部的查询称为主查询
select 字段1,字段2 from 表1
where ** in(select 字段1 from 表2)

子查询在括号内;放在条件右侧;先子后主查询顺序

1)单行子查询
结果只有一个,使用单行操作符(> < >= <= = <>)
2)多行子查询
使用多行操作符(any、all、in、not in)
类似俄罗斯套娃,一层套一层
例:
单行子查询

--谁的工资比Abel高
--①先查询Abel的工资
--②查询满足 工资>①的结果
--①
SELECT salary FROM employees WHERE last_name = 'Abel'
--②
SELECT * FROM employees	WHERE salary>SELECT salary FROM employees WHERE last_name = 'Abel'

多行子查询

--查询location_id是1400或1700的部门中的所有员工姓名
--①查询location_id是1400跟1700的部门编号
--查询部门编号满足①的结果的所有员工的姓名
--①
SELECT department_id FROM departments WHERE location_id IN(1400,1700)
--②
SELECT last_name FROM employees WHERE department_id IN(SELECT department_id FROM departments WHERE location_id IN(1400,1700))