博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
T-SQL语句学习(二)
阅读量:5208 次
发布时间:2019-06-14

本文共 3552 字,大约阅读时间需要 11 分钟。

当我们在第一讲中把数据库和表单都建立起来后,那么现在怎么把学生等数据填到对应的表中又成为了一个问题。更加会想到,怎么把存在于数据库中的数据按照自己的意愿调出来也会是一个问题。

所以,本节我们会一起来学习怎么把数据存储到数据库中,以及一些基本的查询技术。

1. 插入数据

  1.1 我们需要在Student添加如下数据项:

View Code
1 INSERT INTO Student(SID,SNAME,SAGE,SSEX,SFirC,SSecC,SThiC,SFouC,SFivC)  2    VALUES ('10001','学生一',19,'男',67,66,78,70,80);  3 INSERT INTO Student(SID,SNAME,SAGE,SSEX,SFirC,SSecC,SThiC,SFouC,SFivC)  4    VALUES ('10002','学生二',19,'男',70,80,75,85,80);  5 INSERT INTO Student(SID,SNAME,SAGE,SSEX,SFirC,SSecC,SThiC,SFouC,SFivC)  6    VALUES ('10003','学生三',18,'女',80,81,85,90,87);  7 INSERT INTO Student(SID,SNAME,SAGE,SSEX,SFirC,SSecC,SThiC,SFouC,SFivC)  8    VALUES ('10004','学生四',20,'女',85,90,91,95,97);  9 INSERT INTO Student(SID,SNAME,SAGE,SSEX,SFirC,SSecC,SThiC,SFouC,SFivC) 10    VALUES ('10005','学生五',18,'男',66,68,69,62,60);

  这里说明几点:

    a、我这里是插入所有的列数据,如果你只想插入部分的列数据,那么"Student(SID,SNAME,SAGE,SSEX,SFirC,SSecC,SThiC,SFouC,SFivC)"中括号里面的列名只填入你想插入的列就ok了。当然,在"VALUES ('10001','学生一',19,'男',67,66,78,70,80)”中括号里面的只也只需要填对应的列数据。

    b、特别要注意,其一一对应的关系,如果不对应而类型不一致,MSSQL2000系统还能够检测出错误。如果是类型相同,那么系统将不能检测出错误。在之后的查错过程,这样的错误将是很难再检测出来的。

2. 基本查询技术的学习

View Code
1 SELECT [ALL | DISTINCT] 
<目标列表达式>
[,
<目标列表达式>
]... 2 FROM
<表名或者视图名>
3 [WHERE
<条件表达式>
] 4 [GROUP BY
<列名1>
[HAVING
<条件表达式>
]] 5 [ORDER BY
<列名2>
[ASC | DESC]]; 6 7 8 -- []里面的内容为可选项

 2.1 单表查询

 2.1.1 选择表中的若干列

  a、如果你想返回Student表的所有数据。

View Code
1 USE School 2 SELECT *   -- 用*号代表所有列 3 FROM Student

b、如果你知道Student表的所有列。

View Code
1 USE School 2 SELECT SID,SNAME,SAGE,SSEX,SFirC,SSecC,SThiC,SFouC,SFivC 3 FROM Student

c、如果你想查询SID,SNAME列的数据。

View Code
1 USE School 2 SELECT SID,SNAME 3 FROM Student

d、查询经过计算的值,如出生年份。

View Code
1 USE School 2 SELECT SID ,SNAME ,2012-SAGE 3 FROM Student

2.1.2 选择表中的若干元组(元组理解为行,属性理解为列)

a、如果想去掉结果表中的重复行,必须指定DISTINCT关键词。

View Code
1 USE School 2 SELECT DISTINCT SID 3 FROM Student

b、查询满足条件的元组

 这里就需要通过WHERE子句实现。

                                                                           常用的查询条件

查询条件 谓词
比较 =,>,<.>=,<=,!=,<>,!>,!<,NOT+比较谓词
确定范围 BETWEEN AND,NOT BETWEEN AND
确定集合 IN,NOT IN
字符匹配 LIKE,NOT LIKE
空值 IS NULL,IS NOT NULL
多重条件 AND,OR,NOT

  b.1 查询所有学生中性别为男的名单。

