查询2

6、null(没有值 空值)

零和null 是不一样的null表示空值没有值,零表示一个确定的值
null 不参与<> 、!=、= 运算但可以参与is 或is not运算
任何数字与null参与数学运算结果为null
任何类型的数据都可以为null。如:

			create table t1
				( name nvarchar(20), cnt int, riqi datetime
    				 );
			insert into t1 values (null,null,null);
			select * from t1;
			drop table t1;
		--输出奖金非空的员工的所有信息
		select * from emp
		where comm is not null;--null 不参与<> 、!=、= 运算但可以参与is 或is not运算
		--输出每个员工的姓名、年薪(包括奖金)假设comm为一年的奖金
		select empno,ename,sal*12+comm as "年薪" from emp;--error
		-- null 不能参与任何数学运算否则结果永远为null
		select empno,ename,sal*12 + isnull(comm,0)as "年薪" from emp;
		--isnull(comm,0)如果comm为null返回零否则返回comm

7、order by

select * from emp order by sal;--默认升序
select * from emp order by sal desc;
select * from emp order by deptno,sal;--先按deptno升序排序如果deptno相同在按sal升序排序
select * from emp order by deptno desc,sal;--deptno降序排,sal升序排

8、模糊查询(搜索时经常使用)
格式:
select 字段的集合 from 表名 where 某个字段名字 like 匹配的字符;
匹配的条件通常含有通配符;
通配符:
% 任意零个或多个字符;
_下划线  表示任意单个字符;
[a-f] a到f的任意单个字符;
[a,f] a或f;
[^a-c] 不是a不是b也不是c的任意单个字符;
匹配条件必须用单引号括起;
通配符当做普通字符的使用

create table student
(name varchar(20) null,
 age int,
);
insert into student values('张三',88);
insert into student values('Tom',66);
insert into student values('a_b',22);
insert into student values('c%d',44);
insert into student values('abc_fe',56);
insert into student values('haobin',38);
insert into student values('c%',65);
insert into student values('long"s',88);			
			select * from student where name like '%\%%' escape '\';--把name中含有%的输出
			select * from student where name like '%\_%' escape '\';--把name中含有_的输出
				escape '\'表示把'\'当做转意字符的标志(开始)sql中可以把把任意字符当做转意字符的标志
9、聚合函数(多行记录返回一个值通常用于统计组内的信息)
函数分类
单行函数
每行返回一个值
多行函数
多行返回一个值
聚合函数是多行函数
例子:

			select lower(ename) from emp;-- 最终返回的是行,low是单行函数
				select max(sal) from emp; --返回时一行max()是多行函数
聚合函数是多行函数
聚合函数分类:
max()
min()
avg() 平均值
count()求个数
count(*)
返回表中所有记录的个数
select count(*) from emp;--返回emp表所有记录的个数
count(字段名)
返回字段值非空的记录的个数,重复记录也会被当做有效记录
select count(deptno) from emp;--返回值是这说明deptno重复记录也被当作有效记录
select count(comm) from emp;--返回值是这说明comm为null的记录不会被当做有效记录
count(distinct 字段名)
返回字段名不重复,并且非空的字段的记录
select count(distinct deptno) from emp;--返回值是三,统计deptno不重复的记录
注意的问题:判断下面sql语句是否正确

				select max(sal),min(sal),count(*) from emp;--OK
				select max(sal) "最高工资",min(sal)"最低工资",count(*)"员工人数" from emp;--ok
				select max(sal),lower(ename) from emp;--error单行函数和多行函数不能混用
10、group by
格式:
group by 字段的集合
功能:
把表中的记录按照字段分成不同的组
例子:
查询不同部门的平均工资;
注意:理解group by a,b,c的用法
先按a分组,如果a相同在按b分组,如果b相同在按c分组,最后统计的是最小分组的信息

一定要知道下面语句为什么是错误的

		use scott;
--输出每个部门的编号和该部门的平均工资
select deptno "部门",avg(sal) "部门平均工资"
	from emp
	group by deptno;
--判断下面语句是否正确
select deptno "部门",avg(sal) "部门平均工资",ename
	from emp
	group by deptno;-- error
--判断下面语句是否正确
select deptno ,ename
	from emp
	group by deptno;-- error
--总结:使用了group by以后select中只能出现分组后的整体信息,不能出现组内详细信息



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值