2022.3.23学习总结

本文详细讲解了SQL99语法中的非等值连接操作,包括员工工资级别查询、自连接查找上下级关系,以及左外连接的应用。此外,文中涵盖了子查询的多种类型,如标量子查询和行子查询实例。通过实例演示,读者将理解如何利用子查询进行条件筛选和数据比较。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.sql99语法剩余内容

#2,非等值连接

#案例1:查询员工的工资级别
SELECT e.`salary`,j.`grade_level`
FROM employees AS e JOIN job_grades AS j
ON e.`salary` BETWEEN j.`lowest_sal` AND j.`highest_sal`;

#案例2:查询每个工资级别员工个数大于20的个数,并按照工资级别排序
SELECT COUNT(*),j.`grade_level`
FROM employees AS e JOIN job_grades AS j
ON e.`salary` BETWEEN j.`lowest_sal` AND j.`highest_sal`
GROUP BY j.`grade_level`
HAVING COUNT(*)>20
ORDER BY j.`grade_level` DESC;

#3.自连接

#查询员工名和其上级名,其中员工名包含k
SELECT e.`last_name` AS 员工名,m.`last_name` AS 上级名
FROM employees AS e JOIN employees AS m
ON e.`manager_id`=m.`employee_id`
WHERE e.`last_name` LIKE '%k%';

#二.外链接
/*
应用场景,实现一个表有,一个表没有的情况
1.特点:外连接的查询结果为主表中所有记录
      如果从表中有和它匹配的,则显示匹配的值
      如果从表中没有和它匹配的,则显示null
      外连接的查询结果等于内连接结果+主表中有而从表中没有的记录
2.左外连接,left左边是主表
  右外连接,right join右边的是主表
3.左外和右外交换两个表的顺序可以达到同样的效果

4.全外连接=内连接+表1NULL+表2NULL,sql99没有
*/
#左外连接

2.子查询部分内容

#子查询
/*
含义:出现在其他语句中的select语句,称为子查询或内查询
外部的查询语句,称为主查询或外查询
 
分类:
按子查询的出现位置:
         select后面:仅仅支持标量子查询
         from后面:支持表子查询
         where或having后面:支持标量子查询、列子查询、行子查询
         exists(相关子查询):表子查询
按结果集的行列数不同:
         标量子查询(结果集还有一行一列)
         列子查询(结果集只有一列多行)
         行子查询(结果集有一行多列)
         表子查询(结果集一般为多行多列)
*/

#一、where或having后面
/*1、标量子查询(单行子查询)
  2、列子查询
  3、行子查询(多列多行)
  
  特点:1、子查询放在小括号内
        2、子查询一般放在条件的右侧
        3、标量子查询,一般搭配单行操作符> < = <= >=
        4、列子查询,一般搭配多行操作符使用
        in any/some all
        5、子查询的执行优先于主查询,主查询的条件用到了子查询的结果
*/
#1,标量子查询
#案例1:谁的工资比Abel高?
SELECT *
FROM employees
WHERE salary >(
SELECT salary 
FROM employees 
WHERE last_name ='Abel'
);

#案例2:返回job_id与141号员工相同,salary比143号员工多的员工姓名,job_id和工资
SELECT last_name,job_id,salary
FROM employees
WHERE job_id=(SELECT job_id FROM employees WHERE employee_id=141)
AND salary>(SELECT salary FROM employees WHERE employee_id=143);

#案例3:返回公司工资最少的员工的last_name,job_id和salary
SELECT last_name,job_id,salary
FROM employees
WHERE salary=(SELECT MIN(salary) FROM employees);

#案例4:查询最低工资大于50号部门的最低工资的部门id和其最低工资
SELECT department_id,MIN(salary)
FROM employees
GROUP BY department_id
HAVING MIN(salary)>(
SELECT MIN(salary)
FROM employees
WHERE department_id=50
GROUP BY department_id);

3.明日计划,子查询剩余内容,联合查询,库、表相关操作

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值