• 查询


    Select基本查询

      select  列名  from 表名

      当列名用 * 代替时,则表示选择表的所有列

    条件查询

      select * from XS where 姓名=‘张三’

     select  姓名,出生日期  from  xs  where 出生日期>‘1992-1-3’

    注:字符型或日期型的数据要用单引号引起来

    and,or    and 同时满足两个  or 满足一个即可

      select * from xs  where  姓名=‘张三’  and  学号=‘11’

       select * from xs  where  姓名=‘张三’  or学号=‘11’

    in=or (A,B)  只表示两个值  A或B   not in 

    in用于查找属性值属于指定集合的记录,与in相对的not in

    例如:查找分数为70和80的所有学生信息

     select  *  from xs  where 总学分  in (70,80)  ==总学分=70 or 总学分=80

    between...and  在...范围之类     not betwwen....and

    例:查询分数在60到70之间

    select  *  from xs where 总学分  between  60  and  70 

    is  关键字—————专门针对Null     is not null

    例:查询邮箱为空的学生记录

      select * from student  where Email is null

    distinct   关键字

      从返回的数据集中删除重复的列

      select distinct 总学分 from xs order by  总学分

      --查询表xs中总学分,但是不能有重复的值

    使用like 字句进行模糊查询

       like 字句与通配符配合使用

    1, %:表示任意字符

    2,_:表示单个任意字符

    3,[]:表示方括号里列出的任意一个字符

    4,[^]:表示任意一个没有在方括号里列出的字符

    基本语法

      select 字段名 from 表名 where   字段名 like 条件

    order by 排序  asc 升  desc 降

       select * from xs order by 总学分,出身日期 desc 

    :以第一列为主序,再在第一列形同的基础上在对第二列排序,asc默认,可省略

    Top 关键字

      top:关键字用于指定只返回前面一定数量的数据  

     top n:表示返回最前面的N行

      例:

         select top 5*  from xs order by 总学分

           top....with ties  指定返回并列前N条记录,与order by  连用 

    聚合函数

      Count(*)     统计记录的条数

      Min(列名)   计算某一列的最小值

     Max(列名)   最大值

     SUM(列名) 某一列的总和

     AVG(列名)  某一列的平均数

    例:查询学生的个数

       select  Count(*)  from  student

       select   Count(Dept)  from student

      查询学生的总成绩和平均成绩

               select  sum(Grade)  as 总成绩,AVG(Grade)  as  平均成绩  from student  

      查询计算机系中年龄最大和最小的学生

                 select max(Age),min(Age)  from  student  where  Dept='计算机应用'

    聚合函数与分组查询 

         可使用group by 字句对查询的结果集进行分组,将查询结果表的各行按一列或多列取值相等的原则进行分组

    使用group by时,必须注意

        select 字句的字段列表中,除了聚合函数以外,其他所出现的一定要在group by字句中有定义才行

        group by 字句中不能使用字段别名

        text,ntext,image类型不能作group by 字句的分组依据

       例如:

       查询每个系有多少个学生

        select Dept,Count(SID) from student  group by Dept

      查询每个学生选课成绩的总分数和平均分

       select SID,SUM(Grade) as 总成绩,AVG(Grade) as 平均分 from student group by SID

    根据条件分局查询

        如果分组后还有按一定的条件对这些组进行筛选,最终只输入满足条件的组,则可以使用Having 短语指定筛选条件

    例如:

      查询学生超过3个的系

      select dept,Count(SID)  from  student  group by dept having Count(SID)>3

    注:

      where字句与Having短语的根本区别在于作用对象不同

      where字句作用于基本表或视图,在分组之前

     haing短语作用于组,在分组之后

      聚合函数只能在having中,不能再where中

    select 语句标准语法小结

       select <查询目标列组> from  <参与查询的表>  

       [where  <查询条件> ]

       [group by <分组表达式>]   [Having  <分组查询条件>]

       [order by  [排序表达式]  [Asc|Desc]  ] 

    例如:

       select SID as 学号,Count(CID) as 选课门数,Sum(Grade) as 总成绩,AVG(Grade) as 平均成绩  from  student 

      where  SID<=11  group by SID  having  Count(CID)>=2 and avg(Grade)>60  order  by  avg(Grade)  desc

    嵌套查询

      保存查询结果    

        select 字段列表  into   新表名   from 原表名   where  查询条件

      比较符

        =,!=(<>),>,>=,<,<=

        一个select....from ....where  语句称为一个查询块

           将一个查询块嵌套在另一个查询块的where字句或having短语的条件中的查询称为嵌套查询

    例如:

       select  <目标列> from 表 where  表达式(列名)   比较符  (select  列 from 表 [where .....] )

      some和any:只要与子查询结果集中的某个值满足比较的关系时,就返回true,否则返回false

     All:要与子查询结果每个值进行比较,当表达式与每个值都满足比较的关系时,才返回true,否则返回false

      例如:

      查找比所有计算机系的学生年龄都大的学生

       select * from xs where 出生日期>All (select 出生日期  from xs where 专业=‘计算机‘)

     in:  单查询的结果在子查询结果集中国则为True

        select  <目标列>  from 表  where  列名 in  (select  列  from  表 [where.....] )

    Exists:如果子查询返回行则真,否则假

      select <目标列>  from  表  where  exists  (select  列  from  表  [where....])

    连接查询

       根据各个数据表之间的逻辑关系从二个或多个数据表中检索数据

    注: 1,连接的两个字段必须数据类型和值域相同

          2,尽量在表的主键上的基础上,指定连接条件

       连接查询分类:

        内连接:基本内连接,多表连接,自连接

        外连接:左外连接右外连接,全外连接,交叉连接

    内连接方式:

      select 字段1.字段2,。。。。 from 表1  join 表2  on 连接条件

    例如:

      select * from xs  join  xk  on  xs.学号=xk.学号

    多表连接:

       select ..... from 表1 join 表2 on  条件1

                                  join 表3  on  条件2

                                  join 表4  on   条件3

                                    .。。。。。。。。。。

      或者   select .... from 表1,表2  where 条件

    例如:

       select  姓名,课程名,成绩  from xs  join  xk  on  xs.学号=xk.学号   join kc  on kc.课程号=xk.课程号

    自连接:比较一个表中各个记录之间的值

       select  a.学号,a.课程号,a.成绩  from  xk  a join  xk b  on a.成绩=b.成绩  and  a.课程号<>b.课程号

    左外连接:left outer  join      左外连接结构集中除了包括满足条件的行外,海包括左表所有的行

       select  xs.*,课程号  from  xs left  outer  join  xk  on xs.学号=xk.学号

    右外连接:right outer join 结构集中除了包括满足的条件的行外,还包括右表的所有行 

         select  xs.*,课程号  from  xs right outer  join  xk  on xs.学号=xk.学号

    全外连接:full outer  join  结构集中除了包括满足的条件的行外,还包括两个表的所有行 

          select  xs.*,课程号  from  xs full outer  join  xk  on xs.学号=xk.学号

    交叉连接:cross  join  (乘集)  不能带where 语句,可以多张表

        从被连接的表中返回所有可能的记录组合(如:一张表8条记录,另一张9条记录,结果返回72条记录)

      select 字段1,字段2,.....

       from 表1 cross  join  表2

  • 相关阅读:
    简介&目录
    Lucas 定理
    扩展欧几里得算法(exgcd)
    【做题记录】CF23B Party
    【做题记录】CF1375D Replace by MEX
    【做题记录】CF194B Square
    SPFA
    dijkstra
    CSP-J&S 2020 游记
    中国剩余定理(CRT)
  • 原文地址:https://www.cnblogs.com/freel/p/6375707.html
Copyright © 2020-2023  润新知