数据库中select语句的限定

select语句的限定一:

SELECT子句中的规定      

1)SELECT子句描述查询输出的表格结构,即输出值的列名或表达式。其形式如下:     SELECT [ ALL|DISTINCT ] <列名或列表达式序列> | *  条件表达式中的算术比较操作      

例  ①在表SC中检索男同学选修的课程号。 SELECT  DISTINCT C# FROM  S,SC WHERE S.S# =SC.S# AND SEX ='M'; ②检索每个学生的出生年份。 SELECT  S#,SNAME,2014-AGE FROM  S;

2)条件表达式中可出现算术比较运算符(<,<=,>,>=,=,!=),也可以用“BETWEEN … AND …”比较运算符限定一个值的范围。

例  ①检索18~20岁的学生姓名。SELECT  SNAME FROM  S WHERE AGE>=18 AND AGE<=20; 或  SELECT  SNAME FROM  S WHERE AGE BETWEEN 18 AN  

3)列和基本表的改名操作

例  ①在表S中检索每个学生的出生年份,输出的列名为STUDENT_NAME和BIRTH_YEAR。 SELECT  SNAME AS STUDENT_NAME,2014-AGE AS BIRTH_YEAR FROM  S;

select语句的限定二:

字符串的匹配操作     

条件表达式中字符串匹配操作符是“LIKE”。在表达式中可使用两个通配符:     百分号(%):与零个或多个字符组成的字符串匹配。     下划线(_):与单个字符匹配。

例   ①检索以字母D打头的学生姓名。          SELECT  SNAME FROM  S WHERE  SNAME  LIKE  'D%'; ②检索以字母T打头,以M结束的三个字母组成的学生姓名。          SELECT  SNAME FROM  S WHERE  SNAME  LIKE  'T_M';

集合的并、交、差操作   当两个子查询结果的结构完全一致时,可以让这两个子查询执行并、交、差操作。并、交、差的运算符为UNION、INTERSECT和EXCEPT。

例   (SELECT  查询语句1)

UNION  [ALL]      

 (SELECT  查询语句2)                                                      

                                                                                       [ALL]未消除重复元组  

(SELECT  查询语句1)

INTERSECT  [ALL]        

(SELECT  查询语句2)        

(SELECT  查询语句1)

EXCEPT  [ALL]        

(SELECT  查询语句2)

空值的比较操作     SQL中允许列值为空,空值用保留字NULL表示。

例 检索年龄为空值的学生姓名。          

SELECT  SNAME

FROM  S        

WHERE  AGE  IS  NULL;

select语句的限定三:

集合的比较操作     

SQL提供SELECT语句的嵌套子查询机制。子查询是嵌套在另一个查询中的SELECT语句。

(1)集合成员资格的比较       元组  [NOT]  IN (集合)

例 检索至少不学C2和C4两门课程的学生学号。  

SELECT  S# FROM  S

WHERE  S# NOT IN(SELECT  S#                                    

                                   FROM  SC                                    

                                   WHERE C# IN ('C2','C4'));

(2)集合成员的算术比较       元组θSOME[ALL] (集合)

例 ①检索学习C2课程的学号与姓名。

SELECT  S#,SNAME FROM  S WHERE S# =SOME(SELECT  S#                                     FROM  SC                                    

WHERE C# ='C2');

②检索至少有一门成绩超过学生S4一门成绩的学生学号。

SELECT  DISTINCT  S# FROM  SC WHERE SCORE>SOME(SELECT  SCORE                                             FROM  SC                                            

                 WHERE S# ='S4');

③检索不学C2课程的学生姓名和年龄。

SELECT   SNAME,AGE FROM  S                                注意:

WHERE S# < > ALL(SELECT  S#                                   IN与“=SOME”等价                                     FROM  SC                                                                        NOT  IN与“< >ALL”等价                           

WHERE C# =‘C2’);                            

④检索平均成绩最高的学生学号。                    

SELECT  S#                                                                                 select max(avg(grade))                

 FROM  SC                                                                                     from sc FROM  SC             GROUP BY S#                                                                              group by s#;此种写法错误,    HAVING AVG(SCORE)>=ALL(SELECT  AVG(SCORE)                聚合函数不能进行复合运算。                                                                  GROUP BY S#);

(3)空关系的测试                    [NOT] EXISTS (集合)

例:检索学习课程号为C2的学生学号与姓名。

SELECT  S#,SNAME

FROM  S

WHERE EXISTS          

(SELECT  *            

FROM  SC            

WHERE C#='C2' AND S.S# =SC.S#);

(4)重复元组的测试                [NOT] UNIQUE (集合)

例 检索平均成绩超过80分的学生学号和平均成绩。

SELECT  S#,AVG(SCORE)

FROM  SC

GROUP BY S#            

HAVING AVG(SCORE) >80;

导出表形式:

SELECT  S#,AVG_SCORE

FROM  (SELECT  S#,AVG(SCORE)                

FROM  SC                

GROUP BY S#)          

 AS RESULT(S#,AVG_SCORE)

WHERE AVG_SCORE>80;

导出表的使用     SQL2允许在FROM子句中使用子查询。如果在FROM子句中使用了子查询,那么要给子查询的结果起个表名和相应的列名。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

用编程写诗

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值