`
网盛数新
  • 浏览: 10475 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

数据应用达人之SQL基础教程分享8-子查询、连接、组合查询

阅读更多

6.子查询

更为复杂的子查询

1、子查询

【知识点介绍】

学习到现在,我们已经使用WHERE进行了很多简单的查询,一个条件、多个条件的查询都处理过了。

那么什么是子查询?不妨把子查询理解成嵌套结构,即包含在查询中的查询。

子查询通常会使用到IN、ALL等关键字,除了IN,后者内容我们会在接下来的章节里进行介绍。

例如我们要查询学生表中学生ID、姓名和学分,满足学分大于25的条件,就可以使用子查询了:

SELECT ID,SName,Credit FROM Student
WHERE Credit IN
  (SELECT Credit FROM Student
   WHERE Credit > 25);

 

 

当然这个例子只是为了举例说明子查询,实际操作并无意义,子查询在多表查询中会更实用。
这也也体现了子查询执行效率的问题,实践中我们建议大家适当的使用子查询。
此外,SQL里并没有缩进要求,举例中缩进是为了划分语句块,让语句更易读、逻辑更清晰,好习惯需要慢慢养成哦。

2、ALL\SOME\ANY

【知识点介绍】

ALL可以把列的值与某集合里的全部值进行比较,如果全部比较的结果都匹配才返回TRUE。

ANY或者SOME,含义类似IN,只要匹配到一个值,就返回TRUE。
但ANY与IN是有不同的,ANY只能用于子查询,而IN可以直接匹配列表,而不需要通过子查询来进行匹配。

比如我们要查找学分为28或30分的学生,ANY只能这样写:

WHERE Credit = ANY
  (SELECT Credit FROM Student
  WHERE (Credit = 30) OR (Credit = 28));

 

 

而用IN就可以直接这么写:

WHERE Credit IN (28,30);

 

 

【实例】

以查询学生表中,满足学分大于25的学生条件为例,使用ALL来达到我们的查询目的。
对学分列的所有低于25学分的项进行比较匹配,都满足条件才返回TRUE。

SELECT * FROM Student
WHERE Credit > ALL  -- Creidt应满足匹配ALL中的所有值
  (SELECT Credit FROM Student
   WHERE Credit <= 25);

 

 

3、小结

【知识点介绍】

1.子查询可以用在FROM语句中,也可以用在WHERE语句中,它实际上是嵌套在一些SQL语句中的SELECT子语句;
2.之前我们也讲到过,子查询在使用的时候是需要用括号来包括的,并且结合缩进与换行以保持其语句的可读性;
3.子查询是从里向外进行执行的;
4.一般情况下,子查询里不允许排序,即不能使用ORDER BY。

7.连接

表与表的连接

1、表的连接

【知识点介绍】

在学习连接前,机器人创建了一个新的表Listudent,这个表是Literature专业的学生信息,包含了学号ID、学院学号LID、姓名SName、性别Sex、班级Class、学分Credit、出生地Birthplace这些学生信息。



 

【实例】
SQL里连接(JOIN)是一个强大的功能,它能让两个或多个表结合起来,并可以通过主键和外键使它们的产生联系。
PS:在多表查询的时候,我们建议以 表名.列名 方式来指明具体的列。

查看SQL语句,点击运行,查看Student表和Listudent表是如何进行连接查询

SELECT Student.ID,Student.SName,Listudent.Class FROM Student,Listudent
WHERE Student.ID = Listudent.ID;

 

 

2、INNER JOIN

【知识点介绍】

INNER JOIN关键字同样可以把两个表给连接起来,并获取其中的行数据,要求至少存在一个匹配项。
它的语法如下:

SELECT 列,列, FROM 表1
INNER JOIN 表2 
ON 表1.列 = 表2.列;

 

 

【实例】

使用INNER JOIN连接2个表,并查询满足学分高于20的学生信息。

SELECT Student.ID,Student.SName,Student.Credit,Listudent.Class FROM student
INNER JOIN Listudent  -- 两张表进行INNER JOIN  
ON Student.ID = Listudent.ID
WHERE Listudent.Credit > 20;  -- 学分判断条件

 

 

3、RIGHT\LEFT JOIN

【知识点介绍】

RIGHT JOIN连接表,并从右表中返回所有行的数据,无视左表是否有匹配的值;
LEFT JOIN连接表,并从左表中返回所有行的数据,无视右边是否有匹配的值。

它们的语法规则如下:

SELECT 列,列,
FROM 表1
RIGHT\LEFT JOIN 表2 
ON 表1.列 = 表2.列;

 

 

【实例】

Student RIGHT JOIN ON Listudent 将会返回后表的所有内容,

Student LEFT JOIN ON Listudent 则会返回前表的所有内容。

分别运行两个查询,查看RIGHT JOIN与LEFT JOIN返回的数据的区别。

查询1:

SELECT * FROM student
RIGHT JOIN Listudent  
ON Student.ID = Listudent.ID;

 

 

查询2:

SELECT * FROM student
LEFT JOIN Listudent  
ON Student.ID = Listudent.ID;

 

 

4、小结

SQL中还有一种FULL JOIN(全连接),只要存在匹配,则返回该行的数据。我们可以把它理解成RIGHT JOIN和LEFT JOIN的结合版。可惜的是,目前MySQL、Access、Oracle等数据库软件不支持该语法。

此外人们通常把INNER JOIN、RIGHT\LEFT JOIN、FULL JOIN这些连接方法称为外连接;
而直接在两个表内进行条件匹配的连接,比如本节的第一个知识点中通过Student.ID = Listudent.ID在两个表内直接进行连接匹配,这种方法被称为内连接或者自然连接。

8.组合查询

组合查询合作共赢

1、什么是复合查询

【知识点介绍】

组合查询也叫并查询、复合查询、联合查询,是用来合并两个或多个SELECT语句的查询,不同的数据库软件里组合查询的内容会略有不同,组合查询可以把多个查询的结果组合成一个结果集。

通常在SQL我们会用到UNION、UNION ALL、EXCEPT等关键字组合多个SELECT语句来进行查询。

2、UNION

【知识点介绍】

UNION是组合查询里重要的一个关键字,它可以把两个或多个SELECT语句组合起来,不包括重复的记录。
使用UNION时我们要注意一点:
每个SELECT语句里选择的列的数量、数据类型、顺序必须相同。
UNION的使用语法如下:

SELECT 表1.列1,表1.列2 FROM 表1
WHERE[子句]
UNION
SELECT 表2.列1,表2.列2 FROM 表2
WHERE[子句];

 

 

【实例】

使用UNION对Student表和Listudent表的ID和SName进行组合查询。
每个SELECT语句中选择查询的列的数量、数据类型、顺序要一一对应相同。

SELECT student.ID,student.SName FROM student
UNION
SELECT listudent.ID,listudent.SName FROM listudent;

 

 

3、UNION ALL

【知识点介绍】

UNION ALL与UNION不同的是,UNION ALL 返回的结果是包含重复记录的,而UNION返回的结果是不重复的。
UNION ALL的使用语法和UNION一致,只是关键字多加了ALL:

SELECT 表1.列1,表1.列2 FROM 表1
WHERE[子句]
UNION ALL
SELECT 表2.列1,表2.列2 FROM 表2
WHERE[子句];

 

【实例】

使用UNION ALL,查看它与UNION的返回结果有什么不同。
在UNION之后添加关键字ALL,看看它的结果是否包含了两个表中重复的记录。

SELECT student.ID,student.SName FROM student
UNION ALL
SELECT listudent.ID,listudent.SName FROM listudent;

 

4、INTERSECT\EXCEPT

【知识点介绍】

INTERSECT是交集的意思,使用INTERSECT关键字可以组合两个SELECT语句,但只返回第一个SELECT语句中与第二个SELECT语句里一样的记录,使用语法等同于UNION。
EXCEPT关键字与INTERSECT不同,它组合两个SELECT语句,返回的是第一个SELECT语句中有,但第二个SELECT语句里没有的记录。

目前MySQL5.0并不支持INTERSECT和EXCEPT,而Oracle和SQL Server是支持的。

4、组合查询里使用ORDER BY

【知识点介绍】

ORDER BY可以在组合查询里使用,但它只能对最后的查询结果进行排序,我们不能在组合查询的子语句中使用ORDER BY。
在对最后结果进行排序的时候,我们不能指定某个列来进行排序,而只能用数字或别名来定义排序规则。

【实例】

查询两个表中学分低于25分的部分学生信息,对其结果进行排序。
对最后的结果进行排序,其排序规则需要通过数字或别名来引用。

SELECT student.ID,student.SName,student.Credit FROM student
WHERE student.Credit < 25 
UNION
SELECT listudent.ID,listudent.SName,listudent.Credit FROM listudent
WHERE listudent.Credit < 25
ORDER BY 1;  -- 使用ORDER BY并引用数字对结果进行排序 

 

5、组合查询里使用GROUP BY

【知识点介绍】

GROUP BY也是用来排序,它可以对最终的结果进行排序,但还可以使用在组合查询的每一个子句中,

【实例】

使用GROUP BY对每个子语句都进行分数的排序
GROUP BY可以使用在每个SELECT语句中。

SELECT student.ID,student.SName,student.Credit FROM student
WHERE student.Credit < 25
GROUP BY Credit DESC -- 分数从高到低
UNION
SELECT listudent.ID,listudent.SName,listudent.Credit FROM listudent
WHERE listudent.Credit < 25
GROUP BY Credit;  -- 分数从低到高


小结

1、小结

【知识点介绍】

使用组合查询可极大地简化复杂的SQL子句, 简化从多个表中检索查询的工作。
本章我们除了组合查询,还学习了单查询、查询操作符、子查询、表的连接查询。我们要理清每个知识的用法、逻辑,这对我们以后的实践操作是有很大帮助的。

或许你会问JOIN和UNION有什么区别?
首先,它们的语法有很大的区别,UNION对每个SELECT语句查询选择都是有规定的,它们的作用也有很大的区别;
此次,从过程上来讲,JOIN是两张或多种表连接后,对符合匹配条件的记录生成一个新的记录集合,而UNION则是先对各自的表进行记录,再合并记录形成新的记录集合。

 

下文待续。。。。。。

 

欢迎大家前往访问我们的官网:

http://www.datanew.com/datanew/homepage

http://www.lechuangzhe.com/homepage

  • 大小: 18.5 KB
0
1
分享到:
评论

相关推荐

    SQL基础教程-Mick-示例程序&习题答案

    SQL(Structured Query Language)是用于管理和处理关系数据库的标准编程语言,广泛应用于数据分析、数据存储和信息检索等场景。本教程“SQL基础教程-Mick-示例程序&习题答案”由Mick编写,旨在为初学者提供一个实用...

    数据库实验报告 SQL查询 ,子查询组合

    【SQL查询与子查询组合】 SQL (Structured Query Language) 是用于管理和处理数据库的标准语言,而SQL Server 2000是Microsoft提供的一款关系型数据库管理系统。在这个实验中,你将学习如何使用SQL Server 2000的...

    Oracle数据库应用教程--子查询与高级查询.pptx

    子查询,简单来说,就是在SQL语句中嵌套另一个SQL查询,用于提供外部查询的条件或比较对象。本教程主要涵盖以下几个方面: 1. **子查询的使用**: - 子查询可以在`WHERE`子句中使用,作为筛选条件,例如`...

    SQL语句基础教程

    SQL语句基础教程 SQL(Structured Query Language)是一种特殊目的语言,用于管理关系数据库管理系统(RDBMS)。SQL语句基础教程旨在帮助新手和需要复习SQL的资料仓储业界老将,学习SQL基础知识和语法。 SQL指令 -...

    [电子书] SQL Server 2012 T-SQL 实用技巧 (英文版)

    对于SQL Server 2012,T-SQL的掌握至关重要,因为它直接影响到数据的查询效率、数据库设计以及应用程序的性能。 本书的核心内容可能包括以下几个方面: 1. **基础查询**:介绍如何使用SELECT语句进行基本的数据...

    SQL基础教程(MICK)源码及课后答案

    首先,SQL的核心功能包括数据查询、数据更新、数据插入和数据删除。在SQL中,你可以使用SELECT语句来查询数据库中的信息,根据需求选择特定的列、行或特定条件。例如,`SELECT * FROM table_name` 将返回表table_...

    sql-map-2.dtd和sql-map-config-2.dtd

    本文将深入探讨与“sql-map-2.dtd”和“sql-map-config-2.dtd”相关的知识点,以及它们在Ibatis中的作用。 Ibatis是一个轻量级的ORM(对象关系映射)框架,它允许开发者将SQL语句直接写在配置文件中,通过XML映射...

    数据库管理与开发项目教程-教案-05项目四:使用T-SQL查询表数据-任务1简单查询.docx

    本教程聚焦于使用T-SQL查询表数据,涵盖了一系列基本到高级的查询技巧。 任务一:简单查询 简单查询主要涉及SELECT语句,它是SQL中最基础也是最重要的部分,用于从一个或多个表中提取数据。SELECT语句的基本语法...

    Siemens S7 1200 PLC连接SQLSERVER数据库

    本篇文章将深入探讨如何将Siemens S7 1200 PLC连接到SQL Server数据库,以便于数据的存储、查询和处理。 首先,理解基本概念。PLC是一种专为工业环境设计的计算机,用于控制自动化设备。S7-1200是西门子的紧凑型PLC...

    java基础教程----精华版

    - Java Database Connectivity,用于连接数据库,执行SQL语句,处理结果集。 以上只是Java基础知识的一部分,实际的Java基础教程会更深入地讲解每个概念,并配有实例来帮助理解。这份"java基础教程----精华版"应该...

    SQL基础语法+数据库设计与范式+数据查询与筛选+数据排序与分组+SQL函数与表达式+子查询与嵌套查询+连接查询等全套教程

    数据查询与筛选 数据排序与分组 SQL函数与表达式 子查询与嵌套查询 连接查询:内连接与外连接 事务处理与SQL 视图与存储过程 索引与优化查询 数据库安全性与权限管理 SQL与大数据处理 SQL在Web开发中的应用 SQL高级...

    SQL SERVER 2008 技术内幕 T-SQL查询 英文版

    - **SELECT语句**:这是进行数据查询的基础,书中详细讲解了如何使用SELECT语句从一个或多个表中检索数据。 - **连接操作**:包括INNER JOIN、LEFT JOIN、RIGHT JOIN和FULL OUTER JOIN等,通过这些连接操作可以将...

    Excel_VBA+ADO+SQL入门教程_-_汇总.pdf

    通过本教程,读者将学习如何使用 VBA 和 ADO 在 Excel 中执行 SQL 语句,掌握 SQL 语言的基本结构和应用,了解如何使用 SQL 在 Excel 中进行数据处理和分析。 认识 SQL In Excel SQL(Structured Query Language,...

    SQL SERVER 2008技术内幕 T-SQL查询

    SQL 的基础理论 、查询优化、查询 事法及复杂度,以及在使用子 查询、表表达式、排名函数、数据聚合和透视转换、TOP 和 APPLY、数据修改、分区表、特殊数据结构等实际 应用时会遇到的各种高级查询问题和解决方案.

    SQL完全教程第5章高级查询1-连接查询

    此文档帮助用户熟悉SQL的连接查询,掌握SQL的高级知识,并且提供一些实际的例子,可以帮助解决实际工作的问题。

    Microsoft SQL SERVER 2008技术内幕 T-SQL查询 2/2

    主要内容包括SQL的基础理论、查询优化、查询算法及复杂度,以及在使用子查询、表表达式、排名函数、数据聚合和透视转换、TOP和APPLY、数据修改、分区表、特殊数据结构等实际应用时会遇到的各种高级查询问题和解决...

Global site tag (gtag.js) - Google Analytics