暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

【每日一练 012】 SQL : 单行子查询

原创 李美静 恩墨学院 2020-07-02
1283

1 子查询语法

SELECT select_list
FROM table
WHERE expr operator
(SELECT select_list
FROM table);

2 单行子查询

子查询是以一个子sql嵌套在主sql的形式体现的。子sql可以在select子句中体现,也可以在where,having,from子句中体现。
子sql和主sql的操作符能常是单行操作符(>,=,>=,<,<>,<=)和多行操作符(in,any,all,exists)。
如:
SELECT last_name, salary
FROM employees
WHERE salary >
(SELECT salary
FROM employees
WHERE last_name = ‘Abel’);
统计工资比Abel工资高的员工信息。

2.1 子查询规则

子sql需要用括号括起来;
子查询一般是放在比较符的右边作为比较条件,然而子查询可以出现在比较符的任意一边;
单行子查询使用单行操作符,多行子查询使用多行操作符

2.2 单行子查询要素

只能返回一行。使用单行比较操作符。
单行比较操作符:=,>,>=,<,<=,<>
如:
SELECT last_name, job_id, salary
FROM employees
WHERE job_id =
(SELECT job_id
FROM employees
WHERE last_name = ‘Taylor’)
AND salary >
(SELECT salary
FROM employees
WHERE last_name = ‘Taylor’);
统计和Taylor同一个工作岗位且工资和他一样的员工信息。
子查询中可以使用group分组函数
如:
SELECT last_name, job_id, salary
FROM employees
WHERE salary =
(SELECT MIN(salary)
FROM employees);
统计公司中工资最低的员工信息。
having子句中使用子查询
如:
SELECT department_id, MIN(salary)
FROM employees
GROUP BY department_id
HAVING MIN(salary) >
(SELECT MIN(salary)
FROM employees
WHERE department_id = 50);
以上查询哪个部门的最低工资大于50部门的最低工资。
SELECT job_id, AVG(salary)
FROM employees
GROUP BY job_id
HAVING AVG(salary) = (SELECT MIN(AVG(salary))
FROM employees
GROUP BY job_id);
以上统计平均工资最低的工种信息。

2.3 错误用法

SELECT employee_id, last_name
FROM employees
WHERE salary =
(SELECT MIN(salary)
FROM employees
GROUP BY department_id);
子sql中返回多行数据,此时不能用=匹配,可以用In来匹配。

3 练习题

判断:
使用子查询相当于执行两个连续查询,并使用第一个查询的结果作为第二个查询中的搜索值。
A True
B False

【答题小贴士】:
1、以墨天轮文章的形式解析题目并给出答案
2、将墨天轮文章链接发送到此文的评论区

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论