黑马程序员—传智播客sql从入门到提高视频知识整理(3)

时间:2023-02-19 15:07:29

---------------------- Windows Phone 7手机开发.Net培训、期待与您交流! ----------------------

模糊查询,通配符过滤使用like,单字符通配符"_",多字符通配符"%":
select * from tb_Student where name like '_aa'(查询姓名以任意单个字符开头,剩余部分为aa的学生信息);
select * from tb_Student where name like '%aa%'(查询姓名中含aa的学生信息)。

数据库中一个列没有指定值,值为null,null表示“不清楚”,但不是没有:
select * from tb_Student where name=null 与 select * from tb_Student where name!=null 都没有返回结果。
所以SQL中使用is null,is not null 来进行空值判断:
select * from tb_Student where name is null;(返回结果为表中姓名为空的学生信息)。

where判断:
select * from tb_Student where age=23 or age=25(or"或者" 年龄为23或者25的学生信息);
select * from tb_Student where age in(23,25,28);(in“在此之内的” 年龄为23,25,28的雪上信息)
select * from tb_Student where age not in(23,25,28);(not in“不在此内的”)
select * from tb_Student where age>20 and age<=30;(年龄大于20而且小于等于30的)
select * from tb_Student where age between 20 and 30;(between and “在…和…之间的” 年龄在20到30之间的)

分组:group by 语句:
select age,count(*),avg(age) from tb_Student group by age;  (按年龄分组后,返回各年龄段、总人数和平均年龄)

聚合函数不能出现在where语句中,必须使用having(having不能替代where),having位于group by之后,having是对分组后信息的过滤,能用的列与select中的列相同,select中没有出现的列,having中也不能出现:
select age,count(*) from tb_Student order by age having count(*)>3
(显示按年龄升序排列的各年龄段总人数大于3的年龄和人数)

限制结果集行数:top:
select top 5 * from tb_Student;(表中前5行信息)

去重,Distinct(distinct是对整个结果集进行数据重复处理,不是只针对每单个列的):
select distinct name from tb_Student; (将返回表中所有姓名,重复姓名显示一个)
select distinct name,age from tb_Student; (将返回表中所有姓名与年龄信息,两项都重复的则只显示一个)

 联合结果集 union:
select name,age from tb_Student
union
select name,age from tb_Teacher
(结果为student表中name与age数据,和teacher表中的那么,age数据在同一表中显示,teacher在student下面)
使用union联合,上下列数与数据类型都必须相同,如果列数不同,则在缺少列里添加相同数据类型的值:
select name,age,grade from tb_Student
union
select name,age,0 from tb_Teacher(则grade行,teacher表全显示为0)
select name,age,class from tb_Student
union
select name,age,'无班级' from tb_Teacher(则class行,teacher表全显示为无班级)
union合并两个查询结果集,并且将其中完全重复的数据合并为一条。因为要进行重复值扫描,所以效率低,如果不确定必须 要合并重复行,则可以用union all:
select name,age from tb_Student
union all
select name,age from tb_Teacher

select top 50 * from tb_Student order by newid();(指随即抽取50个学生信息)

 

---------------------- Windows Phone 7手机开发.Net培训、期待与您交流! ----------------------