day003-----------非等值查询 ,内外连接,单行多行子查询

mysql 专栏收录该内容
5 篇文章 0 订阅

多表连接之—非等值连接

#2.非等值连接
#案例1:查询员工的工资以及对应的工资级别
SELECT salary,grade_level
FROM employees e,job_grades g
WHERE e.`salary` BETWEEN g.`lowest_sal` AND
g.`highest_sal`;

内连接

join连接 sql99语法
分类:
内连接:[inner] join on
外连接:
左外连接 left 【outer】 join on
右外连接 right 【outer】 join on
全外连接 full 【outer】 join on ,mysql中不支持!!! sqlserver 和oracle 没有问题
语法:
select 字段1,字段2,…
from 表1
inner join 表2 on 连接条件;

#案例2:查询有奖金的员工名、部门名
SELECT last_name,department_name
FROM departments d
 JOIN employees e ON e.`department_id`=d.`department_id`
 WHERE commission_pct IS NOT NULL;

外链接

语法
select 字段1,字段2,…
from 表1
left|right 【outer】 join 表2
on 连接条件

#案例1:查询没有男朋友的女神名称
USE girls;
SELECT `name`,boyName
FROM beauty b
LEFT OUTER JOIN boys bo
ON b.`boyfriend_id`=bo.`id`
WHERE bo.id IS NULL;

单行子查询

内部类类似
语法
select 字段1,字段2
from 表1
where Id in( select 字段1 from 表2)
特点或者说注意事项:
1、子查询放在小括号内
2、放在条件右侧
3、子查询优先于主查询执行
分类:
单行子查询:子查询的结果只有一个值,使用单行操作符(> < >= <= = <>)
多行子查询:使用多行操作符(any、all、in、not in)

#1.单行子查询
#案例1:谁的工资比Abel高
      #查询Abel的工
 SELECT salary FROM employees 
 WHERE last_name = 'Abel'
         #查询员工的信息满足工资>①的结果
 SELECT * FROM employees
 WHERE salary>(
 SELECT salary FROM employees 
  WHERE last_name = 'Abel'
         );

多行子查询

#二、多行子查询
#案例1:返回location_id是1400或1700的部门中的所有员工姓名
         #查询location_id是1400或1700的部门编号
 SELECT department_id FROM departments
 WHERE location_id IN(1400,1700)
         #查询department_id满足①结果的员工姓名
SELECT last_name FROM employees
 WHERE department_id IN(
SELECT department_id FROM departments
WHERE location_id IN(1400,1700)
  • 1
    点赞
  • 0
    评论
  • 0
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

©️2022 CSDN 皮肤主题:1024 设计师:我叫白小胖 返回首页

打赏作者

dai1770359801

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值