SQL简略教程

发表于:2008-4-09 11:06

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:未知    来源:网络转载

(4)对数据进行统计.
       集合函数:count([distinct|all]*)统计记录个数.
               count([distinct|all]<列名>)统计一列中值的个数.
               sum([distinct|all]<列名> 计算一列值的总和(必须为数据类型).
               avg,max,min分别求一列值中的平均数,最大值,最小值.
       实例:<1>返回学生表中学生总人数.
               select count(*) as 学生人数 from 学生
            <2>返回一列的平均数
               select avg(成绩) as 平均分 from 课程注册
            <3>对结果进行分组.
               group by 列名 [having 筛选条件表达式]
            <4>使用compute子句
               格式如下:compute 集合函数 [by 列名]         --分类汇总.它显示详细记录,group by不显示。
               其中,集合函数:sum(),avg(),count()等.
               select * from 课程注册  order by 学号 compute sum(成绩)by  学号
    (5)用查询结果生成新表 select into
       select * into 课程注册副表 from 课程注册
       创建空副表: select * into 学生副表 from 学生表 where 1=2
    (6)合并结果集  union
       将多个查询结果集合并为一个结果集
    select 语句
       {union select 语句},[,...n]
       各个结果集列数必须相同,对应数据类型也要相同.最后结果集返回第一个select语句.
       实例:查看“课程注册”表中选修了001课程或者选修了002课程的学生,也就是选择两者的并并集.
       select * from 课程注册 where 课程号='001'
       union
       select * form 课程注册  where 课程号='002'
    (7)连接查询  cross join  (并集)
       select 列名列表 from table_name1 cross join table_name2
       实例:select * from 产品 cross join 产品销售
    (8)等值与非等值连接查询
    连接条件:[表名1].<列名><比较运算符>[表名2].<列名> 其中比较运算符有=,>=,<=,!=,>,<.
       格式:select 列名列表  from table_name1 [inner] table_name2 on table_name1.列名=table_name2.列名     --inner指定为内连接,可以省.
       (on 主键=外键)
  实例:select * from 产品 inner join 产品销售 on 产品.产品编号=产品销售.产品编号                --inner join为交集,不同于cross join    

       自然连接:在等值连接中,把目标列中重复的属性列去掉则为自然连接.
    (9)自身连接查询
       实例:查询选修了两门或两门以上课程的学生学号和课程号
           select a.学号,a.课程号 from 课程注册 as a join 课程注册 as b
           on a.学号=b.学号 and a.课程号=b.课程号
  (10)外连接查询(分为左外连接,右外连接和全外连接)
       <1>.左外连接(table_name1在左边)
           Select * from table_name1  left outer join table_name2 on table_name1.column_name=table_name2.column_name
       <2>.右外连接(把left 改为right就行了)
       <3>.全外连接(触类旁通,left 改为 full)将左表所有记录分别与右表的每一条记录进行连接组合,结果集中不满足连接条件的以null显示出来.
    (11)复合连接条件查询.
       实例:查询成绩在75分以上的学生的学号,姓名,选修课的课程号,课程名,专业代码,成绩,任课老师的教师编号,姓名.
select b.课程号,c.教师编号,c.姓名,a.学号,b.专业代码,b.专业学级,b.学期,b.成绩
       from 学生 as a join 课程注册 as b on a.学号=b.学号 and b.成绩>75 join 教师 as c
    (12)子查询 (查询块的嵌套)
select * from  产品 
        where 产品编号 in (select 产品编号 from 产品销售)  --()内为子查询,其中in可以改为比较运算符.
    (13)带有any或all运算符的子查询.
        实例:查询比"1"班中所有学生年龄都要小的其它班上的学生学号与姓名
       select 学号,姓名
             from 学生
             where 出生日期>all
             (select 出生日期 from 学生 where 班级代码='1')
             and 班级代码<>'1'
    (14)带有exists,not exists运算符的子查询.不返回任何数据,只产生逻辑true,false.
        实例:查询所有选修了'1'课程的学生姓名
       select 学号,姓名
       from 学生
             where exists
                     (select * from 课程注册
                      where 学号=学生.学号 and 课程号='1'
                      )   

54/5<12345>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号