在sql server中(不区分大小写):
1.单表无条件查询
select * from students;
查找students中的全部数据,*是全部的意思,可以换成表中的某一列或多列;
select sname,2016-sage birthyear,lower(sno) lsno from students;
查找的同时可以计算,重新命名,控制大小写;
select distinct sage from students;
查找出不重复的数据;
select count(distinct sdept),min(sage),max(sage),avg(sage) from students;
聚合函数 count,sum,avg,min,max分别计算列上值的个数,数值总和,平均值,最小值,最大值。
2.单表带条件查询。
select sname from students where sage between 18 and 20;
select sname from students where sage in(18,19,20);```
带条件查询的三种写法。
```select sname from students where sname like '王%';
select sname from students where sname like '王____';```
模糊字符匹配,查找姓王的同学的全名。通配符%代表一个任意长度的字符串,_代表单个字符,一个汉字由两个字符组成,所以此处加了四个字符串。
```select sname from students where sname not like '王%'; ```
当然也可以利用字符匹配查找不姓王的数据,只需在like前面加not。用'='的地方可以like替换,不过效率会降低。
```select cname from courses where cname like 'DB\_设%' escape '\';```
当要查询的数据中确切的部分中含有通配符则应用escape进行转义,如果不进行转义,就会查找出无用的数据,比如要查找以"DB_"开头,且倒数第2个汉字字符为“设”的课程的详细情况。如果不进行转义,就会出现如下情况:
![没有转义](http://upload-images.jianshu.io/upload_images/2670618-174c6b2b91ce4595.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
```select sno,cno from reports where grade is null;```
查找存在记录但是空值的数据。这种方法不能全部找出没有值的数据,因为没有值也可能记录成 'null'或'_'。
>3.分组查询和排序查询。
```select cno,avg(grade) from reports group by cno;```
group by 是分组查询,把一个表按照一定列上值相等的原则分组,然后分别对每个组进行操作。分组查询经常配合聚合函数一起使用,聚合函数在每个组中进行运算,然后每个组返回一个结果。
```select cno,avg(grade) group by cname having count(*)>=3;```
having子句用于group by后对每一组进行条件判断,满足having条件的组被选出来。
*【摘自网络】*使用Group By子句的时候,一定要记住下面的一些规则:
1)不能Group By非标量基元类型的列,如不能Group By text,image或bit类型的列
2)**Select指定的每一列都应该出现在Group By子句中,除非对这一列使用了聚合函数;**
3)不能Group By在表中不存在的列;
4)进行分组前可以使用Where子句消除不满足条件的行;
5)使用Group By子句返回的组没有特定的顺序,可以使用Order By子句指定次序。
```select * from students order by sdept asc,sage desc;```
order by查询结果排序。查找所有学生信息,按系名升序,同一系的按年龄降序。desc是降序,asc是升序,没写的时候默认升序,升序把空值放在最后,降序把空值放在最前面。
>总结:无论怎样写查找语句,得到的结果都是一张表,所以写语句时要注意你写的能不能构成一张表。