smhy8187

 

SQL查询

SQL查询:

一、        单表查询

1、             选择表中的若干列

SELECT 字段名

FROM  表名

WHERE 查询条件

2、             选择表中的若干元组

1)             消除取值重复的行(DISTINCT)

2)             查询满足条件的元组

比较大小、确定范围(BETWEEN….AND…,NOT BETWEEN…AND…)、确定集合(IN)、字符匹配(LIKE)、涉及空值的查询(IS NULLIS NOT NULL)、多重条件查询(ANDOR

SELECT 字段名

FROM  表名

WHERE 价格>2000or部门=’21’

对查询结果排序

ORDER BY 字段名 ASCDESC

3、             使用集函数

COUNT[DISTINCT |ALL]*)统计元组个数

COUNT[DISTINCT |ALL]<列名>)计算一列中值的个数

SUM[DISTINCT |ALL] <列名>)计算一列值的总和(此列必须是是数值型)

AVG[DISTINCT |ALL] <列名>)计算一列值的平均值(此列必须是是数值型)

MAX[DISTINCT |ALL] <列名>)求一列值中的最大值

MIN[DISTINCT |ALL] <列名>)求一列值中的最小值

4、             对查询结果分组

GROUP BY

Having 短语作用于组,从中选择满足条件的组。

查询各个课程号与相应的选课人数

SELECT Cno,COUNT(Sno)

FROM SC

GROUP BY Cno;

Cno         count(sno)

1                                             22

2                                             34

3                                             44

4                                             33

5                                             48

二、        连接查询

1、             等值与非等值连接查询

2、             自然连接:按照两个表中的相同属性进行等值连接,且目标列中去掉了重复的属性列,但保留了所有不重复属性列,则称之为自然连接。

3、             自身连接

4、             外连接

5、             复合条件连接:Where 子句中有多个条件的连接操作,称为复合条件连接。

查询选修了2号课程且成绩在90分以上的所有学生。

SELECT Student.Sno,Sname

FROM Student,SC

WHERE Student.Sno=SC.Sno AND SC.Cno=’2’AND SC.Grade>=90;

三、        嵌套查询

SQL语言中,一个SELECT-FROM-WHERE语句称为一个查询块。将一个查询块嵌套在另一个查询块的WHERE子句或HAVING短语的条件中的查询称为嵌套查询或子查询。

嵌套查询的求解方法是由里向外处理。

1、             带有IN谓词的子查询

查询与“刘晨”在同一个系学习的学生。

A、分步查询:

1)             确定“刘晨”所在系名

SELECT Sdept

FROM Student

WHERE Sname=’刘晨’;

结果为:

Sdept

IS

2)查找所有在IS系学习的学生

SELECT Sno,Sname,Sdept

FROM Student

WHERE Sdept =IS

B、用嵌套查询:

SELECT Sno,Sname,Sdept

FROM Student

WHERE Sdept IN

(SELECT Sdept

FROM Student

WHERE Sname=’刘晨’);

38、查询选修了课程名为‘信息系统’的学生学号和姓名

2、             带有比较运算符的子查询

带有比较运算符的子查询是指父查询与子查询之间用比较运算符进行连接。当用户能确切知道内层查询返回的是单值时,可用>\<\=\>=\<=\!=\<>等比较运算符。

3、             带有ANY ALL谓词的子查询

>ANY

<ANY

>=ANY

<=ANY

!=/<>ANY

>ALL

<ALL

>=ALL

<=ALL

=ALL

!=ALL/<>ALL

4、             带有EXISTS 谓词的子查询

带有EXISTS谓词的子查询不返回任何实际数据,它只产生逻辑真值和逻辑假值。

334、集合查询

若要把多个SELECT语句的结果合并为一个结果,可用集合操作来完成。集合操作主要包括并操作UNION、交操作INTER-SELECT和差操作MINUS。但标准SQL语言中没有直接提供集合交操作和集合差操作,可用其它方法实现。实现方法依查询不同而不同。

小结:

SELECT 语句是SQL的核心语句,其语句成份多样,尤其是目标列表达式和条件表达式,可以有多种可选形式,这里总结一下它们的一般格式。

SELECT[ALL/DISTINCT]<目标列表达式>[别名][<目标列>[别名]]

FROM<表名或视图名>[别名][<表名或视图名>[别名]]

[WHERE<条件表达式>]

[GROUP BY <列名1>[HAVING <条件表达式>]]

[ORDER BY <列名2>[ASC/DESC]]

1、         目标列有以下格:

1*

2<表名>.*

3count(distinct/all)

4[<表名>.]<属性列名表达式> [<表名>.]<属性列名表达式>

2、         WHERE子句的条件表达式有以下可选格式:

1、         <属性列名>  Ð  <属性列名>/常量/[ANY/ALL]SELECT 语句)

2、         <属性列名>[NOT ]BETWEEN <属性列名>/常量(SELECT 语句)AND <属性列名>/常量(SELECT 语句)

3、         <属性列名>[NOT] IN (<1>[,<2>…])/(select 语句)

4、         <属性列名>[NOT] LIKE <匹配串>

5、         <属性列名> IS [NOT]  NULL

6、         [NOT] EXISTS SELECT 语句)

7、         <条件表达式> AND/OR <条件表达式>/<条件表达式> AND/OR <条件表达式>

posted on 2007-06-08 16:54  new2008  阅读(453)  评论(0编辑  收藏  举报

导航