SQL基础语句入门(二)

--聚集函数
--AVG()返回list1列的平均值,只针对一列,多个列要多个AVG
select AVG(list1) as list2 from table_name;
--COUNT()返回list1列的行数,COUNT(*)返回表的行数,包括行空,即NULL,但是指定列就会忽略NULL
select COUNT(*) as alias_list from table_name;
select COUNT(list) as alias_list from table_name;
--MAX() MIN() SUM()指定列的最大值,最小值,总和;SUM会忽略NULL的行
--聚集函数中的参数,ALL为默认,还有distinct
--这里值list1列表中的不同值的平均值
select AVG(distinct list1) as list2 from table_name;
--可以同时使用多个聚集函数,用,隔开
--group by,这里按list分组,计算每个组的行数
select list , count(*) as alias_list from table_name group by list
--group by 在where语句之后,order by 之前
/*过滤分组
having是对分组过滤,where是对行过滤
*/
--这里过滤出行数大于2的组
select list,count(*) as alias_list from table_name group by list having count(*x)>2;
--一般使用group by就跟随者oreder by
--2个表,2表有共同处于,表1的一个数据在表2需满足情况,子查询,注意字表的select只能是单列,在子表的select除list2外不能出现第二个列
select list1 from table_name1 where condition in (select
                                                    list2 from table_name2 where condition)
--根据以上的sql语句,可以类推进行n表的查询,以及一个表的子查询
--子查询还能放在from之前,而不仅仅是where之后
select list1 (select list2 from table_name2 where table_name2.list3=table_name1.list4)as alias_list from table_name1  
--table_name.list_name 完全限定名,一般用于子查询中,因为2个表有相同的名字,不使用则默认当前表
--联结表,2个表结合,n个表同理
--必须有一个where语句,否则表1的每一行会与表2的每一行匹配,是一个笛卡儿积
select list1,list2,list3 from table_name1,table_name2 where table_name1.list1=table_name2.list1
--令外一种写法,在这里用on代替where
select list1,list2,list3 from table_name2 INNER JOIN table_name1 om table_name1.list1=table_name2.list1
--as也能用作表的别名,但是表的别名不会在查询的结果中显示出来,而list的则会。
--自联结,同一个表
select t1.list1,t2.list2 from table_name as t1,table_name as t2
where t1.list3=t2.list3
--自然联结,两表,简单的来说where后面的列表相同,每列只返回一次
select t1.list1,t2.list2 from table_name1 as t1,table_name2 as t2
where t1.list3=t2.list3
--外联结,可能还包含没有关联行的那些表
select table_name1.list1,table_name2.list2 from table_name1 LEFT OUTER JOIN table_name2 on condition;
--LEFT OUTER JOIN 从左边的表选择所有行,right OUTER JOIN 从右边的表选择所有行
--UNION将多个select语句合在一起
select list1 from table_name where condition1
UNION
select list1 from table_name where condition2
/*
1.union必须至少2条select以上
2.union查询的列必须相同,表达式,聚集函数也是,但顺序不必相同
3.列数据必须兼容,类型不必完全相同,但是必须DBMS可以隐藏的转换。
*/
--union会自动消除同行,在union的多个select语句中,order只能出现一次,也是在最后

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
交互式SQL的使用 环境:WINDOWS,Microsoft SQL Server 实验要求: 1,创建Student数据库包括Students,Courses,SC结构如下: Students(SNO,SNAME,SEX,BDATE,HEIGHT,DEPARTMENT) Courses(CNO,CNAME,LHOUR,CREDIT,SEMESTER) SC(SNO,CNO,GRADE) (注:下划线示主键,斜体示外键),并插入一定数据。 2.完成如下的查询要求及更新的要求。 (1)查询身高大于1.80m的男生的学号和姓名; (2)查询计算机系秋季所开课程的课程号和学分数; (3)查询选修计算机系秋季所开课程的男生的姓名、课程号、学分数、成绩; (4)查询至少选修一门电机系课程的女生的姓名(假设电机系课程的课程号以EE开头); (5)查询每位学生已选修课程的门数和总平均成绩; (6)查询每门课程选课的学生人数,最高成绩,最低成绩和平均成绩; (7)查询所有课程的成绩都在80分以上的学生的姓名、学号、且按学号升序排列; (8)查询缺成绩的学生的姓名,缺成绩的课程号及其学分数; (9)查询有一门以上(含一门)三个学分以上课程的成绩低于70分的学生的姓名; (10)查询1984年~1986年出生的学生的姓名,总平均成绩及已修学分数。 (11) 在STUDENTSC关系中,删去SNO以’01’开关的所有记录。 (12)在STUDENT关系中增加以下记录: (13)将课程CS-221的学分数增为3,讲课时数增为60 3.补充题: (1) 统计各系的男生和女生的人数。 (2) 列出学习过‘编译原理’,‘数据库’或‘体系结构’课程,且这些课程的成绩之一在90分以上的学生的名字。 (3) 列出未修选‘电子技术’课程,但选修了‘数字电路’或‘数字逻辑’课程的学生数。 (4) 按课程排序列出所有学生的成绩,尚无学生选修的课程,也需要列出,相关的学生成绩用NULL示。 (5) 列出平均成绩最高的学生名字和成绩。(SELECT句中不得使用TOP n子句) 4.选做题:对每门课增加“先修课程”的属性,用来示某一门课程的先修课程,每门课程应可记录多于一门的先修课程。要求: 1) 修改结构的定义,应尽量避免数据冗余,建立必要的主键,外键。 2) 设计并插入必要的测试数据,完成以下查询: 列出有资格选修数据库课程的所有学生。(该学生已经选修过数据库课程的所有先修课,并达到合格成绩。) 注意:须设计每个查询的测试数据,并在查询之前用INSERT语句插入中。 提交作业形式: 1) 建立Student数据库SQL脚本,插入所有数据项的SQL脚本(包括所有的测试数据)。 2) 完成查询要求SQL语句脚本。 3) 选做题:须提交修改数据库定义的SQL脚本,插入测试数据的SQL脚本以及用于查询的SQL语句

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值