SQL —-查询语句
sql SERVER 和.net结合的和很好
绝大多数数据库,都需要数据库服务器才能运行
表间关联,外键
数据类型 | 含义 |
---|---|
int | 每个数值占用 4字节,-2,147,483,648到2,147,483,647之间的整数 |
smallint | 2个字节 存储范围是-32,768 到 32,767 之间的整数,用来存储限定在特定数值范围内的数据。 |
tinyint | 1个字节 存储范围是0到255 之间的整数,用来存储有限数目的数值。 |
bigint | 8个字节 存储范围是-9,223,372,036,854,775,808到 9,223,372,036,854,775,807之间的整数 |
bit | 值只能是0或1,当输入0以外的其他值时,系统均把它们当1看待 |
float | 浮点型,它是一种近似数值类型,float(n)可储存1-53的可变精度浮点数值 |
money | 货币型 ,8个字节 |
datetime | 储存有效日期范围是1753/1/1~9999/12/31 8字节 |
smalldatetime | 储存有效日期范围是1900/1/1~2079/6/6,精确到分钟。 4 字节 |
char(m) | 定长 字符串 |
varchar(m) | 可变长度字符串 最大为m |
nvarchar(m) | 国际化可变长度字符串 |
text | 可变长度字符串,最大长度为 231 - 1个字节。 |
ntext | 国际化可变长度字符串,最大长度为 230 - 1个字符。 |
DDL:数据库定义语言 create drop
DML数据库操作语言 select insert update delete
选择dbo.stu —–列—–右键id—-修改——列属性—-修改表示规范 是
在一个数据表中除了选择主键自增 作为唯一标识之外,还能选择guid自动生成的字符串做唯一标识符
主键自增的优点,占用空间小,无序开发人员干预,阅读性强,缺点,效率低,数据导入导出缓慢
GUID的优点,效率高,数据导入导出方便,缺点是占用空间大
在开发中唯一标识大部分时间是给电脑看的,导入导出不方便的缺点就能忽略,不过,在实际的开发中还是根据需求去选择响应的方式
设置id的数据类型为uniqueidentifier
在添加的时候需要将id的值设置为 newid()
首先update语句执行了两个操作,先删除,后添加可以在sqlserver中输出 查看
update stu2 set name='设置唯一字段3'
output deleted.name,inserted.name
where id=7
这段话的意思是,将id为7 的列的name修改为 ‘设置唯一字段3’,那么会输出,原本的name,以及修改之后的name值
declare @id int = 7 //T-sql的语法 定义一个变量
update stu2 set name='zzz3' where id=@id
语句
select * from stu where name like '%设置唯%' order by id asc
order表示排序
like表示模糊查询 % 匹配任意字符串
“%唯一%”:查询表中所有含有“唯一” 字符串的行,
“%唯一”:查询表中以”唯一“字符串结尾的行
“唯一%”:查询表中以“唯一”字符串开头的行
select name,Count(*) from Stu2 group by name
这句话的意思是:查stu2表中name字段,并且按照name相同的列 进行分成一组。
max()取最大 avg()取平均
select name,Count(*) from Stu2 group by name having Count(*)>1
查询前三名
select top 3 from stu order by sclary desc
这个涉及到子查询
select top 3 * from stu
where id not in (select top 5 from stu order by id desc)
order by id desc
select distinct name from stu
select distinct name,age from stu //这段删除的是name,age完全重复的列
select name from stu
union
select name from stu1
函数名 | 含义 |
---|---|
abs() | 绝对值 |
ceiling() | 向上取整 |
floor() | 向下取整 |
round() | 四舍五入 |
函数名 | 含义 |
---|---|
len() | 计算字符串长度 |
lower() upper() | 转换大小写 |
ltrim() | 去掉左边的空格 |
rtrim() | 去掉右边的空格 |
substring(string,start_position,length) | string字符串,start_position开始位置,length()长度 |
select LTRIM(' bb '),RTRIM(' bb ')
//去掉左右两边 病统计长度
select LEN(LTRIM(RTRIM(' ACV ')))
函数 | 含义 |
---|---|
getdate() | 获取当前日期 |
函数 | 含义 |
---|---|
cast() | 类型转化 |
convert() | 类型转化 |
select cast('123456' as int) //转化成数字
select cast('2018-08-08' as datetime) //转成日期
convert(datetime,'2018-08-08')
convert(varchar(50),'1223')
函数 | 含义 |
---|---|
ISNULL(exp,value) | exp不是空返回exp,否则返回value |
select ISNULL(fNAME,'OOO') AS XINGMING FROM stu
case i
when 1 then one
when 2 then two
else 'nonono'
end
select name,(
case level
when 1 then '游客'
when 2 then '会员'
else '未知客户类型'
end
) as 等级 from person
//范围值的判断
select name,(
case
when level<= 2 then '游客'
when level<5 and level>=2 then '会员'
else '未知客户类型'
end
) as 等级 from person
单号的字段名 order 金额的字段名 money 数据表名为table
select order,
(
case
when money>0 then money
else 0
end
)as 收入,
(
case
when money<0 then abs(money)
else 0
end
)as 支出 from table
//解题思路 首先用case()函数将声场统计成1,负场统计成0,在group by 分组
select Name,
Sum(
case N'胜' then 1
else 0
end
) as 胜,
Sum(
case N'负' then 1
else 0
end
) as 负
from table
group by Name
全表扫描:逐条查询数据 —–效率最差
创建目录 经常要查询(检索)的字段 ——-where
能提高查询效率,对写程序没有影响
/* 即使创建了索引,仍然有可能全表扫描,比如使用like 函数 类型转换等
select t1.name,t2.age,t2.sex
from table1 as t1 join table as t2 on ti.cid=t2.pid
查询年龄大于15的人的name,age,sex
select t1.name,t2.age,t2.sex
from table1 as t1 join table as t2 on ti.cid=t2.pid
where t2.age > 15
查询年龄大于平均年龄的的人的name age sex
select t1.name,t2.age,t2.sex
from table1 as t1 join table as t2 on ti.cid=t2.pid
where t2.age > (select avg(age) from table2)
select t1.name,t2.age,t2.sex
from table1 as t1 join table as t2 on ti.cid=t2.pid
where t2.age > (select avg(age) from table2)
在使用 row_number() over()函数时候,over()里头的分组以及排序的执行晚于 where group by order by 的执行。
select name,age,sex,ROW_NUMBER() OVER(order by age desc) as 0;