sql server 查询语句(查询语句格式、单表查询等)

发布时间:2020-02-10编辑:脚本学堂
本文介绍了sql server查询语句的入门用法,包括sql查询语句格式、单表查询方法与技巧,like模糊查询与分组函数的用法,感兴趣的朋友参考下。

一、sql查询语句格式
select [all|distinct] [表名.]{*|列名|表达式[as 新列名]}
[into :主变量[,:主变量]…]
from 表名[表别名], …
[where 条件表达式|子查询]
[group by 列名, …
 [having 分组表达式]]
[{union|intersect |except}select…from…]
[order by 列名|列序号[asc|desc], …];

二、单表查询
where 子句——运算符
比较:<、<=、>、>=、=、<>、not + ~
确定范围:
 between a and b、not between a and b
确定集合:in、not in
字符匹配:like,not like
空值:is null、is not null
多重条件:and、or、not
 

1----
select sname name, 'year of birth:' birth,
 2003-sage birthday,lower(sdept) department
fromstudent;
2--- 选择表中的行
消除重复行: distinct(缺省为all)
selectdistinct sno fromstudent
3---betweenand
求年龄在~ (含, 22)之间的学生名及年龄(或不在~之间)
select sname, sagefromstudent
where sage between 18 and 22; (where sage>=18 and sage<=22);
4--- in or not in
select*from student
wheresdept in (‘ie’, ‘cs’, ‘ma’);(where sdept=‘ie’or sdept=‘cs’or sdept=‘ma’)
 
5--- like
格式:
 [not] like ‘匹配串’[escape ‘换码字符’]
 %: 表示任意长度(≥)的任意字符
 _: 表示单个的任意字符
 escape ‘换码字符’: 匹配串中‘换码字符’(转义符)之后的字(%,__),被定义为普通字符(不作通配符用)
列出课程名称中带有‘_’的课号及课名:
select cno ,cnamefrom coursewhere cname like ‘%"_%’escape ‘"’
求以‘data_base’开头且倒数第五个字符为’s’的课程名
select cnamefrom coursewhere cname like ‘data"_base%s_ _ _ _’escape’"’;
 6--- null
select sno, cno  from  sc where grade is null;
 
7--- 分组与组函数(jbxue小编注:好好研究这些函数,在数据库编程中,用的相当广泛了。)
只有出现在group by子句中的属性,才可出现在select子句中
组函数的使用:
 count([distinct|all] *|列名)
 sum([distinct|all] 列名)
 avg([distinct|all] 列名)
 max([distinct|all] 列名)
 min([distinct|all] 列名)
组函数可用于select子句中的目标列表中,或在having子句的分组表达式中用作条件。
对分出的每一组用having进行筛选,筛选条件要用到组函数。
having 与where的区别:
where 决定哪些元组被选择参加运算,作用于关系中的元组
having 决定哪些分组符合要求,作用于分组
 

 
例:统计各系学生的人数。
 

 select sdept,count(*) as stu_count
 from student
 group by sdept


例:求选修了课程的学生人数
 

 select count(distinct sno) from sc;

例:求选修各门课的人数及平均成绩
 

 select cno, count(sno), avg(gr) fromsc group by cno;

例:求选修课程在2门以上且都及格的学生号及总平均分
 

select sno, avg(grade) from sc group by sno having count(cno)>2 and min(grade)>=60;


8--- 排序
用order by子句对查询结果按照一个或多个列的值进行升/降排列输出,升序为asc;
降序为desc,空值将作为最大值排序。