--带条件查询
select
       列名
from
      数据源(表名,子查询的结果,视图)
where
      条件(筛选一些行)

1--查询MyStudents数学成绩不及格的学生

select * from MyStudents
 select 
      FId as  学号,FMath as 数学成绩
  from MyStudents
      where FMath<60  --60<=FMath and FMath<80
  go2--查询年龄大于20的男学生
 select * from MyStudentsselect 
      FName as  姓名,FAge as 年龄
  from MyStudents
      where FAge>20 and FAge<=30 and FGender='男' 
  go3--between ..and 查询年龄在27-30之间的男学生
 select * from MyStudentsselect 
      FName as  姓名,FAge as 年龄
  from MyStudents
      where FAge between27 and 30 and FGender='男' 
  go
 --------------------------------------------------
 select * from Department-----部门表
 insert into Employees(EmpName,EmpAge,EmpDepId)
 values('吕布1',30,4)insert into Employees(EmpName,EmpAge,EmpDepId)
 values('吕布2',30,4)insert into Employees(EmpName,EmpAge,EmpDepId)
 values('吕布3',30,5)insert into Employees(EmpName,EmpAge,EmpDepId)
 values('吕布4',30,5)insert into Employees(EmpName,EmpAge,EmpDepId)
 values('吕布5',30,6)insert into Employees(EmpName,EmpAge,EmpDepId)
 values('吕布6',30,6)insert into Employees(EmpName,EmpAge,EmpDepId)
 values('吕布7',30,6)
 -- 查询部门1、4、5中的员工select 
 EmpName as 姓名,EmpDepId as 部门
 from Employees
 where EmpDepId=1 or EmpDepId=4 or EmpDepId=5 --where EmpDepId in(1,4,5)-----------------------------------------------------------------------
 --模糊查询----(针对字符串)
 通配符:
 %代表0个或多个字符
 _代表任意一个字符
 []中括号里面的任意多的字符,只选一个
 1--查询Mystudents中所有姓张的同学
 select * from Mystudents
 where FName like '张%'2--查询姓名中只要包含一个敏字的
 inter into MyStudents valuse('赵敏',24,'女',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 '%[磊伟]%'--姓名中没有磊或伟的
 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 not like '王%'
 --------------------------------------------------------
 --空值处理---null在设计页面必须大写
 修改表
 update Mystudents set
 FMath=null where FName like '王%'
 --查询所有数学成绩为null的同学
 --数据库中只有三种逻辑结果true false nuknow,数据库中的null就是unknow
 select * from Mystudents
 where FMath is null
 --不为null
 select * from Mystudents
 where FMath is not null
 -------------------------
 Isnull函数
 select 
 FName,FAge,数学成绩=isnull(cast(FMath as varchar(50)),'缺考')
 from Mystudents
 where FMath is null
 --同一个列上的数据类型必须一致,如果不一致就报错-----------------------------------------------------------------------
 --数据排序oreder by (集合中的数据是无序的,如果排序之后有序了之后“游标”,集合可以作为一个查询的数据源,但是有序了的“游标”是不能作为数据源的。)
 select * from
 (select * from MyStudent where Fage>30) as tb1select * from
 (select  top 5 * from MyStudent where Fage>30 order by FAge desc) as tb1
 --oreder by 数据排序
 按英语成绩降序排列
 select * from Mystudents
 oreder by FEnglish desc
 --先按英语成绩排序再按再按数学成绩排序(先按英语成绩相同的再按数学排序)
 select * from Mystudents
 oreder by FEnglish desc,FMath desc,FAge asc
 --查询学生表中的成绩信息显示,姓名,性别,英语成绩,数学成绩,平均分
 select 
 Fname as 姓名,
 FGender as 性别,
 FEnglish as 英语成绩,
 FMath as 数学成绩
 平均分=(FEnglish+FMath)/2
 from Mystudents
 oreder by (FEnglish+FMath)/2 desc  -----oreder by 平均分 desc
 ---------------------------------------------------------------
 --数据分组group by --(数据挖掘)
 --统计Mystudents中男生和女生的个数
 select
    性别=FGender,
    count(*) as人数 
 from Mystudents
 group by FGender
 --查询Employees表,每个部门Id和这个部门的男性人数
 1.找这个公司
 2.对公司里的所有人喊:男的都出来
 3.让他们按照部门id站成几堆
 4.艾堆数人头
 select * from Employees
 select 
 部门id=EmpDepId,
 人数=count(*)
 from Employees
 where EmpGender='男'
 group by EmpDepId --------没有在group by中出现的字段,也不能出现在select中。having 语句对组进行筛选的。where也是进行筛选的。
 区别:
 where是在分组前进行筛选,having是在分组后进行筛选
 having的使用方式与where一样可以用betwee and,in
 例如:
 1.查询男性人数大于3人的部门
 select 
 部门号=EmpDepId,
 部门男性人数=count(*)
 from Employees 
 where EmpGender='男'
 group by EmpDepId
 having count(*)>3
 2.统计一下MyStudents那个表中的男同学和女同学的个数,列出人数大于20的
 select 
 性别=FGender,
 人数=count(*)
 from MyStudents
 group by FGender
 having count(*)>20 SQL语句执行顺序
 from
 where
 group by
 having
 select----选择列>distinct>top
 order byselect
 count(distinct(FGender)) as 性别,
 count(*)as 人数
 from MyStudentsselect top 5 * from MyStudents
 order by FEnglish desc 
 
1.热销售商品排名表,【即按照每种商品的总销售数量排序】。
 select
 商品名称=commodityName,
 总销售数量=sum(saveNumber)
 from MyOrders
 group by commodityName
 order by 总销售数量 desc
 2.统计销售总价格超过 3000 元的商品名称和销售总价,并按照销售总价降序排列。 
 select
 商品名称,
 销售总价=SUM (销售价格*销售数量)
 from MyOrders
 group by 商品名称
 Having SUM (销售价格*销售数量)>3000
 order by 销售总价 desc3.统计各个客户对“可口可乐”的喜爱程度(即统计每个购买人对“可口可乐”的购买数量) 
select
 购买人,
 购买数量=COUNT (*),
 购买名称='可口可乐'
 from MyOrders 
 group by 购买人
 order by 购买数量 desc