--条件:gender='女' 并且age 在18到20之间,包含18 和 20
--指定 年龄等于18 20 23
select * from Person where gender='女' and age in(18,20,23) ? --条件:gender='女' 并且age=18并且age=20并且age=23
?
SQL server学习_函数、类型转换
?
一、复习?
1、建库建表?
?
?
use master
go
if db_id('Mydatabase') is null
create databese Mydatabase
go
use Mydatabase
go
if object_id('MyTable','U') is not null
drop table MyTable
(
id int identity(1,1)primary key,
tName nvarchar(10) not null,
tAge int,
tGender bit
)
go
?
?
??
2、增?
? ?insert into 表名(字段1,字段2,....)values(值1,值2...)?
注:--》在C#中,SQL语句是一个字符串?
? ?--》SQL中的数字在C#中就是个字符串?
? ?--》SQL中的字符串在C#中是带单引号的字符串?
删?
? ? ? --》删除数据?
? ? ? ? ? delete from 表名 where 条件?
? ?--》删除表?
? ? ? ? ? ?drop table 表名?
? ? ? ? ? ? ? ? use master?
? ? ? ? ? ? ? ? go?
? ? ? ? ? ? ? ? ?drop database
数据库名?
? ?--》截断表(归零)?
? ? ? ? ?truncate table 表名?
? ? ? ? ? ? -》将数据全部清空、归零,不记入日记文件中?
改?
修改数据?
? ? ? ? ?update 表名 set 字段=值?
修改表结构?
? ? ? ? ? alter table 表名 add ?
? ?alter table 表名 drop?
? ?alter table 表名 alter?
2、简单查询?
? select * from 表名 where 条件?
关于条件的范围?
? ? between and(两边都取的到)?
in(。。。)?
3、模糊查询?
模糊查询就是给定一些不完整的条件要查出数据库中的数据的查询?
比如说-- ?要查出谋张表的所有姓张的人、要查出名字以张开头并且名字是两个字的?
这时候就可以用到模糊查询了,?
模糊查询有常用的几个个统配符 (这些通配符加个[]中括号括起来就表示普通符号)?
? ? ?--》% 百分号?
? % 表示任意个任意字符,可以没有也可以有一个?
? --》_ 下划线?
? _ 表示一个任意字符?
? --》^ ?非?
? ^ ?和正则表达式的 ‘非’ 很相似,在数据库里这个‘非’要与[^]连起来用,如果没有中括号就是普通字符?
? --》[] ?中括号?
? [] 的第一个功能就是前面说到的当字段、表名等的命名与系统的关键字冲突的时候可以把其用[]括起来?
第二个就是匹配字符,注意:[]只匹配里面的第一个字符?
4、空值处理?
空值就是 null,在SQL server里null表示空,其值是不知道的意思,null和空字符(‘ ’)有区别,空字符(‘ ’)是有值的是有内容的,而Null则是不知道,两者不相同?
判断null只能用 is null 和 is null?
? --》空值替换 ? isnull(字段,要替换的值)?
比如说要把一张表的空值替换成123?
select isnull(检查的字段,要替换的值) from 表名
?
5、排序 ? order by?
? --》asc 升序排序,不写默认就是升序排序?
? --》desc 降序排序?
order by 排序的执行顺序永远是在最后执行的,如果有where筛选,order by总是放在后面,这样会提高效率?
多列排序(从左到右)?
select * from 表名 order by?
字段1 [desc],字段2[desc],。。。。
?
6、数据分组?
select语句中可以使用group by 子句将行划分成较小的组,然后使用聚合函数返回每一个组的汇总信息?
group by 只返回一个值,一旦使用了group by分组后,前面select列表就不可以写显示多个值的字段,除非是函数列表或者是分组列表成员?
比如说要显示所有班级的总人数,同时还要把每个班的所有人的名字一起显示出来,那是不可能的,group by值返回一个值
?
7、having语句?
having语句和where一样都是筛选,但是having和where的执行顺序不同,having是group by的条件对分组后的数据进行筛选,having是对分组后的数据进行筛选的?
having要位于group by之后,注意having中(就是其后的判断条件)不能使用未参与分组的列,?
8、联合结果集?
--》单值结果集?
--》行结果集?
--》表值结果集?
结果集就是select查询出来后的结果?
union可以把多个结果集合并成一个结果集?
语法:?
查询语句1?
union?
查询语句2
?
? --》union会自动把财富的数据合并?
? --》union all会保留重复数据?
一般都是使用union all效率会高点,因为union合并之后会再检索一边里面有没有重复的数据?
--》联合要注意一点:多个查询语句之间对应的数据类型要一致
?
9、字符串函数?
--》len():计算字符串的长度(就是字符的个数)?
--》datalength():计算字符串字节数,不属于字符串函数,是个系统函数?
--》lower()、upper():转小写,大写?
--》ltrim():去除字符串左侧的空格?
--》rtrim(): ?去除字符串右侧的空格?
--》ltrim(rtrim(' ? ab ? ? ')):去除字符串左右两侧的空格?
--》left()、right():截取字符串,?
? ?select left('abcdefghijk',2);第一个参数是要截取的字符串,第二个参数是截取几个?
--》substring(要截取的字符串,开始截取的位置,截取的长度)?
这里的字符串的位置是从1开始的没有0
?
10、日期函数?
-->getdate() ? 获得当前系统时间,年-月-日 时:分:秒:毫秒
?
--》select day(getdate()) ? 或得当前天数
?
--》select month(getdate()) ?获得当前月数
?
--》select year(getdate()) ? 获得当前年份
?
--》dateadd(在那个部分增加,增加多少,日期)
?
--》datediff(单位,开始的时