美文网首页
七、SQL–子查询①(子查询数据准备)

七、SQL–子查询①(子查询数据准备)

作者: 小小一颗卤蛋 | 来源:发表于2020-05-09 23:20 被阅读0次

子查询定义:

SQL语句允许将一个查询语句做为一个结果集供其他SQL语句使用,就像使用普通的表一样,被当作结果集的查询语句被称为子查询。

所有可以使用表的地方几乎都可以使用子查询来代替
如:SELECT * FROM T 中就可以用子查询来代替表T

如:SELECT * FROM( SELECT * FROM T2 where FAge<30)

这里的“SELECT * FROM T2 where FAge<30”是子查询,可以将子查询看成一张暂态的数据表,这张表在查询开始时被创造,在查询结束时被删除。子查询大大简化了复杂SQL语句的编写,不过使用不当也容易造成性能问题。

子查询的语法与普通的SELECT语句语法相同,所有可以在普通SELECT语句中使用的特性都可以在子查询中使用,如:WHERE子句过滤、UNION运算符、HAVING子句、GROUPBY子句、ORDER BY子句,甚至在子查询中还可以包含子查询。

除了select语句,子查询也可以在UPDATE、DELETE 等语句中使用

数据准备:

MYSQL,MSSQLServer,DB2:
CREATE TABLE T_Reader (FId INT NOT NULL ,FName VARCHAR(50),FYearOfBirth INT,FCity VARCHAR(50),FProvince VARCHAR(50),FYearOfJoin INT)
Oracle:
CREATE TABLE T_Reader (FId NUMBER (10) NOT NULL ,FName VARCHAR2(50),FYearOfBirth NUMBER (10),FCity VARCHAR2(50),FProvince VARCHAR2(50), FYearOfJoin NUMBER (10))

MYSQL,MSSQLServer,DB2:
CREATE TABLE T_Book (FId INT NOT NULL ,FName VARCHAR(50),FYearPublished INT,FCategoryId INT)
Oracle:
CREATE TABLE T_Book (FId NUMBER (10) NOT NULL ,FName VARCHAR2(50),FYearPublished NUMBER (10),FCategoryId NUMBER (10))

MYSQL,MSSQLServer,DB2:
CREATE TABLE T_Category (FId INT NOT NULL ,FName VARCHAR(50))
Oracle:
CREATE TABLE T_Category (FId NUMBER (10) NOT NULL ,FName VARCHAR2(50))

MYSQL,MSSQLServer,DB2:
CREATE TABLE T_ReaderFavorite (FCategoryId INT,FReaderId INT)
Oracle:
CREATE TABLE T_ReaderFavorite (FCategoryId NUMBER (10),FReaderId NUMBER (10))

插入数据:

