数据库笔记

创建数据库表语法
create database user;//创建user数据库
drop database user;//删除user数据库
//创建表
create table student

id int(11),
name varchar(20),
email nvarchar(50),
sex char(2),
sal float

);
//向表中插入数据 如果主键自增不需要给主键赋值,否则需要赋值主键自增
insert into student(name,email,sex,sal)
values(1,'小明','123456@qq','男',3000.0);


//将查询出来的数据复制到已建好的另一个表中,
前提 表中字段,和查询出来的字段一一对应

insert into address (name,email,sex)
select name,email,sex
from student
//不要新建表 将查询出来的数据复制到新的表中
go
select name,email,sex
into address
from student
go

//批量插入多条数据
create table us(
id int primary key,
name varchar(20) default '张三',
sex char(2) default'男',
age int check(age>20)

);
go
insert us (id,name,age)
select 2,'张可',27 union
select 3,'李阳',42 union
select 4,'言笑',32 union
select 5,'王娟',27
go


///建表
create table cf(
id int primary key,
name varchar(20),
class int,
xueshi int
);

insert into cf
values(1,'s120130',80,20)


//修改替换值
update abc.dbo.us set
全改update us set sex='女'where sex='男' us为表名 sex性别


//默认全插入
insert into us
values(id ,name,age)
//修改更新
update us set age=25 where age=20//年龄为20改成25岁
//删除
delete from us where id=5 //删除id是5的那条数据
//清空
truncate table us

//drop,truncate和delete区别

drop排行老大,删的最彻底 表结构和数据全删
truncate table us排行老二比较温柔 数据和空间全部清空当不删除表结构
delete form us 排行老三 最温柔 只删除数据

//导入导出
必须会 .tet .sql 文件 导出 .mdf文件附加

//查询
select*from表名 where条件 (name=?? sex=?? 填你要查的) order by字段(name sex)
//查询
select name ,sex from 表名 where class=一年级 and age>30


ASC默认排序方式(升序)DESC降序 *代表所有列可查 效率较低
//别名
AS 别名 结果更人性化

//select中 + 使用

1如果 + 连接数值型数据,结果为数组的和
2如果 + 连接数据类型不兼容 ,报错
3如果 + 连接字符型数据,结果为字符串数据连接

//查询空值
select name from us where age is null
//查询常量值
select 姓名=name,age=年龄, ‘北大青鸟’as学校名称


/// 数据库中的函数
//字符串函数
charindex('a','abc') 查找a在abc中下标
len('abc')返回指定字符串长度
upper('abc')将指定字符串变为大写
ltrim('abc')去除字符串左边空格
rtrim('abc')去除字符串右边空格
right('abc,def',3)返回3个从右边开始的字符
replace('abc','b','B')将字符串中b代替为B
stuff('abc',1,2,'你好’)删除1和2两位置字符.用你好代替


//日期函数
getdate() 返回年月日时分秒格式当前时间 yyyy-mm-dd hh:mm:ss

dateadd(mm,2'2009-8-14')在指定的日期基础之上增加2个月

datediff(dd,'2009-9-1','2010-10-1')返回两个日期间相差的天数

datename(dw,'2016-12-23')返回指定日期是星期几

datepart(yyy,'2016-12-23')返回年数的整形形式



//数学函数

rand()随机生成0--1之间包含1float类型的随机数

abs(负数)取决对值

ceiling(23.5)取距离 大于指定数字最近的整数

floor(23.5)取距离 小于指定数字最近的整数

power(5,2)5的2次方幂运算

round(12.5632,2)四舍五入运算,2指定小数点后位数

sign(5)对于正数返回+1,对于负数返回-1,对于0返回0 类比于compareto

sqrt(9)去浮点表达式平方根

 

//系统函数 4er

convert(int,'123456')返回int型123456 类型转换函数

datalength('中国A联盟')返回表达式字符长度 结果为9

host_name()返回当前计算机名称


//////用sql语句修改表名
exec sp_rename '表名,旧列名','新表名','column'
/////排序
order by
/// 模糊查询 like
语法 select*from user where name like‘表达式’
表达式中四种通配符
_(下划线) 指任意一个字符
% (百分号) 指任意长度字符串
[](中括号) 指括号中所指定范围内的一个字符 列如[z-z]或[1-9]
[^](带小三角中括号) 指不在括号中所指定范围内的一个字符 列如[^1-2] 指不是1或2
如果表达式中没有通配符 指全匹配

//// 非空查询的三种条件
select*from user where name is NULL 数据库中是大写的NULL(user是指数据库加表名)
select*from user where name='null' 数据库中是小写的NULL
select*from user where name ='' 数据库是空字符串

/// 范围查询

between and 语法 sselect*from user where id in (10,20,30)查询id是10,20,30的数据

/// 常用的聚合函数
求和函数sum()语法select sum(score)as总成绩from user
求平均值函数avg()语法select avg(score)as平均成绩from user (user数据名表名)
求最大值函数max()语法select max(score)as最高成绩from user
求最小值函数min()语法select min(score)as最低成绩from users
求总人数count(*或列名)select count(*)as总人数from user
select count(id)as总人数from user 查询效率高

///// 降序排列
order by AVG (studentresult是列名) desc

// 模糊查询
select 列 from 表
where 列 like '%王%',

select * from dbo.Student
where Sname like '%风%'

//两表查询
select * from dbo.SC,dbo.Student where dbo.SC.S#=dbo.Student.S# 详情看系统数据库master
///查询SC 和Student表 score<60的人数 详情看系统数据库master
select * from dbo.SC AS c,dbo.Student AS s
where c.score<60 and c.S#=s.S# and c.C#=01
查询后降序排序
order by c.score desc
//详情看系统数据库master
select s.S#[编号],s.Sname[姓名],COUNT(c.S#),sum(c.score)
from dbo.SC AS c,dbo.Student AS s
where s.S#=c.S#
group by s.S#,s.Sname

/////左链接查询
select s.Sname[姓名],sum(c.score)
from dbo.Student AS s
left join SC AS C ON(s.S#=c.S#)
group by s.S#,s.Sname
order by sum(score)desc


/// 表关联查询和分组

分组 select聚合函数,字段.....from 表名 group by (select中出现字段,group by 中一定要写)


having 子句是对我们查询结果二次解锁(只能出现select中出现的字段)

如果select中出现聚合函数在不分组的情况下,不能出现其他字段,结果就一条。
如果分组,分了几组就要几条数据。


内连接
inner join 如果外键表忘记引用主键表id(会存在数据丢失)

外连接
分为左外联(left join)和右外联(right join)
左外联可以改为left outer join 右外联 可以改成 right outer join
左外联:以左边(左表)的表为主表 右边(右表)的表的数据逐条匹配左表中数据

posted on 2018-04-09 18:16  淡淡芳草香  阅读(146)  评论(0)    收藏  举报