SELECT带条件查询

嘿嘿,数据库这几天感觉学的还是挺简单的,今日小总结

select 带条件的查询  例子如下:

-- 查询 MyStudents 数学成绩没有及格的学生

select FName as 姓名,FMath as 数学成绩,FEnglish as 英语成绩 from MyStudents where FMath<60 and FEnglish<60

-- 查询年龄大于 27and 小于 33 的男学生
---between ..and (between 27 and 30)

select FName as 姓名 from MyStudents where FAge between 27 and 33 and FGender='男'
 -- 查询部门 1,4,5 中的员工  模糊查询 ---( 针对字符串 )

select EmpName as 姓名,EmpDepId as 部门 from Employees where EmpDepId in (1,4,5)

--模糊查询
--查询Mystudents中所有姓张的同学
select * from Mystudents where FName like '张%'

--查询姓名中包含一个敏字的
insert into Mystudents values('赵敏',24,0,100,80)
insert into Mystudents values('李敏锐',24,0,100,80)
select *  from Mystudents
select * from Mystudents  where FName like '%敏%'--只要有‘敏’字的
select * from Mystudents  where FName like '%敏'--最后一个是‘敏’字的

--查询所有姓王的同学 姓名的字数必须是3个的  (使用通配符下划线代表 一个任意字符)
select * from Mystudents where FName like '王__'
select * from Mystudents where FName like '王%' and LEN(FName)=3

--通配符[] 查出姓名包含'磊'或者包含'伟'的人
select * from Mystudents where FName like '%[磊,伟]%'

--查找名字中既没有‘磊’也没有‘伟’的人
--找姓名以X开头 以Y结尾,中间只要不是磊或不是伟的
select *  from Mystudents where FName like 'x[^磊伟]y'

--只要中间没有'磊''伟'的
select *  from Mystudents where FName like '%[^磊伟]%'
--[]中括号里面的任意多的字符,只选一个

--查询姓名中包含%或者_的所有人
select * from Mystudents where FName like '%[%_]%'

--找所有不姓王的人
select * from Mystudents where FName like '[^王]%'
select * from Mystudents where FName not like '王%'

--空值处理   什么是空值 -- null
--添加数学成绩为空的值 姓王的
update Mystudents set FMath=null where FName like '王%'

--查询数学成绩为null的
select * from Mystudents where FMath is null

--数据库中只有三种逻辑结果 true false unkonw 数据库中的null就是 unkonw 如果判断一个值是否为null,就不能使用 =,<>(不等于) 来判断。返回值就永远是false

update Mystudents set FAge =FAge +1 where FId=1
select *from Mystudents

--ISNULL 函数
select FName,FAge, 数学成绩=ISNULL(cast(FMath as varchar(50)),'缺考') from Mystudents where FMath is null
--同一个列上数据类型必须一致,如果不一致就会报错。

--数据排序(集合中的数据时无序的,如果排序之后有了续之后‘游标’,集合可以作为一个查询的数据源,但是有序了的游标是不能作为数据源的)
--例:
select * from (select * from Mystudents where FAge>30) as tbl
select * from (select top 5 * from Mystudents where FAge>30 order by FAge desc) as tbl

--order by 数据查询 按英语成绩降序排的
select * from Mystudents order by FEnglish desc  --次查询结果叫做游标
--先按英语成绩排序 再按数学成绩排序 (先排英语成绩 英语成绩相同的 再按数学成绩排)
select * from Mystudents order by FEnglish desc,FMath desc,FAge asc

--查询学生表中的成绩信息,显示姓名 性别 英语成绩 数学成绩 平均分
select FName,FAge,FGender,FEnglish,FMath,AVG((FMath+FEnglish)/2) from Mystudents order by AVG((FEnglish +FMath )/2) desc

--数据分组  ---(数据挖掘)
--统计MyStudents当中男生和女生的个数
select 性别=FGender, COUNT (*) as 人数  from Mystudents group by FGender

--查询Employees表,要每个部门Id和这个部门的男性人数
--1、找到公司 2、找出所有男生  3、让他们按照部门Id站成几堆  4、数人数
select 部门Id=EmpDepId,COUNT(*)from Emplpyees where EmpGender='男' group by EmpDepId asc

--没有在group by 中出现的字段 也不能出现在 select

--Having语句 对组进行筛选的 where 也是进行筛选的 区别是where是在分组前进行筛选 Having是在分组后进行筛选的
--例如:查询男性人数大于3人的部门
--1、找到单位 2、把男的集合 3、按部门分开站 4、数人数 5、小于3的剔除

select 部门号=EmpDepId,部门男性人数=COUNT(*) from Employees where EmpGender='男' group by EmpDepId Having Count(*)>3

--统计Mystudents表中的男和女的个数 列出人数大于20 的

select 性别=FGender, 人数=COUNT (*) from Mystudents group by FGender
select 性别=FGender, 人数=COUNT (*) from Mystudents group by FGender Having COUNT(*)>20

--SQl执行语句的顺序
--1、from 2、where 3、group by 4、having 5、select  ---选择列>distinct>top 6、order by

select COUNT(distinct(FGender)) as 性别,COUNT (*)as 人数 from Mystudents
select * from Mystudents order by FEnglish desc --降序 desc  升序 asc


转载自:http://blog.csdn.net/linlin2294592017/article/details/8112013

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值