SQL Sever 2012学习总结之SQL语句SELECT

整个SELECT语句,根据WHERE子句的条件表达式从FROM子句指定的基本表、视图或派生表中找出满足条件的元组,再按SELECT子句中的目标表达式选出元组中的属性值形成结果表。

以下是其基本格式 <>表示必须语句,[ ],( )表示非必须语句

SELECT [ALL|DISTINCT] <目标列表达式> [,<目标列表达式>]...

FROM <表名或视图名> [,<表名或视图名] | (<SELECT语句>) [AS] <别名>

[WHERE <条件表达式> ]

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

[ORDER BY <列名2> [ASC|DESC]];

SELECT 的 <目标表达式>可填如下

1. *   查询所有表的列

2.<表名>.*  查询某表所有列

3.聚集函数

COUNT ([DISTINCT|ALL] <列名>) 或者 COUNT(*)

SUM   ([DISTINCT|ALL] <列名>)

AVG   ([DISTINCT|ALL] <列名>)   

MAX   ([DISTINCT|ALL] <列名>)

MIN   ([DISTINCT|ALL] <列名>)

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

属性列名表达式 可以是由属性列、作用于属性列的聚集函数和常量的任意算数运算

WHERE 子句的条件表达式语句


<列属性名> [NOT] [BETWEEN] [<谓词>] <列属性名> [AND] [同前 ]

<列属性名> [NOT] [BETWEEN]  [<谓词>]  <'常量'>  [AND] [同前 ]

<列属性名>  <谓词> [ANY|ALL](SELECT语句)


<列属性名>  [NOT] [IN] <集合>|(SELECT 语句)

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

[NOT] EXISTS (SELECT语句)

<列属性名>   IS [NOT] NULL

AND .....OR......

TIPS:

WHERE 语句并非SELECT所必须,且聚集函数无法出现在WHERE函数

TIPS:

asc是指定列按升序排列(即:从小到大排序) ---降序排列

desc则是指定列按降序排列(即:从大到小排序) ---升序排列

排序子句语法:order by 列名 asc/desc

练习

 试用SQL查询语句表达下列对3.2题中教务管理数据库的三个基本表S、SC、C查询: 

 ⑴ 统计有学生选修的课程门数。 

SELECT COUNT(DISTINCT C#)

FROM SC;

 ⑵ 求选修4号课程的学生的平均年龄。

SELECT AVG(AGE)  
FROM S,SC
WHERE S.S#=SC.S# AND C#=’4’AND SEX=’F’;  

 ⑶ 求LIU老师所授课程的每门课程的学生平均成绩。

SELECT C.C#,AVG(GRADE)  
FROM SC,C  
WHERE SC.C#=C.C# AND TEACHER=’LIU’;

 ⑷ 统计每门课程的学生选修人数(超过10人的课程才统计)。要求输出课程号和选修人数,查询结果按人数降序排列,若人数相同,按课程号升序排列

SELECT C#,COUNT(S#)  
FROM SC  GROUP BY C#  
HAVING COUNT(*)>10  
ORDER BY 2 DESC,1;

⑸ 检索学号比WANG同学大,而年龄比他小的学生姓名。

SELECT SNAME  
FROM S  
WHERE S#>ALL(SELECT S#  FROM S  WHERE SNAME=’WANG’  AND AGE<ALL(SELECT AGE  FROM S  WHERE SNAME=’WANG’); 

⑹ 检索姓名以WANG打头的所有学生的姓名和年龄。

SELECT SNAME,AGE  
FROM S  
WHERE SNAME LIKE ‘WANG%’

⑺ 在SC中检索成绩为空值的学生学号和课程号。

SELECT S#,C#  
FROM SC  
WHERE GRADE IS NULL;

⑻ 求年龄大于女同学平均年龄的男学生姓名和年龄。

SELECT SNAME,AGE  
FROM S  
WHERE SEX=’M’AND AGE>(SELECT AVG(AGE)  FROM S  WHERE SEX=’F’);

⑼ 求年龄大于所有女同学年龄的男学生姓名和年龄。

SELECT SNAME,AGE  
FROM S  
WHERE SEX=’M’AND AGE>ALL(SELECT AGE  FROM S  WHERE SEX=’F’);

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值