数据库笔记
创建数据库表语法
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
左外联:以左边(左表)的表为主表 右边(右表)的表的数据逐条匹配左表中数据
浙公网安备 33010602011771号