查询总结
基本查询
1、select * from department
2、distinct 去除重复行 top 5 top 10 percent
3、聚合函数 --avg() 平均值 --sum 求和 --count 求行数 --min 求最小值 --max 求最大值
4、带条件查询
select 列 from 表 where 条件
between...and...
in (1,3,5) lie = 1 or lie =3
模糊查询 like %代表任意多字符 _代表任意单个字符
[0-9][a-Z]不区分大小写 [acd] 匹配范围内的单个字符
5、查找null值 is null is not null=================
6、对查询排序 order by 列名 asc升序(可省略) desc 降序
7、难点====分组查询group by...having 在分组查询中,查询的列名
必须出现在group by后或者在聚合函数中 --查询平均工资大于两千块钱的部门
select department_id,avg(wages)
from employee
where department_id is not null
group by department_id
having avg(wages)>2000 以上都是要掌握的,下面是要了解的
8、同时插入多条语句 把查询到的结果插入到现有表中
insert into 现有表 select 字段 from 表 把现有表的数据插入到一个新表
select 字段 into 新表 from 表 --把现有表的数据插入到新表(表不能存在)
--select * into newStudent from student --把现有表的数据复制到一个已存在的表
--insert into backupStudent select * from students
9、合并查询union 去除重复项 union all 不去除重复项 所以效率高 一次插入多条数据 insert into Score(studentId,english,math) select 1,80,100 union select 2,60,80
函数
1、ISNULL(expression,value) 如果expression不为null返回expression表达式的值,否则返回value的值
2、字符串函数
LEN() :计算字符串长度
LOWER() 、UPPER () :转小写、大写
LTRIM():字符串左侧的空格去掉
RTRIM () :字符串右侧的空格去掉
LTRIM(RTRIM(' bb '))
LEFT()、RIGHT() 截取取字符串
SUBSTRING(string,start_position,length)
参数string为主字符串,start_position为子字符串在主字符串中的起始位置(从1开始),
length为子字符串的最大长度。
SELECT SUBSTRING('abcdef111',2,3)
REPLACE(string,oldstr,newstr)
3、日期函数
GETDATE() :取得当前日期时间
DATEADD (datepart , number, date ),计算增加以后的日期。参数date为待计算的日期;参数number为增量;参数datepart为计量单位,可
选值见备注。
DATEADD(DAY, 3,date)为计算日期date的3天后的日期,而DATEADD(MONTH ,-8,date)为计算日期date的8个月之前的日期
DATEDIFF ( datepart , startdate , enddate ) :计算两个日期之间的差额。 datepart 为计量单位,可取值参考DateAdd。
DATEPART (datepart,date):返回一个日期的特定部分 整数 DATENAME(datepart,date):返回日期中指定部分 字符串
YEAR() MONTH() DAY()
4、类型转换函数
CAST ( expression AS data_type)
case(score as varchar(10))
CONVERT ( data_type, expression[,style])
取日期部分 2012-12-21
1、CONVERT(varchar(100),getdate(),23)
2、CONVERT(varchar(10),getdate(),21)
嵌套查询(子查询) 子查询返回的值不止一个。 --当子查询跟随在 =、!=、<、<=、>、>= 之后,或 子查询用作表达式时,这种情况是不允许的。
在子查询中,一搬我们会使用in 代替 =使用
select employee_id,employee_name
from employee where department_id in (
select department_id
from department where department_name='销售部'
)
连接查询
内连接 inner join...on... 查询满足on后面条件的数据 外连接
左连接 left join...on... 先查出左表中的所有数据 再使用on后面的条件对数据过滤
右连接 right join...on... 先查出右表中的所有数据 再使用on后面的条件对数据过滤
交叉连接 cross join 没有on 第一个表的每一行和后面表的每一行进行连接 没有条件。是其它连接的基础