03数据查询

一、单表的查询

1、选择表中的若干列

(1)查询指定列
		select 学号,班级,总成绩
		from B170604
(2)查询全部列
		select *	
		from B170604 
(3)查询经过计算的值(下面两个属性均起别名了)
		格式:
			select 属性1,有关属性2的表达式 列别名

		示例1:
			select 学号 num,100-总成绩 绩点
			from B170604

		示例2:
			select 'china' 国际,学号,100-总成绩 差值
			from B170604

		输出如下:增加一列属性。
			-----------------------------
			    国际	  学号	   差值
				china	B17060401	9
				china	B17060402	8
				china	B17060403	12
			-----------------------------
(4)基本函数
		信息小写输出,并且需要别名

		格式:
			 select 姓名,lower(学号) 学号别名
			 from B170604

二、选择表中的若干元组

1、消除取值重复的行

		格式:
		 select distinct 班级
		 from B170604

		补充:只能查看单行。若没有其关键字,
			 相当于是select all distinct 班级
2、查看满足条件的元组

---------------    用where关键字

    查询条件:
		 a、比较:=,>,<,>=,<=,!=,<>,!>,!<,;not+上述比较运算符。

		 b、确定范围:between and,not between and

		 c、确定集合:in,not in

		 d、字符匹配:like,not like

			%(百分号):表示任意长度的字符串。
				 a%b:表示以a开始,中间任意字符,b结尾。
				 a%:表示以a开始任意字符。
				 %a:以a结尾任意字符。
				 _(下划线):表示任意单个字符。
				用法: _a     a_    a_b。
			补充:如果like,not like不含通配符可以用逻辑代替。
			字符匹配适用于int型。

		 e、空值:is null,is not null

		 f、多重条件(逻辑运算):not,and,or
A:比较大小
		select 学号,姓名,总成绩  from B170604
		where 总成绩!<90 / where 班级='B170609'
B:确定范围
		between A and B  (包含AB):
			select 学号,姓名,总成绩 from B170604
			where 总成绩 between 60 and 91 

		not between A and B  (不包含AB): 
			select 学号,姓名,总成绩 from B170604
			where 总成绩 not between 60 and 91 
C:确定集合
		select 学号,姓名,班级,性别,总成绩 from B170604
		where 性别 in('女')	/where 班级 not in('B170604')
D:字符匹配
	谓词like可以用来进行进行字符串的匹配。like,not like不含通配符

		格式1:like,not like不含通配符
			select * from B170604
			where 班级 not like 'B170604'		==where 班级!='B170604'

		格式2:like,not like含通配符
			select * from B170604
			where 总成绩 not like 9_

	特殊情况:
		若所查询字符串本身包含%,_需要用转义字符。并且用escape声明,

		问题1:查询姓名为'孩_子',的信息。(有孩_子,孩b子)
			where 姓名 like '孩\_子' escape'\'
				匹配符失效:输出孩_子的信息

			where 姓名 like '孩_子'
				匹配符生效:输出孩_子和孩b子的信息

		问题2:查询以DB_开头且倒数第三个字符为i的课程的信息。
			where 课程名 like 'DB\_%_ _i' escape'\'
E:涉及空值的查询
		提示:代码出错但是可以查询。

		注意:此处IS 不能用等号代替
			select *
			from B170604
			where 出生日期 is null	//where 出生日期 is not null
F:多重条件查询
		补充:in谓词实际是多个or的缩写。
			select *
			from B170604
			where 性别='女' and 年龄=20	//where 性别='男' or 年龄=20

三、order by子句

		用户可以用order by子句对查询结果按照一个或多个属性列的
		升序(ASC)或降序(DESC)进行排序,默认升序。
	
		问题1:查询四班男生信息 按照总成绩逆序排列
			select *
			from B170604
			where 性别='男'
			order by 总成绩 DESC

		补充:
			升序:含空值的元组在前。
			降序:含空值的元组在后。

四、聚集函数

1、当聚集函数遇到空值时,除count(*)之外,都跳过空值只处理非空值。
2、某个元组的一个或部分列空值不影响count的统计结果。

3、where子句中是不能用聚集函数作为条件表达式的。

4、聚集函数只能用于select、group by中的having子句。

		select count(*) 元组个数		//统计行个数
		from B170604

		select count(姓名)			//统计一列中值得个数(不包含NULL)
		from B170604

		select avg(总成绩) 平均分		//必须为int
		from B170604

		select sum(总成绩) 总分			//必须为int
		from B170604

		select min(班级) 最低分
		from B170604

		select max(总成绩) 最高分
		from B170604
		where 班级='B170604'

		select max([distinct|all] <列名>)
		from table 
		//distinct 去掉重复

五、group by子句

1、group by子句是将查询结果按某一列或多列的值分组,值相等的为一组。
2、目的:是为了细化聚集函数的作用对象。如果未对查询结果分组,聚集函数将作用于整个查询结果。
3、分组后的聚集函数将作用于每个分组,即每组都有一个函数值。
	问题1:查询每个班级的个数。班级\t班级个数

		select 班级,count(班级) 班级个数
		from B170604
		group by 班级    //对班级进行分组

	问题2:查询班级内男女人数(对男女进行分组)

		select 性别,count(性别) 人数
		from B170604
		group by 性别

						人数	性别
				----------------------------
				-		 7	     男		   -
				-		 7	     女		   -
				----------------------------
4、如果分组后还需要按一定条件进行筛选,最终只输出满足条件的组则可以使用having短语指定筛选条件
	select 性别,count(性别) 人数
	from B170604
	group by 性别
	having 性别='男'		//having count(*)>3

	注意:这里先用group by 分组,用聚集函数计数,用having进行筛选。

	提示:
		where和having区别是作用对象不同。
		where作用于基本表或视图。查询满足条件的元组
		having作用于组,选择满足条件的组。

	问题:
		查询每个班的平均成绩。
		select 班级,AVG (总成绩)
		from B170604	
		group by 班级		//对班级进行分组
		having AVG (总成绩)>=0		//输出平均成绩大于0的班级
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值