SQL高级查询案例
- 格式:doc
- 大小:43.00 KB
- 文档页数:6
高逼格sql写法高逼格的SQL写法通常是指使用复杂的SQL语句、高级的SQL函数和技巧,以及优化查询性能的方法。
以下是一些高逼格的SQL写法示例:1. 使用窗口函数(Window Functions):窗口函数允许您在结果集的窗口上执行计算,而无需将数据分组。
例如,使用ROW_NUMBER()、RANK()、DENSE_RANK()等函数对数据进行排序和编号。
```sqlSELECT name, salary, ROW_NUMBER() OVER (ORDER BY salary DESC) AS rankFROM employees;```2. 使用子查询(Subqueries):子查询可以在主查询中嵌套其他查询,以获取更复杂的数据处理和组合。
```sqlSELECTFROM ordersWHERE product_id IN (SELECT product_id FROMbest_selling_products);```3. 使用连接(Joins):连接可以将多个表中的相关数据进行组合,以获取更完整的信息。
例如,内连接(INNER JOIN)、左连接(LEFT JOIN)、右连接(RIGHT JOIN)和全外连接(FULL OUTER JOIN)。
```sqlSELECT _id, _name, _nameFROM ordersINNER JOIN customers ON _id = _idINNER JOIN products ON _id = _id;```4. 使用聚合函数(Aggregate Functions):聚合函数可以对一组值执行计算,并返回单个值。
例如,COUNT()、SUM()、AVG()、MAX()和MIN()等函数。
```sqlSELECT COUNT() AS total_orders, SUM(order_amount) AStotal_amountFROM orders;```5. 使用CASE语句(CASE Expressions):CASE语句可以根据条件对数据进行条件逻辑处理。
实验4:数据库的高级查询操作实验四:数据库的各类数据查询操作一、实验目的掌握SQL程序设计基本规范,熟练运用SQL语言实现数据的各种查询和设计,包括连接查询、嵌套查询、集合查询等。
二、实验内容和要求针对KingbaseES数据库设计单个表针对自身的连接查询,设计多个表的连接查询;设计各种嵌套查询和集合查询。
了解和掌握SQL查询语句各个子句的特点和作用,按照SQL程序设计规范写出具体的SQL查询语句,并调试通过。
三、实验步骤连接查询1. 查询每个学生及其选修课程的情况:select student.*, sc.* from student, sc where student.sno=sc.sno比较: 笛卡尔集: select student.*, sc.* from student, sc自然连接: select student.sno, sname, ssex, sdept, cno, grade from student, sc where student.sno=sc.sno2. 查询每一门课程的间接先行课(只求两层即先行课的先行课):select /doc/3d4429586.html,o, Second.pcno 间接先行课from course First, course Second where First.pcno=/doc/3d4429586.html,o比较:select /doc/3d4429586.html,o, Second.pcno 间接先行课from course First, course Second where First.pcno=/doc/3d4429586.html,o and Second.pcno is not null3. 列出所有学生的基本情况和选课情况, 若没有选课,则只列出基本情况信息:SQL Server 中: select s.sno, sname, ssex,sdept, cno, grade from student s, sc sc where s.sno*=sc.sno4. 查询每个学生的学号, 姓名, 选修的课程名和成绩:select S.sno, sname, cname, grade from student S, course C, sc SC where S.sno=SC.sno and /doc/3d4429586.html,o=/doc/ 3d4429586.html,o5. 查询平均成绩在80分以上的学生姓名Select sname from student,sc where student.sno=sc.sno GROUP BY sc.snoHAVING AVG(sc.grade)>80;高级查询使用带IN谓词的子查询1.查询与’刘晨’在同一个系学习的学生的信息:select * from student where sdept in(select sdept from student where sname='刘晨')比较: select * from student where sdept =(select sdept from student where sname='刘晨') 的异同比较: select * from student where sdept =(select sdept from student where sname='刘晨') and sname<>'刘晨' 比较: select S1.* from student S1, student S2 where S1.sdept=S2.sdept and S2.sname='刘晨'2.查询选修了课程名为’信息系统’的学生的学号和姓名:SQL Server中: select sno, sname from student where sno in (select sno from sc where cno in(select cno from course where cname='信息系统'))3.查询选修了课程’1’和课程’2’的学生的学号:select sno from student where sno in (select sno from sc where cno='1')and sno in (select sno from sc where cno='2') 比较: 查询选修了课程’1’或课程’2’的学生的sno:select sno from sc where cno='1' or cno='2'比较连接查询:select A.sno from sc A, sc B where A.sno=B.sno and /doc/3d4429586.html,o='1' and/doc/3d4429586.html,o='2'使用带比较运算的子查询1.查询比’刘晨’年龄小的所有学生的信息:select * from student where sage<(select sage from student where sname='刘晨')使用带Any, All谓词的子查询2.查询其他系中比信息系(IS)某一学生年龄小的学生姓名和年龄;select sname, sage from student where sage <any< p=""> (select sage from student where sdept='IS')and sdept<>'IS'3.查询其他系中比信息系(IS)学生年龄都小的学生姓名和年龄:select sname, sage from student where sage <all< p="">(select sage from student where sdept='IS')and sdept<>'IS'4.查询与计算机系(CS)系所有学生的年龄均不同的学生学号, 姓名和年龄:select sno,sname,sage from student where sage<>all(select sage from student where sdept='CS')使用带Exists谓词的子查询和相关子查询5.查询与其他所有学生年龄均不同的学生学号, 姓名和年龄:select sno,sname,sage from student A where not exists(select * from student B where A.sage=B.sage andA.sno<>B.sno)6.查询所有选修了1号课程的学生姓名:select sname from student where exists(select * from sc where sno=student.sno and cno='1')7.查询没有选修了1号课程的学生姓名:select sname from student where not exists(select * from sc where sno=student.sno and cno='1')8.查询选修了全部课程的学生姓名:select sname from student where not exists(select * from course where not exists( select * from sc where sno=student.sno and cno=/doc/3d4429586.html,o))12. 查询至少选修了学生95002选修的全部课程的学生的学号:select distinct sno from sc A where not exists(select * from sc B where sno='95002'and not exists(select * from sc C where sno=A.sno and cno=/doc/3d4429586.html,o))13. 求没有人选修的课程号cno和cnamecname:select cno,cname from course C where not exists(select * from sc where /doc/3d4429586.html,o=/doc/ 3d4429586.html,o )14. 查询满足条件的(sno,cno)对, 其中该学号的学生没有选修该课程号cno 的课程select sno,cno from student,course where not exists(select * from sc where cno=/doc/3d4429586.html,o and sno=student.sno)15. 查询每个学生的课程成绩最高的成绩信息(sno,cno,grade):select * from sc A where grade=(select max(grade) from sc where sno=A.sno )集合查询1. 查询数学系和信息系的学生的信息;select * from student where sdept='MA' union select * from student where sdept='IS'2. 查询选修了1号课程或2号课程的学生的学号:select sno from sc where cno='1'Unionselect sno from sc where cno='2'思考:1. 连接查询速度是影响关系数据库性能的关键因素。
高级理论部分简单子查询语法:select......from表where列>(子查询)其中:子查询语句必须放置在一对圆括号内*********⏹习惯上,外面的查询成为父查询,圆括号中嵌入的查询称为子查询⏹注意:SQL编译时:先执行父查询,后执行子查询,即先父后子●SQL执行时:先执行子查询,后执行父查询,即先子后父*********表命名别名(alias) 的方法:----1.使用AS 关键字,符合ANSI标准select列表from表名as表的别名----2.使用空格,简便的方法select列表from表名表的别名●提示:◆1>.般来说,表连接都可以用子查询替换,但反过来却不一定,有的子查询不能用表连接来替换◆2>.查询比较灵活,方便,形式多样,适用于作为查询的筛选条件,而表连接更适合于查看多表的数据●注意:⏹当某个表命名别名后,在select 语句中出现该表的列需要指定表名时,就必须统一使用该表的别名,⏹否则将产生语法错误IN 子查询:◆后面可跟随返回多条记录的子查询,用于检测某列的值是否存在于某个范围中NOT IN 子查询:◆后面可跟随返回多条记录的子查询,用于检测不存在于某个范围中的某列的值EXISTS :◆关键字能够检测数据是否存在◆语法:if exists (子查询)语句其中:如果子查询的结果非空,则Exists将返回真(true),否则返回假(false)NOT EXISTS子句:EXISTS和IN 一样,同样允许添加not关键字实现取反操作,not exists 表示不存在子查询注意事项:⏹子查询语句可以嵌套在SQL 语句中任何表达式出现的位置●嵌套在select 语句的select 子句中的子查询语句如下:⏹select (子查询)from表名子查询结果为单行单列,但不必指定列的别名●嵌套在select 语句的from 子句中的子查询语句如下:⏹select*from (子查询)as表的别名必须为表指定别名⏹在子查询的select 子句中不能出现TEXT 、NTEXT、IMAGE数据类型的列⏹目前大部分数据库管理系统的编译器不支持在子查询语句中查询二进制类型的数据⏹只出现在子查询中而没有出现在父查询中的表不能包含在输出列中SQL为列命名别名的方法◆使用AS 关键字:⏹select列名as列的别名from表名◆使用空格:⏹select列名列的别名from表名◆使用赋值运算符,SQL Server 支持的方式:⏹select列的别名=列名from表名列命名别名时注意的问题:⏹当使用中文列名时,可不写引号,但千万不能使用全角引号,否则查询会出错⏹当使用的英文列名超过两个单词时,必须使用引号将列名括起来合并多个表中的数据的方法:◆联合——合并多个数据集中的行◆子查询——将一个查询嵌套在另一个查询中◆连接——合并多个数据表中的列基础理论部分◆在查询中使用的函数,根据用途,把函数分为四类字符串函数:用于控制返回给用户的字符串◆Charlndex:用来寻找一个指定的字符串在另一个字符串的起始位置◆len:返回传递给它的字符串长度◆upper:把传递给它的字符串转化成大写◆ltrim:清除字符左边的空格◆rtrim:清除字符右边的空格◆right:从字符右边返回指定数目的字符◆replace:替换一个字符串中的字符◆stuff:在一个字符串中,删除指定长度的字符,并在该位置插入一个新的字符日期函数getdate:取得当前的系统日期●例如:select getdate()●返回:今天的日期dateadd:将指定的数值添加到指定的日期部分后的日期●例如:select dateadd(mm,4,‘01/01/1999’)●返回:以当前的日期格式返回05/01/1999datediff:两个日期之间的指定日期部分的区别●例如:selectdatediff(mm,‘01/01/1999’,‘05/01/1999’)●返回:4datename:日期中指定日期部分的字符串形式●例如:selectdatename(dw,‘01/01/2000’)●返回:saturdaydatepart:日期中指定日期部分的整数形式●例如:selectdatepart(day,‘01/15/2000’)●返回:15数学函数⏹abs:取数值表达式的绝对值例如:select abs(-43)返回:43⏹ceiling:取大于或等于指定数值,表达式的最小整数例如: select ceiling(43.5)返回:44⏹floor:取小于或等于指定表达式的最大整数例如:select floor(43.5)返回:44⏹power:取数值表达式的幂值例如:lelect power(5,2)返回: 25⏹round:将数值表达式四舍五入为指定精读例如:select round(43.543,1)例如:43.5⏹sign:对于正数返回+1,对于负数返回-1,对于0返回例如:select sign(-43)返回:43⏹sqrt:取浮点表达式的平方根例如:select sqrt(9)返回:3系统函数◆convert:数据类型转换●例如:select convert(varchar(5)),12345)●返回:字符串12345◆(2)cast:数据类型转换,与couvert相比起语法比较简单些,●例如:select cast(‘2009-03-17’as datetime)●返回:2009-03-17 00:00:00.000◆current_user:返回当前用户的名字●例如:select current_user●返回:你登录的用户名◆datalength:返回用于指定表达式的字节数●例如:select datalength(‘中国A联盟’)●返回:5◆host_name:返回当前用户所登录的计算机的名字●例如:select host_name()●返回:你所登录的计算机的名字◆system_user:返回当前所登录的用户名●例如:select system_user●返回:你当前所登录的用户名◆user_name:从给定的用户ID中返回用户名●例如:select user_name(1)●返回:从任意数据中返回“dbo”SQL Server中的聚合函数sum:返回表达式中所有数值的总和,只能用于数字类型的列,不能够汇总字符avg:返回表达式中所有数值的平均值,只能用于数字类型的列✓注意:如果表名包含了非字母,数字,下划线字符的,在引用时请使用双引号括起来max和min:max返回表达式中的最大值;min返回表达式中的最小值,它们都可以用于数字型,字符型以及日期型/时间性的列 count:返回表达式中非空值的计数,count可用于数字和字符类型的列分组查询一、使用Group By进行分组查询二、使用Having子句进行分组筛选✓注意:having和where子句可以在同一select语句中使用,使用时应按照where-group by-having的顺序。
sqlsugar in查询isugarqueryable sql语句-回复什么是SQLSugar?SQLSugar是一个简单易用且高效的ORM(Object Relational Mapping)库,用于.NET开发中与关系型数据库进行交互。
它支持主流的数据库,如SQL Server、MySQL、Oracle等,提供了很多便捷的API和丰富的功能,使开发人员能够更加便捷地完成数据库操作。
本文将着重介绍SQLSugar 中的in查询和iSugarQueryable接口,并提供相应的SQL语句示例。
什么是in查询?in查询是一种SQL语句中的条件查询方式,在查询时可以指定一个集合作为条件,以检索出符合集合中任意值的数据记录。
它可以避免使用多个or条件的繁琐编写,并且能够简化SQL语句的书写和维护。
in查询示例:SELECT * FROM table_name WHERE column_name IN (value1, value2, ...);以上是典型的in查询语句示例,其中table_name是表名,column_name 是要查询的列名,value1、value2等是要匹配的值。
使用SQLSugar进行in查询的步骤:1. 创建一个SQLSugar实例:var db = new SqlSugarClient(new ConnectionConfig(){ConnectionString = "your_connection_string",DbType = DbType.MySql,IsAutoCloseConnection = true});需要提供数据库连接字符串和数据库类型(这里使用的是MySQL)。
2. 创建一个iSugarQueryable对象:var queryable = db.Queryable<Entity>();这里的Entity是我们要进行查询的数据库表的实体类。
sql 案例SQL(Structured Query Language)是一种用于管理关系型数据库的语言,广泛应用于企业和组织中。
为了更好的理解SQL操作,我们在此介绍几个SQL案例进行分析。
1. 创建表格在SQL中,create table语句用于创建一张表格。
下面是一种常见的create table语句:create table users (id int primary key,name varchar(50),age int,email varchar(100));这条语句将创建一张名为“users”的表格,包括四列:id,name,age和email。
其中,id列是主键,用于保证每一行的唯一性。
2. 插入数据使用insert into语句可以将数据插入到表格中。
下面是一些例子:insert into users (id, name, age, email)values(1,'Tom',18,'***************');insert into users (id, name, age, email)values(2,'Mary',23,'****************');这些语句将向“users”表格中插入两行数据。
每行数据包括四个值,分别对应id,name,age和email列。
3. 查询数据使用select语句可以查询表格中的数据。
下面是一些例子:select * from users;这句语句将返回“users”表格中所有行的数据。
select name, age from users;这句语句将返回“users”表格中所有行的name和age列。
select * from users where age < 20;这句语句将返回“users”表格中所有age列小于20的行数据。
4. 更新数据使用update语句可以更新表格中的数据。
sql中高级查询语法【实用版】目录1.SQL 简介2.SQL 的基本查询语法3.SQL 的高级查询语法4.SQL 的实践应用正文一、SQL 简介SQL(Structured Query Language,结构化查询语言)是一种用于管理关系型数据库的编程语言。
它可以用于查询、插入、更新和删除数据库中的数据,还可以用于创建和管理数据库表、视图等。
SQL 具有丰富的功能和高度的灵活性,是目前应用最广泛的数据库语言之一。
二、SQL 的基本查询语法1.SELECT 语句SELECT 语句是 SQL 中最基本的查询语句,用于从数据库表中检索数据。
其基本语法如下:```SELECT column1, column2,...FROM table_nameWHERE condition;```其中,column1、column2 等表示要查询的列名,table_name 表示要查询的表名,condition 表示查询条件。
2.JOIN 语句JOIN 语句用于连接两个或多个表,以便在查询结果中显示它们之间的关系。
常见的 JOIN 方式有内连接(INNER JOIN)、左外连接(LEFT JOIN)、右外连接(RIGHT JOIN)和全外连接(FULL OUTER JOIN)。
3.GROUP BY 和 HAVING 语句GROUP BY 语句用于对查询结果进行分组,HAVING 语句用于对分组后的结果进行筛选。
其基本语法如下:```SELECT column1, column2,..., COUNT(*)FROM table_nameGROUP BY column1, column2,...HAVING condition;```4.ORDER BY和ASC/DESC关键字ORDER BY 语句用于对查询结果进行排序,ASC 表示升序排序,DESC 表示降序排序。
5.DISTINCT 关键字DISTINCT 关键字用于去除查询结果中的重复行。
查询一条数据的sql语句查询一条数据的SQL语句随着数据库的应用日益广泛,SQL语言的使用越来越频繁。
在实际的工作中,我们常常需要查询数据库中的数据。
而如何编写一个高效的SQL语句,查询一条数据,是每个程序员需要掌握的基本技能。
下面就让我们来学习一下。
一、SQL语句简介SQL(Structured Query Language),结构化查询语言,是数据库中用来操作数据的语言。
它具有简单易学、灵活性强、功能完备等特点,因此被广泛应用。
SQL语句由多个关键字组成,包括SELECT、FROM、WHERE等。
其中SELECT用于选择需要查找的数据,FROM用于指定数据表,WHERE用于限制数据搜索范围。
另外,SQL还有一些比较高级的语法和函数,如COUNT、SUM、GROUP BY等。
二、查询单条数据的SQL语句查询单条数据的SQL语句一般使用SELECT语句,语法如下:SELECT column_name FROM table_name WHERE condition;具体参数说明如下:- column_name: 需要查找的列名;- table_name: 数据表名;- condition: 查询条件,可以是一个或多个条件。
例如,我们需要查找学生表中姓名为“张三”的记录,那么SQL语句就可以写成:SELECT * FROM student WHERE name='张三';其中, * 号表示查询全部列。
如果只想查询某些特定列,可以将列名分别用逗号隔开,如:SELECT name, age FROM student WHERE name='张三';三、优化SQL语句的方法虽然SQL语句简单易学,但当数据量比较大时,查询速度会变得比较缓慢。
为了提高SQL查询的效率,我们可以采取以下方法:1. 创建索引索引是数据库中优化查询的一种常用方法。
它是基于某个或多个列(列值)排序的一种数据结构,可以提高查询数据的速度。
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 WHERE deptno in ( SELECT deptno FROM dept WHERE dname LIKE 'A%');
3、多列子查询 SELECT deptno,ename,job,sal FROM EMP WHERE (deptno,sal) IN (SELECT deptno,MAX(sal) FROM EMP GROUP BY deptno);
4、内联视图子查询 (1)SELECT ename,job,sal,rownum FROM (SELECT ename,job,sal FROM EMP ORDER BY sal); (2)SELECT ename,job,sal,rownum FROM ( SELECT ename,job,sal FROM EMP ORDER BY sal) WHERE rownum<=5;
5、在HAVING子句中使用子查询 SELECT deptno,job,AVG(sal) FROM EMP GROUP BY deptno,job HAVING AVG(sal)>(SELECT sal FROM EMP WHERE ename='MARTIN');
基本条件查询
比较运算符:>,>=,<,<=,=,!= between a and b,in(a,b,c),not exists,is null,like „%_‟,or,and, any,all等
把某一字段中内容在特定范围内的记录查询出来 SELECT StudentID, Score FROM SCore WHERE Score BETWEEN 60 AND 80
把某一字段中内容与所列出的查询内容列表匹配的记录查询出来 SELECT SName AS 学员姓名,SAddress As 地址 FROM Students WHERE SAddress IN ('北京','广州','上海')
SQL数据查询语句 SELECT查询语句是由七个子句构成,其中SELECT和FROM子句是一个完整SELECT查询语句必须要有的,其它的子句可以根据具体需要任选。上述的每个子句功能说明如下:
(1)SELECT子句 列出所有要求SELECT语句进行检索的数据项,这些项可能取自数据库中关系表的列,也可以是SQL在执行查询时进行计算的表达式。这里的ALL和DISTINCT选项,表示查询出的结果中是否容许有内容重复的行出现,缺省时是ALL项,表示容许有重复的行出现,而*则表示查询出所指定关系表中所有的列。
(2)FROM子句 FROM子句列出包含所要查询的数据关系表。 (3)WHERE子句 WHERE子句告诉SQL只查询某些关系表中满足一定要求的行的数据,查询要求由WHERE子句中的查询条件确定。
(4)GROUP BY子句 GROUP BY子句指定当前查询是汇总查询,即不是对根据每行产生一个查询结果,而是对相似的行进行分组,然后再对每组产生一个汇总查询的结果。
(5)HAVING子句 HAVING子句告诉SQL只对由GROUP BY所得到的某些行组的结果进行过滤,选择出满足分组条件的分组。
(6)ORDER BY子句 ORDER BY子句确定是否将查询出的结果按一列或多列中的数据进行排序,缺省时是不排序的。
(7)INTO子句 INTO子句确定是否将查询出的结果存入一张新的关系表中,缺省时只将查询出现的结果显示在屏幕上。这是非标准SELECT语句中的子句,但目前绝大多数实际应用的SQL数据库系统的SQL语言提供了这一选项。 下面是一些使用SELECT查询语句进行数据查询的示例。 例1:列出销售额超过6000元的销售人员的姓名、销售目标和超过销售目标的销售额。 SELECT NAME,QUOTA,(SALES_QUOTA) FROM SALESREPS WHERE SALES>6000 例2:查出1999年最后一个季度的订单情况。 SELECT ORDER_NUM,ORDER_DATE,PRODUCT,AMOUNT FROM ORDERS WHERE ORDER_DATE BETWEEN "01-OCT-99" AND "31-DEC-99" 例3:查出名称是以ABC开头的产品订单情况。 SELECT ORDER_NUM,ORDER_DATE,PRODUCT,AMOUNT FROM ORDERS WHERE PRODUCT LIKE "ABC%" 例4:列出所有的销售处,按区域名字母顺序排列。 SELECT CITY,REGION FROM OFFICE ORDER BY REGION ASC 在这里ASC表示升序,如果表示降序可用DESC。 例5:列出每个销售人员以及他们工作的城市和区域的情况。 SELECT NAME,CITY,REGION FROM SALESREPS,OFFICE WHERE REP_OFFICE=OFFICE 例6:查出有多少销售员的销售额超过了其目标额,以及他们的销售额总和。 SELECT COUNT(NAME),SUM(SALES) FROM SALESREPS WHERE SALES>QUOTA 注意本例中使用了函数,与前面介绍的查询不同之处在于:它不仅仅是从数据库中查出某些数据,并且对查出的数据进行多种计算处理,并将结果作为查询结果输出。SQL语言提供了6种处理函数,帮助完成不同的处理工作。这6种函数是:
▲SUM(),用于计算表中某一列的总和。 ▲AVG(),用于计算表中某一列的平均值。 ▲MIN(),用于选择表中某一列的最小值。 ▲MAX(),用于选择表中某一列的最大值。 ▲COUNT(),用于计算表中某一列中值的个数。 ▲COUNT(*),用于计算某张表的行数。
例7:对于每两个或更多的销售员的销售点,计算其中所有销售员的总销售员的总销售目标值和总销售员金额。
SELECT CITY,SUM(QUOTA),SUM(SQLESREPS.SALES) FROM OFFICE,SALESREPS GROUP BY CITY HAVING COUNT(*)>=2 SELECT查询处理工作过程描述总结: ▲形成FROM子句所指定的目标表(表的乘积)。如果FROM子句仅指定一个表,则此表为目标表。
▲如果有WEHER子句,则将其搜索条件用于目标表中的每一行,保留使搜索条件为TRUE的行,剔除使搜索条件为FALSE或NULL的行。若WHERE子句中包含另一个SELECT
查询语句,先去完成另一个SELECT查询语句操作,然后将其查询结果用到本次查询的搜索条件中,进行检测。
▲若有GROUP BY子句,则对目标表中所保留的行进行分组,以使得每组中的各行具有相同的分组列的列值。
▲若有HAVING子句,则将其搜索条件作用于每个行组,保留那些使搜索条件为TRUE的组,剔除使搜索条件为FALSE或NULL的行。若HAVING子句中包含另一个SELECT查询语句,先去完成另一个SELECT查询语句操作,然后将其查询结果用到本次查询的HAVING子句搜索条件中,进行检测。
▲对于所保留的每一行(或行组),计算由SELECT子句所指定的每项值,对于简单的列指定,取当前行(或行组)中该列的值;对于列函数,若有GROUP BY子句,则用当前行组作为参数;否则,用所有行作为其参数;剔除SELECT子句中没有指定的各列。本文来自编程入门网---www.bianceng.cn
▲若SELECT子句后选择了DISTINCE,则将所生成结果中的所有内容重复的行剔除掉。 ▲若有ORDER BY子句,则按相应的排序设置对结果进行排序。 有三种基本的子查询。它们是: ●在通过 IN 或由 ANY 或 ALL 修改的比较运算符引入的列表上操作。 ●通过未修改的比较运算符引入且必须返回单个值。 ●通过 EXISTS 引入的存在测试。 1.带in的嵌套查询
select emp.empno,emp.ename,emp.job,emp.sal from scott.emp where sal in (select sal from scott.emp where ename=‟‟WARD‟‟); 上述语句完成的是查询薪水和WARD相等的员工,也可以使用not in来进行查询。
2.带any的嵌套查询 通过比较运算符将一个表达式的值或列值与子查询返回的一列值中的每一个进行比较,只要有一次比较的结果为TRUE,则ANY测试返回TRUE。
select emp.empno,emp.ename,emp.job,emp.sal from scott.emp where sal >any(select sal from scott.emp where job=‟‟MANAGER‟‟); 等价于下边两步的执行过程: (1)执行“select sal from scott.emp where job=‟‟MANAGER‟‟” (2)查询到3个薪水值2975、2850和2450,父查询执行下列语句: select emp.empno,emp.ename,emp.job,emp.sal from scott.emp where sal >2975 or sal>2850 or sal>2450;
3.带some的嵌套查询 select emp.empno,emp.ename,emp.job,emp.sal from scott.emp where sal =some(select sal from scott.emp where job=‟‟MANAGER‟‟); 等价于下边两步的执行过程: (1)子查询,执行“select sal from scott.emp where job=‟‟MANAGER‟‟”。 (2)父查询执行下列语句。 select emp.empno,emp.ename,emp.job,emp.sal from scott.emp where sal =2975 or sal=2850 or sal=2450; 带【any】的嵌套查询和【some】的嵌套查询功能是一样的。早期的SQL仅仅允许使用【any】,后来的版本为了和英语的【any】相区分,引入了【some】,同时还保留了【any】关键词。