数据库笔记2-单表查询

数据库笔记2-单表查询_第1张图片
students
数据库笔记2-单表查询_第2张图片
courses
数据库笔记2-单表查询_第3张图片
reports

在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是升序,没写的时候默认升序,升序把空值放在最后,降序把空值放在最前面。

>总结:无论怎样写查找语句,得到的结果都是一张表,所以写语句时要注意你写的能不能构成一张表。




你可能感兴趣的:(数据库笔记2-单表查询)