INSERT INTO T_Category(FId,FName)VALUES(1,"Story");
INSERT INTO T_Category(FId,FName)VALUES(2,"History");
INSERT INTO T_Category(FId,FName)VALUES(3,"Theory");
INSERT INTO T_Category(FId,FName)VALUES(4,"Technology");
INSERT INTO T_Category(FId,FName)VALUES(5,"Art");
INSERT INTO T_Category(FId,FName)VALUES(6,"Philosophy");
INSERT INTO T_Reader(FId,FName,FYearOfBirth,FCity,FProvince,FYearOfJoin)VALUES(1,"Tom",1979,"TangShan","Hebei",2003);
INSERT INTO T_Reader(FId,FName,FYearOfBirth,FCity,FProvince,FYearOfJoin)VALUES(2,"Sam",1981,"LangFang","Hebei",2001);
INSERT INTO T_Reader(FId,FName,FYearOfBirth,FCity,FProvince,FYearOfJoin)VALUES(3,"Jerry",1966,"DongGuan","GuangDong",1995);
INSERT INTO T_Reader(FId,FName,FYearOfBirth,FCity,FProvince,FYearOfJoin)VALUES(4,"Lily",1972,"JiaXing","ZheJiang",2005);
INSERT INTO T_Reader(FId,FName,FYearOfBirth,FCity,FProvince,FYearOfJoin)VALUES(5,"Marry",1985,"BeiJing","BeiJing",1999);
INSERT INTO T_Reader(FId,FName,FYearOfBirth,FCity,FProvince,FYearOfJoin)VALUES(6,"Kelly",1977,"ZhuZhou","HuNan",1995);
INSERT INTO T_Reader(FId,FName,FYearOfBirth,FCity,FProvince,FYearOfJoin)VALUES(7,"Tim",1982,"YongZhou","HuNan",2001);
INSERT INTO T_Reader(FId,FName,FYearOfBirth,FCity,FProvince,FYearOfJoin)VALUES(8,"King",1979,"JiNan","ShanDong",1997);
INSERT INTO T_Reader(FId,FName,FYearOfBirth,FCity,FProvince,FYearOfJoin)VALUES(9,"John",1979,"QingDao","ShanDong",2003);
INSERT INTO T_Reader(FId,FName,FYearOfBirth,FCity,FProvince,FYearOfJoin)VALUES(10,"Lucy",1978,"LuoYang","HeNan",1996);
INSERT INTO T_Reader(FId,FName,FYearOfBirth,FCity,FProvince,FYearOfJoin)VALUES(11,"July",1983,"ZhuMaDian","HeNan",1999);
INSERT INTO T_Reader(FId,FName,FYearOfBirth,FCity,FProvince,FYearOfJoin)VALUES(12,"Fige",1981,"JinCheng","ShanXi",2003);
INSERT INTO T_Book(FId,FName,FYearPublished,FCategoryId)VALUES(1,"About J2EE",2005,4);
INSERT INTO T_Book(FId,FName,FYearPublished,FCategoryId)VALUES(2,"Learning Hibernate",2003,4);
INSERT INTO T_Book(FId,FName,FYearPublished,FCategoryId)VALUES(3,"Two Cites",1999,1);
INSERT INTO T_Book(FId,FName,FYearPublished,FCategoryId)VALUES(4,"Jane Eyre",2001,1);
INSERT INTO T_Book(FId,FName,FYearPublished,FCategoryId)VALUES(5,"Oliver Twist",2002,1);
INSERT INTO T_Book(FId,FName,FYearPublished,FCategoryId)VALUES(6,"History of China",1982,2);
INSERT INTO T_Book(FId,FName,FYearPublished,FCategoryId)VALUES(7,"History of England",1860,2);
INSERT INTO T_Book(FId,FName,FYearPublished,FCategoryId)VALUES(8,"History of America",1700,2);
INSERT INTO T_Book(FId,FName,FYearPublished,FCategoryId)VALUES(9,"History of TheWorld",2008,2);
INSERT INTO T_Book(FId,FName,FYearPublished,FCategoryId)VALUES(10,"Atom",1930,3);
INSERT INTO T_Book(FId,FName,FYearPublished,FCategoryId)VALUES(11,"RELATIVITY",1945,3);
INSERT INTO T_Book(FId,FName,FYearPublished,FCategoryId)VALUES(12,"Computer",1970,3);
INSERT INTO T_Book(FId,FName,FYearPublished,FCategoryId)VALUES(13,"Astronomy",1971,3);
INSERT INTO T_Book(FId,FName,FYearPublished,FCategoryId)VALUES(14,"How To Singing",1771,5);
INSERT INTO T_Book(FId,FName,FYearPublished,FCategoryId)VALUES(15,"DaoDeJing",2001,6);
INSERT INTO T_Book(FId,FName,FYearPublished,FCategoryId)VALUES(16,"Obedience toAuthority",1995,6);
INSERT INTO T_ReaderFavorite(FCategoryId,FReaderId)VALUES(1,1);
INSERT INTO T_ReaderFavorite(FCategoryId,FReaderId)VALUES(5,2);
INSERT INTO T_ReaderFavorite(FCategoryId,FReaderId)VALUES(2,3);
INSERT INTO T_ReaderFavorite(FCategoryId,FReaderId)VALUES(3,4);
INSERT INTO T_ReaderFavorite(FCategoryId,FReaderId)VALUES(5,5);
INSERT INTO T_ReaderFavorite(FCategoryId,FReaderId)VALUES(1,6);
INSERT INTO T_ReaderFavorite(FCategoryId,FReaderId)VALUES(1,7);
INSERT INTO T_ReaderFavorite(FCategoryId,FReaderId)VALUES(4,8);
INSERT INTO T_ReaderFavorite(FCategoryId,FReaderId)VALUES(6,9);
INSERT INTO T_ReaderFavorite(FCategoryId,FReaderId)VALUES(5,10);
INSERT INTO T_ReaderFavorite(FCategoryId,FReaderId)VALUES(2,11);
INSERT INTO T_ReaderFavorite(FCategoryId,FReaderId)VALUES(2,12);
INSERT INTO T_ReaderFavorite(FCategoryId,FReaderId)VALUES(1,12);
INSERT INTO T_ReaderFavorite(FCategoryId,FReaderId)VALUES(3,1);
INSERT INTO T_ReaderFavorite(FCategoryId,FReaderId)VALUES(1,3);
INSERT INTO T_ReaderFavorite(FCategoryId,FReaderId)VALUES(4,4);

执行SELECT * FROM T_Reader 查看T_Reader 表中的数据。

相关文章

  • 七、SQL–子查询①(子查询数据准备)

    子查询定义: SQL语句允许将一个查询语句做为一个结果集供其他SQL语句使用,就像使用普通的表一样,被当作结果集的...

  • 数据分析之SQL子查询

    文章阅读路线: SQL子查询概念 独立子查询实例 相关子查询实例 SQL子查询常见玩伴 1.SQL子查询概念 子查...

  • 子查询和组合查询

    子查询 SELECT 语句是 SQL 的查询。 假如要从多个表中过滤数据,SQL 还允许创建子查询(subquer...

  • 数据库笔记-SQL子查询

    子查询:关联查询和非关联查询 子查询是「查询」中的「查询」,就是「嵌套查询」。 以 NBA 的SQL数据库文件为例...

  • 关系数据库SQL之高级数据查询:去重复、组合查询、连接查询、虚拟

    前言 接上一篇关系数据库SQL之基本数据查询:子查询、分组查询、模糊查询,主要是关系型数据库基本数据查询。包括子查...

  • Oracel_子查询

    SQL子查询 子查询语法 子查询 (内查询) 在主查询之前一次执行完成。 子查询的结果被主查询(外查询)使用 。 ...

  • SQL查询_高级查询

    SQL查询_高级查询 一、子查询 子查询出现的位置一般为条件语句,oracle会先执行子查询,再执行父查询,子查询...

  • 2018-06-04

    第11章 子查询 11.1 子查询 SQL 允许创建子查询(subquery),即嵌套在其他查询中的查询。 11....

  • sql语句

    sql中in和exist的区别: 1、in先子查询,后主查询 2、exist先主查询,后子查询。子查询中,如果结果...

  • 《SQL必知必会》笔记6-子查询、联结表join

    1 使用子查询 查询(query):任何SQL语句都是查询,但一般指SELECT语句。 SQL还允许创建子查询(s...

网友评论

      本文标题:七、SQL–子查询①(子查询数据准备)

      本文链接:https://www.haomeiwen.com/subject/otyrnhtx.html