您的位置:首页 > 其它

模糊查询 空值处理 数据排序oreder by 数据分组group by

2012-11-05 17:50 316 查看
--带条件查询

select

列名

from

数据源(表名,子查询的结果,视图)

where

条件(筛选一些行)

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

select * from MyStudents

select

FId as 学号,FMath as 数学成绩

from MyStudents

where FMath<60 --60<=FMath and FMath<80

go

2--查询年龄大于20的男学生

select * from MyStudents

select

FName as 姓名,FAge as 年龄

from MyStudents

where FAge>20 and FAge<=30 and FGender='男'

go

3--between ..and 查询年龄在27-30之间的男学生

select * from MyStudents

select

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 tb1

select * 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 by

select

count(distinct(FGender)) as 性别,

count(*)as 人数

from MyStudents

select 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 销售总价 desc

3.统计各个客户对“可口可乐”的喜爱程度(即统计每个购买人对“可口可乐”的购买数量)

select

购买人,

购买数量=COUNT (*),

购买名称='可口可乐'

from MyOrders

group by 购买人

order by 购买数量 desc
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