查询

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

 

posted on 2017-02-07 19:46  一切皆对象  阅读(180)  评论(0编辑  收藏  举报