嘿嘿,数据库这几天感觉学的还是挺简单的,今日小总结
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