首先在这申明,sqlserver是不区分大小写的。
SqlServer插入语句
insert into <表名> [<属性1><属性2><属性3>] values(<常量1><常量1><常量1>)
SqlServer修改数据语句
update <表名> set <列名>=<表达式>,<列名>=<表达式> [where <条件>]
SqlServer删除数据语句
delete from <表名> [where<条件>]
查询中消除重复的行
select distinct Sno from sc;
where子句后面常跟的查询条件
- 比较—(=、<、>、>=、<=、!=、!>、!<(不小于)、)
- 确定范围—-(between and、not between and)
- 确定集合—–(in、not in)
- 字符匹配——(like、not like)
- 空值——(is null,is not null)
- 多重条件—–(and、or、not)
下面是上述的例子
select Sname from student where sdept='cs';
select Sname from student where sage between 20 and 30;(如果用not between and 就是不在这个范围的)
//使用谓词来查找属性是否属于指定集合元祖
select sname from student where sdept in('cs','ma','is');
select sname from student where sname like '刘%';
select sname from student where sname like '_勇';
// %用来代表任意长度的字符串
// _下划线代表是任意字符
select sno from sc where grade is not null;
select sname from student where sdept='cs' and sage<20;
order by子句
用户可以用order by子句对查询结果按照一个或多个属性列进行排序,默认是升序。
select sno ,grade from sc where cno='3' order by grade desc;//升序是asc
聚集函数
- count(*) ——-统计元祖的个数
- count(distinct 列名)——统计某个列值的个数
- sum(distinct 列名)——–统计列的总和
- avg(distinct 列名)——-计算列的平均值
- max(distinct 列名)——-计算列的最大值
- min(distinct 列名)——-计算列的最小值
select AVG(grade) from sc ;
注意:
where 子句是不能用聚集函数作为条件表达式,聚集函数只能用于select 子句和group by 的having子句中。
group by子句
顾名思义,这个子句将查询结果按照某一列或者多列值分组,值相等的为一组。对查询结果分组是为了细化聚集函数作用对象,分组后,聚集函数将作用于每一组,每一组都有一个函数值。
select cno,COUNT(sno) from SC group by Cno;
//查询课程号下对应的选课人数。
// *凡是在group by后面出现的字段,必须要在select后面出现,或者该字段以聚合函数出现在select后面* 详细的理由如下:
//这句话的意思,就是将相同学号的grade列的属性值求平均值
select sno ,avg(grade) from sc group by sno;
正确的结果:

如果这时你不写sno,没问题,你自己知道是个啥就ok。
但是如果你这时写了个下面这个
select grade ,avg(grade) from sc group by sno;
//就会产生错误选择列表中的列 ‘sc.Grade’ 无效,因为该列没有包含在聚合函数或 GROUP BY 子句中。
//很明显呀,你是按照学号排,你把分组之后的结果和grade放在一起,你觉得符合人之常情吗,明白了没,这么通俗易懂!!!!!!
分组重要的是一一匹配,如果这个不理解可以阅读下面文章
http://blog.163.com/xiaopengyan_109/blog/static/149832173201081983042803/
having
having一般是跟在group by子句后面,是对分组之后的信息筛选。
where作用对象是基本表或者是视图,而having作用于组,从中选择满足条件的组。
select sno from sc group by having count(cno)>2;
//查询选修课程两名以上的学号。
两表等值连接查询
连接查询,连接主要通过他们的公共属性。
select sname ,cno from SC,student where SC.Sno = Student.Sno;
//*注意在连接查询的时候,一定要注意如果出现的属性两个表都有一定要加表名区分*
两表自身连接
是在一个表中进行自身的连接。主要通过给表起两个不同名字,让相关心的字段等值连接。
例子:在一个表中要查每门课的先修课的先修课。
select first.cno,second.cno from Course first,Course second where first.Cno = second.Cpno;
//*在自身连接中如果查询条件中和select后面出现的字段一致,前面以示区分的表别名要不一致,否则有问题。*
tip
在这里我说一下,sql查询是采用的嵌套循环连接算法思想,就是在一个表中,我查询到一条数据,然后从另一个表,一一去寻找等值关系的数据,在返回。
外连接
就是在两个表进行连接查询,如果查询的结果有一方面是为空的,那么该结果是不保存的。
例子:比如查询考生的选课情况,及成绩,如果该同学没有选课,那么就查不到该学生,所以要是想显示该学生,必须按照学生表为主,显示。
select Student.Sno,sname,grade,cno from student,SC where Student.Sno =SC.Sno;//它会直接忽略没有选课成绩的学生信息
select Student.Sno,sname,grade,cno from student