当前位置:   article > 正文

SQLserver查询数据(详细)_sqlserver 查询

sqlserver 查询

    一.查询一个表所有数据*所有列 
select * from UserInfos
    二.查询部分列的数据 推荐选择     只需要部分列的数据 内存毕竟是有限的
select UserId,UserName,Age from UserInfos
    三.数据库里表字段 英文名称,程序中列名-中文
给列命名别名
-列名 as 别名 -列名 别名 -别名=列名
select UserId as 用户编号,UserName 用户名,年龄=Age
from UserInfos
为什么需要命名别名 --解决需要显示中文列名
    四.排序 order by 不管是否有条件,还是分组,order by 永远放在最后
主键,默认就有排序功能 从小到大--升序 asc
降序 从大到小 desc
    select UserId,UserName,Age from UserInfos
order by UserId desc  降序(针对UserId进行降序)
    select UserId,UserName,Age from UserInfos
order by UserId  默认是升序
    select UserId,UserName,Age from UserInfos
order by UserId,Age(在满足UserId排序的前提下再对Age排序,无法全部兼容)
    五.模糊查询
查询:模糊查询和完整查询
(1)% 0个或多个 匹配任意类型和长度 效率不高
--1)like '%ad%' 包含于
select * from UserInofs where UserId like '%2%' 
--2) like '%in' 以匹配字符或字符串结尾
select * from UserInfos where UserName like '%u'
--3)like 'w%'以匹配字符或字符串开头
select * from UserInfos where UserName like 'l%'
 (2) _ 匹配单个字符 限制表达式的字符长度
select * from UserInfos where UserName like '______'
查找到有6个长度的字符串,如 adminw,wasdxd等
select *from UserInfos where UserName like '_dmin'
匹配前面任意字符后面带有dmin的字符串,如:admin,ddmin,cdmin等
(3) [] 范围匹配 括号中所有字符中的一个
select *from UserInfos where UserName like'ad[mnd]in'
select *from UserInfos where UserName like'ad[m-p]in'
(4) [^]不在括号中所有字符之内的单个字符
select *from UserInfos where UserName like 'ad[^abd]in'
    六.范围查询
(1) select from where 子句 条件 --给定范围
--1)比较运算符 > <  >= <= <>
select *from UserInfos
where Age <30 and DeptId>1
--2)in(2,3,4)在这个范围内    not in(2,3,4)不在这个范围内
    select *from UserInfos
where Age in(30,35,24)
    select *from UserInfos
where Age not in (30,35,24)    
    select *from UserInfos
where DeptId in
(
  select DeptId from DeptInfos
)
--3)betweeen and 等价于>= and <=
select *from UserInfos
where Age between 20 and 33 --Age >=20 and Age<=33
(2) 前面多少条,百分比
select top 10 *from UserInfos  查询前10条的数据(一条有着所有的列)
select top 100 percent *from UserInfos 查询所有条中100%的数据
    七.聚合函数
count(*)包括了所有的列,相当于行数,在统计结果的时候,不会忽略列值为NULL
count(1)包括了忽略所有列,用1代表代码行,在统计结果的时候,不会忽略列值为NULL
count(列名)只包括列名那一列,在统计结果的时候,会忽略列值为空(这里的空不是只空字符串或者0,而是表示null)的计数,即某个字段值为NULL时,不统计
执行效率比较:
列名为主键,count(列名)比count(1)快
列名不为主键,count(1)比count(列名)快
如果表有多个列并且没有主键,则 count(1) 的执行效率优于 count(*)
如果有主键,则 select count(主键)的执行效率是最优的
如果表只有一个字段,则 select count()最优。
(1)select count(1) Record from UserInfos --Record 设置一个别名 不再是无列名      一般统计一个表的记录数
(2)sum 求合
select sum(Age) from UserInfos
(3) agv 平均
select agv(Age) from UserInfos
(4)max 求最大
select max(Age)from UserInfos
(5) min 求最小
select min(Age)from UserInfos
    八.group by 分组排序
select DeptId,count(1) as 用户数 from UserInfos
where Age>26
group by DeptId
having DeptId>1 --分组后的筛选条件
order by DeptId des
--语法:select ... where ... group by... order by...
-- select出现的列名,必须出现再 group by 之后或包含再聚合函数中
    八.连接查询之内连接 inner join on 关联条件
--连接查询:根据两个或多个表之间的关系,从这些表中查询数据
--目的:实现多表查询
--内连接分为等值连接,不等连接,自然连接
--1)等值连接
select * from T_student s,T_class c where s.classId = c.classId   
     等于  
select * from T_student s inner join T_class c on s.classId = c.classId  
     概念:在连接条件中使用等于号(=)运算符,其查询结果中列出被连接表中的所有列,包括其中的重复列。
--2)不等连接
 select * from T_student s inner join T_class c on s.classId <> c.classId
   概念:在连接条件中使用除等于号之外运算符(>、<、<>、>=、<=、!>和!<)
--3)自然连接
 select s.*,c.className from T_student s inner join T_class c on s.classId = c.classId
     概念:连接条件和等值连接相同,但是会删除连接表中的重复列。查询语句同等值连接基本相同:

根据年代语法规定分为显式写法和隐式写法
(1)显示写法 表 inner join 表 on 条件 where
select UserId,UserName,Age,(别名1)u.DeptId,DeptName
from UserInfos u
inner join DeptInfos (别名2)d on (别名2)d.DeptId=(别名1)u.DeptId
where Age>25
(2)隐式写法 select... from 表,表 where 关联条件 
select UserId,UserName,Age,u.DeptId,DeptName
from UserInfos u,DeptInfos d
where d.DeptId=u.DeptId and Age>25
    九.连接查询之外连接
外连接分为左连接(LEFT JOIN)或左外连接(LEFT OUTER JOIN)、右连接(RIGHT JOIN)或右外连接(RIGHT OUTER JOIN)、全连接(FULL JOIN)或全外连接(FULL OUTER JOIN)。我们就简单的叫:左连接、右连接和全连接。
--1)左连接
概念:返回左表中的所有行,如果左表中行在右表中没有匹配行,则结果中右表中的列返回空值。
select * from UserInfos u--左表
left outer join DeptInfos d--右表 outer 可以省略 
on u.DeptId=d.DeptId
--2)右连接
概念:恰与左连接相反,返回右表中的所有行,如果右表中行在左表中没有匹配行,则结果中左表中的列返回空值。
select * from UserInfos u
right join DeptInfos d
on u.DeptId=d.DeptId
--3)全连接
概念:返回左表和右表中的所有行。当某行在另一表中没有匹配行,则另一表中的列返回空值
select *from UserInfos u
full join DeptInfos d
on u.DeptId=d.DeptId
    十.连接查询之交叉查询
交叉连接(CROSS JOIN):也称迪卡尔积
概念:不带WHERE条件子句,它将会返回被连接的两个表的笛卡尔积,返回结果的行数等于两个表行数的乘积,如果带where,返回或显示的是匹配的行数。
(1)不带where
select *from UserInfos u
cross join DeptInfos d
(2)带where--只显示匹配出来的行数
select *from UserInfos u
cross join DeptInfos d
where u.DeptId=d.DeptId
 (注:cross join后加条件只能用where,不能用on)  
    

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/703838
推荐阅读
相关标签
  

闽ICP备14008679号