首页 > 代码库 > #3 SQL多表查询
#3 SQL多表查询
经验:
1,where 和having的区别?
where是用于原始字段的过滤,
having主要用于聚合函数的汇总过滤,虽然这个原始字段也是可以用的,但是不推荐,因为效率比where低
所以尽量少用having,能不用尽量不用(where 能实现的having 都能实现,但是效率低 )
2,count(*)和count(字段名)的差别
第一个会输出全部的行,,而第二个如果遇到为Null的,就不会数出来,
3,还有一个要注意的.如果 我要查询一个 hehe_haha ,hehe_xixi
这个怎么查询呢?
where name like ‘hehe[ _ ]%‘
要用这样,因为[ _ ] 这个代表的是一个下划线字符
今天教了挺多数据库的东西,很多都是我不懂得。所以这一章必须要好好学习。。。(PS:那个时候对聚合函数还有一些常用的函数不了解,发出的感慨啊。 )
1,查询
模板:所有的SQL语句,都是按照这个规则来的,顺序也是这样的,我们不能随意变动这个顺序。比如 from放到前面来是不行的。
select 字段名.....
from 表名
where 条件(这里只能是字段名才可以,不可以是别名)
group by 分组
having 条件
order by 字段名/别名/字段名组合 desc(降序)
取别名的方法:
1,select 别名=原始字段/字段组合/聚合函数 from 表名
2,select 原始字段/字段组合/聚合函数 别名 from 表名
3,select 原始字段/字段组合/聚合函数 as 别名 from 表名(Oracle不能加 AS)
怎么连接两个字段的值,
eg:
select 姓+名 as 姓名 from 基本信息表
然后加可以用,加减乘除都是可以的,(能运算的只有整型) 除了+
SQL关键字:
top:取出查询出来的前几个值/前百分之几的值
用法: select top 3/top 30 percent * from tablename
between: 从n(小) and m(大) (范围打击)
not:把这个条件取反
not between :不在..范围内(不单独使用)
in:在这几个值中的一个(定点打击) where name in(‘hehe‘,‘haha‘....)
distinct:查询的时候,只输出不重复的字段 eg:select distinct Id from tablename
like:模糊查找.(只针对于字符串)
select * from table
where name like ‘hehe%‘
like中有几个通配符:
1,% 代表任意个字符, >=0 ‘hehe%y‘ 与hehe开头,与y结尾
2,_ 代表一个字符 , =1 ‘h_‘ 两个字节
3,[] 代表括号内的一个 =1 [1-9] 1-9中的一个数
4,[^] 代表不在括号内的一个 =1 [^1,^3-9] 不是1,不是3-9中的一个,(如果取反.两个都要加^这个符号,要取反的加)
分组:这个是一个重点,.也是一个难点
格式:
group by 分组
having 聚合函数的过滤
----------------------------------
注意事项:
1,select除了聚合函数外,其他字段都要跟在group by 分组中
2,对聚合函数进行过滤,用having 而不是用where
聚合函数:
1,MAX(字段/字段组合) ---取最大值
2,MIN(字段/字段组合) --- 取最小值
3,AVG(字段/字段组合) ---取平均值
4,SUM(字段/字段组合) ---求和
5,COUNT(字段/字段组合) --计算行数
排序
order by 字段名/字段组合 desc(降序,默认升序)
一些关于时间的函数,这个是最麻烦的.也是最难的....
getdate() 获取当前时间 ------>不确定函数,因为每次运行的结果是不一样的
year(time) 返回年
month(time) 返回月
day(time) 返回天数
datediff(类型(返回天(dy)还是年(yy)?),开始时间,结束时间)
convert(转换出来的类型,表达式,类型(看帮组文档))
eg:convert(varchar(10), time,102(这个是YYYY.MM.DD))
datepart(类型,时间) 获取时间的一部分
这个类型可以查帮助文档
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。