精华内容
下载资源
问答
  • 2019-03-31 20:15:00

    题目:把“SC”表中“谌燕”老师教的课的成绩都更改为此课程的平均成绩;

    这道题需要我们得出“谌燕”老师教的每个课程的平均成绩,然后将该平均成绩更新到成绩表中对应的课程。那么问题来了,课 程是多个的,因此平均成绩也有多个,那我要怎样才能将该课程平均成绩的更新到对应的成绩表中呢。
    在这个问题上,老师给我指导了一番,
    我个人得出了结论:在对某个列更新数据赋值的子查询中,我们在子查询中表的某个列去join对应更新表的某个列,这样就可以做到数据的对接。完成了数据对接后,我们就可以筛选出需要更的行,就完成了
    所以在这道题,我的做法如下:

    UPDATE SC C 
    SET SCORE=(SELECT AVG(SCORE) FROM SC  
               WHERE  C.CNO = SC.CNO  AND 
                      CNO IN(SELECT CNO  FROM COURSE  
                             JOIN TEACHER USING(TNO)
                             WHERE TNAME='谌燕')                            
               GROUP BY CNO)     
    WHERE CNO IN(SELECT CNO  FROM COURSE  
                 JOIN TEACHER USING(TNO)
                   WHERE TNAME='谌燕')
    
    更多相关内容
  • sql语句子查询

    千次阅读 2021-01-28 10:19:03
    子查询就是将一个查询语句嵌套在另一个查询语句中,内层语句的查询结果,可以作为外层查询语句的条件。 使用条件:引发子查询的情况 1、使用【not】in 的子查询 2、使用比较运算符的子查询(=、> 、>=、 &...

    子查询又叫嵌套查询,总结一下子查询的各种操作和处理,以便于记忆和熟练的运用。

    概念:什么是子查询?

    子查询就是将一个查询语句嵌套在另一个查询语句中,内层语句的查询结果,可以作为外层查询语句的条件,本文重点讲解的是放在where或者having关键词之后的情况,当然不仅限这种情形。

    子查询分为一下三种情况(这里只总结运用较多的三种)

    一、列子查询(多行子查询,即子查询的结果集是多行单列),位置放在where和having之后。

    包含一下几种常见的情形:

    1、使用【not】in 的子查询

    2、使用比较运算符的子查询(=、> 、 >=、 <=、 <>、 !=、 <=>)

    3、使用[not] exists 的子查询

    4、使用any  some  或者 all 的子查询,具体如右图:

    操作浮含义
    IN/NOT IN等于列表中的任意一个
    ANY|SOME和子查询返回的某一个值比较
    ALL和子查询返回的所有值比较
    运算符 |关键字anysomeall
    >     >=最小值最小值最大值
    <     <=最大值最大值最小值
    =任意值任意值  
    <>   !=  任意值
    (仅示例)
    
    select id ,username from student where score >=any(select level from scholarship);大于等于任意一个,即取最小值
    
    select id ,username from student where score >=some(select level from scholarship)同上
    
    select id ,username from student where score >=all(select level from scholarship)大于等于所有的,就是大于等于里面最大的那个
    
    
    其他情况参考这个示例

    二、标量子查询

    标量子查询的子结果集是单行单列,并且子查询条件一般放在where或者having的后面,要注意放在()内,且不加“;”。

    举例说明一下:

    select * from employees 
    
    where salary >(
    
        select  salary  from employees where 
        last_name='Abel'
    
    );
    select department_id ,min(salary) from employees 
    
    group by department_id 
    
    having min(salary) >( 
    
    select min(salay)
    
    from employees where department_id =50
    );

     三、行子查询(结果集是一行多列或者多行多列,用法较少,不做推荐)

    举例说明:

    select * from employees 
    
    where (employee_id ,salary )=(
    
    select min(employee_id),max(salary)
    
    from employees
    
    );
    
    
    当然用之前的方法也是可以解决的:
    
    select * from empioyees
    
    where employee_id=(
    
    select min(employee_id) from employees
    
    )
    
    and 
    
    salary=(
    
    select max(salary) from employees
    
    );
    
    

    当然子查询还有一些其他的用法,比如下面的在创建表格时的运用。

    将查询结果写入到数据表格中

    insert table  [column_name,.......] select column_name,....... from table;

    创建数据表的同时将查询结果写入到数据表中

    create table if not exists table_name [create_definition,......] select_statement

    ps:这里需要注意的是,新建表格的字段要与查询的字段保持一致,才可以按照对应的字段生成数据,如果不一致,会在原来的基础上生成新的字段。

    create table test2 (id tinyint unsigned auto_increment key ,num tinyint unsigned ) select id ,level from scholarship ;
    
    +------+----+-------+
    | num  | id | level |
    +------+----+-------+
    | NULL |  1 |    90 |
    | NULL |  2 |    80 |
    | NULL |  3 |    70 |
    +------+----+-------+
    
    这样就多出了一个level字段或者说num字段没有用上,如果我们把num字段改成level就能生成合适的表格内容了。
    +----+-------+
    | id | level |
    +----+-------+
    |  1 |    90 |
    |  2 |    80 |
    |  3 |    70 |
    +----+-------+

    另外还有一些子查询语句是放在select下面的,举一个例子说明一下:

    select d.*,(
    
    select count(*)
    
    from employees e 
    
    where e.department=d.department
    
    )
    
    from departments d;
    
    
    select  (
    
    select department_name from departments d
    
    join employees e
    
    on d.department_id =e.department_id
    
    ) from departments d;

    还有一部分是放在from后面的,一般from后面跟着的是表格,这里相当于把子查询的结果集当成是表格来处理,不再做示例了,有兴趣的可以百度一下。

    展开全文
  • SQL语句(五)子查询

    千次阅读 2021-08-03 10:16:54
    子查询(结果为一行多列或多行多列)四 、SELECT后面的子查询五、FROM后面的子查询六、EXISTS后面的子查询EXISTS语句的作用简单应用 一、子查询含义 出现在其他语句中的select语句,称为子查询或内查询。 二、...

    一、子查询含义

    出现在其他语句中的select语句,称为子查询内查询

    二、子查询分类

    按子查询的位置分

    位置支持的查询
    SELECT后面支持标量子查询
    FROM后面支持表子查询
    WHEREHAVING后面支持标量子查询列子查询行子查询
    EXISTS后面支持表子查询

    按结果集的行列数不同分

    分类类型结果集行数
    标量子查询一行一列
    列子查询一列多行
    行子查询一行多列
    表子查询多行多列

    三、WHERE后面的子查询

    1. 标量子查询

    tips: 单行操作符(> < =等)只能搭配标量子查询

    查询工资比Abel高的所有员工信息

    ①查询Abel的工资

    SELECT 	salary
    FROM 	employees
    WHERE 	last_name = 'Abel';
    

    结果为单行单列
    在这里插入图片描述
    ②查询员工的信息,满足salary>①
    在这里插入图片描述
    查询公司工资最少的员工的last_name, job_id, salary
    ①查询MIN(salary)

    SELECT MIN(salary)
    FROM employees;
    

    ②查询符号这项工资的员工,salary=①

    SELECT last_name, job_id, salary
    FROM employees
    WHERE salary=(
    	SELECT MIN(salary)
    	FROM employees
    );
    

    查询job_id与141号员工相同salary比143号员工多的员工的姓名job_id工资
    ①141号员工的job_id

    SELECT job_id
    FROM employees
    WHERE employee_id=141;
    

    ②143号员工的salary

    SELECT salary
    FROM employees
    WHERE employee_id=143;
    

    ③ 结果集映射到last_name, job_id, salary,且满足条件 job_id=①salary>②

    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
    );
    

    2. 列子查询(多行子查询)

    使用多行操作符:

    • IN/NOT IN
      • IN()等价于=ANY() NOT IN()等价于<>ALL()
    • ANY/SOME
    • ALL

    返回location_id1400或1700的部门中的所有员工姓名

    使用联表查询操作得到结果:

    SELECT last_name
    FROM departments d INNER JOIN employees e
    	ON d.department_id = e.department_id
    WHERE d.location_id IN (1400, 1700);
    

    使用列子查询得到结果:
    ①查询location_id1400或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)
    );
    

    查询其他工种中的
    job_idIT_PROG工种的任一员工工资低的
    员工的:工号姓名

    ①获取IT_PROG工种所有工资

    SELECT DISTINCT salary
    FROM employees
    WHERE job_id='IT_PROG'
    

    ②查询其他部门中符合条件salary<min(①)的员工信息

    SELECT job_id, last_name
    FROM employees
    WHERE salary < ANY(
    	SELECT DISTINCT salary
    	FROM employees
    	WHERE job_id='IT_PROG'
    ) AND job_id!='IT_PROG';
    

    3. 行子查询(结果为一行多列或多行多列)

    查询员工编号最小而且工资最高的员工信息
    ①查询最小的员工编号

    SELECT MIN(employee_id)
    FROM employees;
    

    ②查询员工的最高工资

    SELECT MAX(salary)
    FROM employees;
    

    ③查询符合employee_id=①,salary=②的员工

    SELECT *
    FROM employees
    WHERE employee_id=(
    	SELECT MIN(employee_id)
    	FROM employees
    )AND salary=(
    	SELECT MAX(salary)
    	FROM employees
    );
    

    使用行子查询的等价写法:

    SELECT *
    FROM employees
    WHERE (employee_id, salary) = (
    	SELECT MIN(employee_id), MAX(salary)
    	FROM employees
    );
    

    四 、SELECT后面的子查询

    查询每个部门员工个数

    使用联表查询操作:

    SELECT department_name 部门名, COUNT(1) 员工数量
    FROM employees e RIGHT JOIN departments d
    	ON e.department_id = d.department_id
    GROUP BY department_name
    

    使用子查询

    SELECT department_id, department_name,(
    	SELECT COUNT(1)
    	FROM employees e
    	WHERE e.department_id=d.department_id
    ) 对应员工数
    FROM departments d;
    

    在使用子查询中,外部的表名的别名可以传递到子查询中,例如上面的departments 表的别名d就传递到了子查询中。

    该子查询可以理解为:

    1. 先获取外层查询的结果集
    2. 然后对结果集的每条记录进行遍历,将对应的参数填入到子查询中得到单条记录的结果拼接到新列中

    五、FROM后面的子查询

    查询每个部门的平均工资工资等级

    ①查询每个部门的平均工资

    SELECT AVG(salary) ag,department_id
    FROM employees e
    WHERE e.department_id IS NOT NULL
    GROUP BY department_id;
    

    在这里插入图片描述
    ②查询对应的工资等级,连接①的结果集和job_grades

    SELECT department_id, ag, grade_level
    FROM (
    	SELECT AVG(salary) ag,department_id
    	FROM employees e
    	WHERE e.department_id IS NOT NULL
    	GROUP BY department_id
    ) ag_dep INNER JOIN job_grades j
    	ON ag_dep.ag BETWEEN lowest_sal AND highest_sal;
    

    在这里插入图片描述
    即可以将子查询的结果集作为一张表用于联表查询操作

    六、EXISTS后面的子查询

    EXISTS语句的作用

    EXISTS语句后的括号中填入一个子查询语句,返回的结果为false(0)或true(1),分别代表查询结果是否为空。

    例:

    SELECT EXISTS(SELECT employee_id FROM employees);
    SELECT EXISTS(SELECT employee_id FROM employees WHERE salary=30000);
    

    在这里插入图片描述
    在这里插入图片描述

    简单应用

    查询有员工部门名

    SELECT department_name
    FROM departments d
    WHERE EXISTS(
    	SELECT * 
    	FROM employees e
    	WHERE e.department_id = d.department_id
    );
    

    这里等价于IN

    SELECT department_name
    FROM departments d 
    WHERE d.department_id IN(
    	SELECT DISTINCT department_id
    	FROM employees
    );
    

    查询没有女票男神信息

    使用EXISTS语句

    1. 查询男神信息
    2. 筛选条件:他没有女票
      等价于beauty 表中没有boyfriend_id为当前男生的记录
      等价于beauty 表中boyfriend_id为当前男生的id的记录不存在
    SELECT *
    FROM boys bo
    WHERE NOT EXISTS(
    	SELECT *
    	FROM beauty b
    	WHERE bo.id=b.boyfriend_id
    );
    

    使用IN完成相同的任务:

    1. 查询男神信息
    2. 筛选条件:他没有女票
      等价于当前男生的id不在beauty 表中boyfriend_id字段的集合中
    SELECT * 
    FROM boys b
    WHERE b.id NOT IN(
    	SELECT boyfriend_id
    	FROM beauty
    );
    
    展开全文
  • 子查询是一个 SELECT 语句,它嵌套在一个 SELECT、SELECT…INTO 语句、INSERT…INTO 语句、DELETE 语句、或 UPDATE 语句或嵌套在另一子查询中。 语法:select ….from 表1 where 列1 > (子查询) 外面的查询成为父...
  • SQL语句基础-子查询

    万次阅读 多人点赞 2019-06-26 17:24:26
    SQL语句中,一个select-from-where语句称为一个查询块。如果一个select语句嵌套在一个select,insert,update或delete语句中,则称之为子查询或者内存查询。包含子查询的语句则称为主查询或者外层查询 子查询语句...

    子查询

    在SQL语句中,一个select-from-where语句称为一个查询块。如果一个select语句嵌套在一个select,insert,update或delete语句中,则称之为子查询或者内存查询。包含子查询的语句则称为主查询或者外层查询
    子查询语句一般出现在where和having子句中
    写在where中的子句中的子查询一般有下面的形式

    • WHERE <列名> [NOT] IN (子查询) // (集合
    • WHERE <列名> 比较运算符 (子查询) //(单值
    • WHERE EXISTS (子查询) //(是否空值
      例如:
      使用子查询进行基于集合的查询
    //查询与钟文辉同学在同一个系的同学
    //第一步先查询钟文辉同学所在的系
    //然后把系作为已知条件查找同学信息
    SELECT * FROM Student
    WHERE Sdept IN(
    SELECT Sdept FROM Student Where Sname ='钟文辉')	;
    

    使用子查询进行比较查询

    //查询选修了C04课程且课程成绩高于此课程平均成绩的的学生学号和该门课成绩
    //先查出C04课程的平均成绩
    //然后把平均成绩作为已知条件查找同学学号和成绩
    SELECT Sno, Grade FROM SC
    WHERECno='C04' AND Grade>(
    SELECT AVG(Grade) FROM SC Where Cno ='C04')	;
    

    带有ANY和ALL的子查询

    //查询比C03课程成绩都高的选了C04课程的学生的学号和成绩
    SELECT Sno, Grade FROM SC
    WHERECno='C04' AND Grade>ALL(
    SELECT  Grade  FROM SC Where Cno ='C03')	;
    

    使用带EXSITS谓词的子查询

    //查询选修了C04课程且课程的学生姓名
    SELECT Sname FROM SC
    WHERE 	EXISTS(
    SELECT * FROM SC
    Where SC.Sno=Student.Sno  AND  Cno ='C04');
    

    注意,带exists谓词的子查询是先执行外层,再执行内层查询,根据内存查询返回的true和false来判断外层数据是否满足条件。

    查询的集合运算

    SQL提供与关系代数中集合并,交,差对应的谓词,他们分别是UNION,INTERSECT,EXCEPT,当使用这些操作进行查询时,参与运算的两个查询分别用括号括起来。
    例如

    //查询计算机系和机电系的所有学生信息SELECT *FROM Student 
    WHERE Sdept='计算机系'UNIONSELECT *FROM Student 
    WHERE Sdept='机电系'//查询同时选修了C03和C04课程的学生的学号
    (SELECT Sno FROM SC WHERE Cno='C03')
    INTERSECT
    (SELECT Sno FROM SC WHERE Cno='C04')
    //查询选修了C01但是没有选修C02课程的学生的学号
    (SELECT Sno FROM SC WHERE Cno='C01')
    EXCEPT
    (SELECT Sno FROM SC WHERE Cno='C02')
    
    展开全文
  • SQL语句详解(四)——SQL联表查询

    千次阅读 2021-12-15 11:13:11
    今天我们继续给大家介绍MySQL相关知识,本文主要内容是SQL联表查询。 一、SQL联表查询简介 二、内链接 三、外链接 四、交叉链接 五、结果链接
  • sql 查询插入SQL INSERT Query also referred as SQL INSERT INTO is the command used for inserting data into database. SQL INSERT statement allows insertion of data into one table at a time. SQL INSERT...
  • SQL查询语句中,什么叫子查询

    千次阅读 2021-02-07 19:27:07
    展开全部嵌套SELECT语句也叫子查询,一个 SELECT 语句的查询结果能够作为另一个语句的输入值。子查询不但能够出现在e69da5e6ba903231313335323631343130323136353331333365643662Where子句中,也能够出现在from子句...
  • SQL语句多表关联查询语法

    万次阅读 2021-03-03 10:11:37
    **sql语句多表关联查询语法** 一、外连接 1.左连接 left join 或 left outer join SQL语句:select * from student left join score on student.Num=score.Stu_id; 2.右连接 right join 或 right outer join SQL...
  • SQL语句中的嵌套子查询

    万次阅读 多人点赞 2019-06-20 21:29:52
    SQL语句;相关子查询;求选修了所有课程的学生的学号
  • sql语句优化-左连接和子查询

    千次阅读 2019-04-29 11:04:35
    现有a,b,c表需要连表查询,a表是主表接近百万数据,b,c表只有几百条, select a.x, b.x, c.x from a left join b on a.key = b.key left join c on a.key = c.key where ... 修改之后 select a.x, (select b.x...
  • Linux运维-运维课程d2-MySQL基本SQL语句(下)-08-SQL查询语句之SQL五句.mp4
  • SQL server 查询语句

    万次阅读 热门讨论 2021-07-01 21:44:52
    select * from test.dbo.users -- 普通条件查询 where id=1; 模糊查询 select * from test.dbo.users where username like '%li%'; 范围查询 select * from test.dbo.users -- id在1~3之间的数据 where id...
  • sql语句中的子查询

    千次阅读 2018-10-29 23:23:51
    1.独立子查询子查询语句可以独立查询 2.相关子查询: 独立子查询子查询可以独立运行。 相关子查询: 子查询中引用了父查询的结果,不可以独立运行。  所有查询都可以用相关子查询实现。exists(...)返回...
  • SQL (structured query language)结构...SQL语句 注释快捷键: ctrl + / 取消注释快捷键: ctrl + shift + / 1.对表的操作 创建表: create table 表名( 字段名 类型 约束(不是必填选项), 字段名 类型 约.
  • sql 子查询及基本语句 挺全的收录

    万次阅读 2018-06-06 00:30:35
    引自https://blog.csdn.net/jia_gugang/article/details/80282873一、SQL子查询语句 1、单行子查询 select ename,deptno,sal from emp where deptno=(select deptno from dept where loc='NEW YORK');...
  • 子查询sql怎么写

    千次阅读 2020-12-17 14:42:45
    一、子查询简介: 子查询就是嵌套在主查询中的查询。...二、子查询sql示例: 个人认为这个sql很实用,都可以套着用。 select * from user where id in (select s.userid from score s where english = 90)
  • sqlserver子查询及基本语句

    万次阅读 2018-05-11 16:01:37
    一、SQL子查询语句 1、单行子查询 select ename,deptno,sal from emp where deptno=(select deptno from dept where loc='NEW YORK'); 2、多行子查询 SELECT ename,job,sal FROM EMP ...
  • SQL语句——查询

    万次阅读 多人点赞 2021-01-05 18:05:30
    SQL 语句 单表查询 查询语句(SELECT)是数据库中最基本的和最重要的语句之一,其功能是从数据库中检索满足条件的数据。查询的数据源可以来自一张表,也可以来自多张表甚至来自视图,查询的结果是由0行(没有满足...
  • SQL语句in中使用子查询

    千次阅读 2017-05-16 16:42:13
    SELECT ID, NAME FROM A WHERE ID IN ( ( SELECT RIGHT (ids, CHARINDEX('.', ids) - 1) FROM b WHERE ID = 1 ), ( SELECT LEFT (ids, CHARINDEX('.', ids) - 1) FROM
  • sql语句where in子查询优化

    万次阅读 2018-06-01 14:22:26
    好好理解好好理解 转载请注明出处。 作者:wuxiwei 出处:http://www.cnblogs.com/wxw16/p/6105624.html
  • MySQL,SQL语句执行顺序

    千次阅读 2021-01-19 16:30:59
    1.SQL执行顺序:select 考生姓名, max(总成绩) asmax总成绩fromtb_Gradewhere 考生姓名 is not nullgroup by考生姓名having max(总成绩) > 600order by max总成绩(1). 首先执行 FROM 子句, 从 tb_Grade 表组装...
  • SQL查询语句查询数据

    千次阅读 2021-11-11 22:08:11
    在MySQL 中是使用SELECT语句查询数据的。 1、基本查询语句 查询数据是数据库操作中最常用的操作。通过对数据库的查询,用户可以从数据库中获取需要的数据。数据库中可能包含着无数的表,表中可能包含着无数的...
  • SQL语句多表连接查询语法

    万次阅读 多人点赞 2019-07-28 09:32:13
    总结:内连接就是两个表的交集 ,左外连接就是左边表加两表交集 ,右外连接就是右边表加两表交集 ...SQL语句:select * from student left join score on student.Num=score.Stu_id; 2.右连接 right join 或 r...
  • sql 子查询 嵌套查询In the real world, there are times when we need a particular set of data but we don’t have the exact details for getting the data set. In such cases, we try to get the information ...
  • bitsCN.com一条sql语句实现统计查询如图:程序员在进行如下的统计时,现在提供两种实现方案:方案一:运用 SEKECT CASE WHENEXPLAIN SELECT count(*) AS '总数', count( CASE oup.status WHEN '1' THEN oup.id END )...
  • 同样的一条sql语句select * from (select ename from emp);,在mysql中执行会报错,错误如下: [SQL] select * from (select ename from emp); [Err] 1248 - Every derived table must have its own alias 如果在...
  • SQL语言中的子查询

    千次阅读 2022-04-28 10:49:05
    子查询是嵌套在另一个语句,如:select,insert,update、delete中的查询 子查询的例子: (2)嵌套子查询 子查询可以嵌套在另外一个子查询中,SQL Server最多支持32个嵌套级别 嵌套子查询的例子: ...
  • 目录SQL查询语句基础查询条件查询模糊查询字段控制查询排序聚合函数分组查询having子句limit分页查询多表连接查询 SQL查询语句 数据查询语言。 数据库执行DQL语句不会对数据进行改变,而是让数据库发送结果集给...
  • 一、使用闭包构造子查询 1-1、带变量查询 带变量,要加use ($teachers_id) -&gt;where('id', 'IN', function ($query) use ($teachers_id) { //老师课程 $list=Db::name('product') //查询点播的课程 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 281,793
精华内容 112,717
关键字:

子查询的sql语句