美文网首页
数据库笔记2-单表查询

数据库笔记2-单表查询

作者: 照照寒 | 来源:发表于2016-10-15 22:04 被阅读0次
    students courses 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个汉字字符为“设”的课程的详细情况。如果不进行转义,就会出现如下情况:
    ![没有转义](https://img.haomeiwen.com/i2670618/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-单表查询

          本文链接:https://www.haomeiwen.com/subject/apdoyttx.html