View Code
1 USE School 2 SELECT  SNAME 3 FROM Student 4 WHERE SSEX = '男'

 b.2 查询所有年龄小于20岁的学生姓名和年龄。

View Code
1 USE School 2 SELECT  SNAME,SAGE 3 FROM Student 4 WHERE SAGE<20

 字符匹配的问题这里就不做讨论了。

2.1.3 ORDER BY子句

我们可以用ORDER BY子句对查询结合按照一个或多个属性列的升序或降序排列,缺省值为升序。

 a.1 查询所有学生的ID号和第一门课程的成绩,查询结果按第一门课程的成绩升序排列。

View Code
1 USE School 2 SELECT  SID,SFirC 3 FROM Student 4 ORDER BY SFirC DESC

a.2 查询所有学生的ID号和第一门课程的成绩,查询结果按第一门课程的成绩降序排列。

View Code
1 USE School 2 SELECT  SID,SFirC 3 FROM Student 4 ORDER BY SFirC ASC

2.1.4 聚集函数

SQL技术中提供了许多的聚集函数,主要有:

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

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

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

AVG([DISTINCT | ALL] <列名>)        求平均值

MAX([DISTINCT | ALL] <列名>)        求最大值

MIN([DISTINCT | ALL] <列名>)         求最小值

a、查询学生的总个数。

View Code
1 USE School 2 SELECT  COUNT(*) 3 FROM Student

b、查询第一个课程成绩最高的分数。

View Code
1 USE School 2 SELECT  MAX(SFirC) 3 FROM Student

c、查询所有学生的平均成绩

View Code
1 USE School 2 SELECT  AVG(SFirC) 3 FROM Student

等等之类的,都可以测试下... ...

2.1.5 GROUP BY 子句

该子句将查询结合按某一列或多列的值分组,值相等的为一组。

a、统计男、女生个数。

View Code
1 USE School 2 SELECT  SSEX,COUNT(SID) 3 FROM Student 4 GROUP BY SSEX

b、查询第一门课程平均成绩大于70的性别。

View Code
1 USE School 2 SELECT  SSEX 3 FROM Student 4 GROUP BY SSEX 5 HAVING AVG(SFirC) > 70   -- HAVING 子句必须利用到聚合函数 6

WHERE 与 HAVING 的区别:[重要]

      1、WHERE 是作用于基本表或者视图,从中选择满足条件的元组。

      2、HAVING是作用域组(GROUP BY聚合的组),从中选择满足条件的组。

 

这里只是说了一些基本的技术,需要配合大量的练习才能熟悉这些子句、关键字的使用。

 

 

 

 

转载于:https://www.cnblogs.com/xuxu8511/archive/2012/03/24/2415895.html

你可能感兴趣的文章
20.C++- &&,||逻辑重载操作符的缺陷、,逗号重载操作符的分析
查看>>
静态变量数组实现LRU算法
查看>>
在SQL中怎么把一列字符串拆分为多列
查看>>
中文系统 上传file的input显示英文
查看>>
css样式写一个三角形
查看>>
比callback更简洁的链式执行promise
查看>>
android permission
查看>>
javascript获取textarea中所选文本的开始位置、结束位置和选择的文本
查看>>
【译】在Asp.Net中操作PDF - iTextSharp - 使用字体
查看>>
事务备份还原分离附加
查看>>
JSch - Java实现的SFTP(文件上传详解篇)
查看>>
一些注意点
查看>>
.net 文本框只允许输入XX,(正则表达式)
查看>>
C#修饰符
查看>>
20.核心初始化之异常向量表
查看>>
[BSGS][哈希]luogu P3846 可爱的质数
查看>>
Python 第四十五章 MySQL 内容回顾
查看>>
iostat参数说明
查看>>
js 封装获取元素的第一个元素
查看>>
iOS 获取Home键指纹验证
查看>>