数据库的约束,聚合函数,group,类型转换

数据库约束

数据库的约束是为了保证数据的完整性而实现的一套机制

  1. 非空约束.设计,勾选null 完成.代码方式:
    alter tabletable_name akter column_name(type) not null
  2. 唯一约束:唯一,允许为空,但是只能出现1次.设计-右键-添加键/索引 表示名称UQ_table_name_column_name 索引类型设置为唯一键.代码方式: alter table_name add constraint UQ_table_name_column_name unique(column_name)
  3. 主键约束:唯一,不能为空.设计_右键设置主键.标识是.代码方式:alter table table_name add constraint FK_table_name_column_name primary key(column_name)
  4. 默认约束:列拥有默认值,但为空时,使用默认值取代空.设计-列属性-默认值.代码方式:alter table table_name add constraint DF_table_name column_name defaultv(value) for column_name
  5. 检查约束:限制范围以及格式.设计-右键-check约束,设置表达式.代码方式:alter table table_name add constraint CK_table_name_column_name check(表达式)
  6. 外键约束:设计-右键-关系.填写表和列规范,如果设置级联更新和级联删除.则会真正的关联起来
    代码方式:alter table table_name add constraint FK-table_name_column_name foreign key()–外键表主键 references department(列名)–主键表主键

给表中列起别名

第一种方式
关键字:as ”

select column_name1 as 'new column_name1',column_name2 as 'new column_name2' from table_name

第二种方式
关键字:as

select column_name1 as new column_name1,column_name2 as new column_name2 from table_name

第三种方式
关键字:=

select column_name1 = new column_name1,column_name2 = new column_name2 from table_name

select 100+90 在结果框显示190
print 100+90 在消息框显示190
select getdate() 获取当前时间

关键字:top num
查询前几条数据
select top 10 * from table_name order by column_name
查询百分比的数据
关键字:percent
select top 10 percent from table_name order by…
不遵从四舍五入方式,比如2.4,返回3列

order by column_name
按照某一列排序 默认从小到大.desc 从大到小

DISTINCT
去除重复数据
select DISTINCT column_name from table_name
对结果集进行数据处理

sql聚合函数

count

select count(*) from table_name 

查询表内数量的总数
Max

select Max(TsMath) from table_name

返回的只有一行没有表头-见桌面max1截图

min

select min(TsMath) from table_name

查询数学成绩最差
Sum

select sum(TsMath) from table_name

查询数学成绩的总和

avg

select avg(TsMath) from table_name

平均值

组合

select avg(column_name),sum(column_name) from table_name

请注意,如果值为null,则不参与运算,统计行的时候也不参与 null不参与聚合函数运算
count(*)null也会算一行 count(column_name1)则不会计算count
**建议不使用

select * from table_name

而使用具体的列

select column_name,column_name1 from table_name

这样子相对速度回快很多

between and

select * from student where table_name between 20 and 30 

这块是包含20和30的,优先使用between and 微软已经做过优化,效率会更高

in

select * from table_name where column_name in (value1,value2)

表内值为value1或者value2

模糊查询

(针对字符串使用)–正则表达式
模糊查询关键字:like
查询的是已value开头的,后面出现任意字符 %

select * from table_name like 'value%'

查询的是已value开头的,后面出现一个字符_

select * from table_name like 'value_'

查询的是已value开头的,后面出现两个字符__

select * from table_name like 'value__'

查询长度len(column_name)

查询已value开头的名字后面有字母的[a-z]

select * from table_name where column_name like 'value[a-z]%'

查询已value开头的名字后面是任意个%[%]

select * from table_name where column_name like 'value[%]%'

查询已value开头的名字后面有数字的 三个字符

select * from table_name where column_name like 'value[0-9]_'

查询已value开头的名字后面有非数字的 三个字符

select * from table_name where column_name like 'value[^0-9]_'

**数据库null意思为不知道,而不是没有
select null+1 结果为null**

is null
查询没有值的列

select * from table_name where column_name is null

not null
查询有值的列

select * from table_name where column_name is not null
order by column_name

排序
优先根据列1排序,列1数据相同的情况下根据列2排序

select * from table_name order by column_name,column_name1

根据列1+列2总和排序

SELECT * FRom table_name order by (column_name1+column_name2)

游标的概念:order by以后返回的数据集合称为游标

group by

题目-从学生表中查询出每个班班级id和班级人数

select clsssId,count(*) from table_name group by classId

Having 是在分组后再进行筛选

select clsssId,count(*) from table_name group by classId
having count(*)>3

普通的条件放在group by前,在进行筛选 having 放在最 后

练习:热销商品排名

select 商品名称,销售数量=sum(销售数量)
from table_name group by 商品名称 order by sum(销售数量) desc 

sql中的类型转换

cast(expression as data_type)
convert (data_type,express[style])

cast

select '当前时间' +cast(getdate() as varchar(20))

将时间格式转换为字符串格式

convert

select '当前时间' +convert(varchar(50),getdate(),第三个参数)

这边第三个参数是时间特有的.可以不填,填上是为了限制时间格式

isnull
案例

select isnull (convert(varchar(10),tsEnglish),'缺考') from table_name

如果为null则显示为缺考,如果不为null则正常显示

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值