--删除数据库
drop database [数据库名]
go
--创建数据库
create database [数据库名]
go
--打开数据库
use 数据库名
go
--创建表
create table [表名]
(
[列名] [数据类型] identity(增长种子,增长量) primary key(是否主键)(是否为空),
)
go
--删除表
drop table [表名]
go
--查找指定表中所有记录
select * from [表名]
--添加一条记录
insert into [表名] [列名] values [值]
--添加多行记录1
insert into[表名] [列名]
select [列名] from [数据来源表]
--添加多行记录2
insert into[表名] [列名]
select [值],[值] union
select [值],[值]
--用一个表中满足条件的记录生成另外一个新的表
select * into [表1] from [表2]
--删除记录1
delete from [表名] where [条件]
--删除记录2
truncate table [表名]
--给表中增加一个列
alter table [表名] add [新增列名] [数据类型]
--更新
update [表名] set [列名] = [更新值] where [条件]
--查询所有记录的所有列的值
select * from [表名]
--where子句(条件)
select * from [表名] where [条件]
--as对列重命名
select [原列名] as [新列名] from [表名] --方法一
select [原列名] [新列名] from [表名] --方法二
--列的合并
--方法1
select [列名1] + ',' + [列名2] as [新列名] from [表名]
--方法2
select [新列名] = [列名1] + ',' + [列名2] from [表名]
--查询有NULL值的记录
select * from [表名] where [列名] is null
--查询空字符串
select * from [表名] where [列名] = ''
--常量列
select [列名,新列名] =[赋值] from [表名]
--显示表中前n条记录
select top [n] * from [表名]
--显示表中百分之n的记录
select top [n] percent * from [表名]
--排序
--升序
select * from [表名] order by [列名]
--降序
select * from [表名] order by [列名] desc
--同时按照两个列排升序
select * from [表名] order by [列名1,列名2]
--sql函数
--返回长度的函数len
select len('字符串')
--返回字符串前n个字符的函数
select left('字符串',n)
--返回字符串后n个字符的函数
select right('字符串',n)
--替换字符串中的某个字符的函数
select replace('字符串','字符串中被替换的字符','替换后的字符')
--替换字符串中的指定位置n指定长度x的字符的函数
select stuff('字符串',n,x,'替换后的字符')
--取当前系统信息的函数
select getdate()
--将指定的数值添加到指定的日期部分后的日期的函数
select dateadd(指定的日期,添加的日期,getdate())
--转换数据类型的函数
select convert(要转换的数据类型,'被转换的数据类型的值')
--多表联查
select [表名一.表名一中的列名],[表二.表二中的列名]
from [表名一],[表名二]
where [条件] 如(表名一.列名(与表二的列名相符) = 表名二.列名(与表一的列名相符))]
--内连接
select [表名一.表名一中的列名],[表二.表二中的列名]
from [表1],
inner join [表2]
on (表名一.列名(与表二的列名相符) = 表名二.列名(与表一的列名相符))
--三表联查
select [表1.表1中的列],[表2.表2中的列],[表3.表3中的列]
from [表1]
inner join [表1中的列]
on (表名1.列名(与表2的列名相符) = 表名2.列名(与表1的列名相符))
inner join 表2中的列
on (表名2.列名(与表3的列名相符) = 表名3.列名(与表2的列名相符))
--查询值1到值2之间的值(所有的列)
select * from users
where age between 值1 and 值2
--查询某列指定的几个值(所有的列)
select * from users
where in 列名 ('值1','值2','值3')
--查询某列指定的几个值之外的所有值(所有的列)
select * from users
where nickname not in ('值1','值2','值3')
--查询某列中含有n的字符的所有值
select * from users
where 列名 like '%n%'
--查询某列出字段值为null的记录
select * from users
where 列名 is not null
--查询某列出字段值为空字符串的记录
select * from users
where 列名 = ''
--统计某表中有多少男性用户
select count(*) as 男性用户数量 from 表名 where sex<>'女'
--查找最大值
select max(列名) as 最大值 from 表名
--查找最小值
select min(列名) as 最小值 from 表名
--计算平均值
select avg(列名) as 平均值 from 表名
--计算总和
select sum(列名) as 总和 from 表名
--多表联查
--用where条件做
select 表名1.列名,表名2.列名
from 表名1,表名2
where 条件(两表ID相等)
--用内连接做
select 表名1.列名,表名2.列名
from 表名1 inner join 表名2
on 条件(两表ID相等)
--左外连接 ---左边的可以为空 右边的不可以
select 表名1.列名,表名2.列名
from 表名1 left join 表名2
on 条件(两表ID相等)
--右外连接 ---右边的可以为空 左边的不可以
select 表名1.列名,表名2.列名
from 表名1 right join 表名2
on 条件(两表ID相等)
--交叉连接
select 表名1.列名,表名2.列名
from 表名1 cross join 表名2
where 条件(两表ID相等)
--三表联查
select 表1.值1,表2.值2,表3.值3
from 表1
inner join 表2
on 条件(两表ID相等)
inner join 表3
on 条件(两表ID相等)
--group by
--统计编号为10001的学员所有考试的平均分
select sid,avg(mark)as 平均分
from score
group by sid
--统计每一门课程的平均分
select cid,avg(mark)as 平均分
from score
group by cid
--显示学生姓名和考试平均分
select u.nickname,avg(s.mark)as 平均分
from users as u
inner join score as s
on u.id=s.sid
group by u.nickname
--显示科目名称和科目平均分
select c.cname,avg(s.mark)as 平均分
from course as c
inner join score as s
on c.id=s.cid
group by c.cname
--显示平均分大于60分的学生姓名,科目名称,平均分
select c.cname,avg(s.mark)as 平均分
from course as c
inner join score as s
on c.id=s.cid
group by c.cname
having avg(s.mark)>60
and:只有两个条件都为true,整个表达式的结果才为true
or:只要有一个条件为true,整个表达式的结果就为true
not:条件为true,表达式结果为false;条件为false,表达式结果为true
常用语法
select * from YuanGong
select len('天下乌贼')
select name,len(name) from YuanGong
select upper(name) from YuanGong
where ID = 10
select lower('TIANXIA') as '大写转小写'
rtrim((ltrim(' wo '))
select right(name,2) from YuanGong
select left(name,1) from YuanGong
select replace('他们好我也好,他们坏我也坏','他们','它')
select stuff('我是中国人',3,2,'美国')
select getdate()
select name,getdate() as '当前时间'from yuangong
select dateadd(yy,4,getdate())
select datediff(hh,'2008-10-24','2009-1-1')
select datename(dw,'2008-10-24') as '星期'
select datepart(hh,getdate())
select sqrt(7)
drop database [数据库名]
go
--创建数据库
create database [数据库名]
go
--打开数据库
use 数据库名
go
--创建表
create table [表名]
(
[列名] [数据类型] identity(增长种子,增长量) primary key(是否主键)(是否为空),
)
go
--删除表
drop table [表名]
go
--查找指定表中所有记录
select * from [表名]
--添加一条记录
insert into [表名] [列名] values [值]
--添加多行记录1
insert into[表名] [列名]
select [列名] from [数据来源表]
--添加多行记录2
insert into[表名] [列名]
select [值],[值] union
select [值],[值]
--用一个表中满足条件的记录生成另外一个新的表
select * into [表1] from [表2]
--删除记录1
delete from [表名] where [条件]
--删除记录2
truncate table [表名]
--给表中增加一个列
alter table [表名] add [新增列名] [数据类型]
--更新
update [表名] set [列名] = [更新值] where [条件]
--查询所有记录的所有列的值
select * from [表名]
--where子句(条件)
select * from [表名] where [条件]
--as对列重命名
select [原列名] as [新列名] from [表名] --方法一
select [原列名] [新列名] from [表名] --方法二
--列的合并
--方法1
select [列名1] + ',' + [列名2] as [新列名] from [表名]
--方法2
select [新列名] = [列名1] + ',' + [列名2] from [表名]
--查询有NULL值的记录
select * from [表名] where [列名] is null
--查询空字符串
select * from [表名] where [列名] = ''
--常量列
select [列名,新列名] =[赋值] from [表名]
--显示表中前n条记录
select top [n] * from [表名]
--显示表中百分之n的记录
select top [n] percent * from [表名]
--排序
--升序
select * from [表名] order by [列名]
--降序
select * from [表名] order by [列名] desc
--同时按照两个列排升序
select * from [表名] order by [列名1,列名2]
--sql函数
--返回长度的函数len
select len('字符串')
--返回字符串前n个字符的函数
select left('字符串',n)
--返回字符串后n个字符的函数
select right('字符串',n)
--替换字符串中的某个字符的函数
select replace('字符串','字符串中被替换的字符','替换后的字符')
--替换字符串中的指定位置n指定长度x的字符的函数
select stuff('字符串',n,x,'替换后的字符')
--取当前系统信息的函数
select getdate()
--将指定的数值添加到指定的日期部分后的日期的函数
select dateadd(指定的日期,添加的日期,getdate())
--转换数据类型的函数
select convert(要转换的数据类型,'被转换的数据类型的值')
--多表联查
select [表名一.表名一中的列名],[表二.表二中的列名]
from [表名一],[表名二]
where [条件] 如(表名一.列名(与表二的列名相符) = 表名二.列名(与表一的列名相符))]
--内连接
select [表名一.表名一中的列名],[表二.表二中的列名]
from [表1],
inner join [表2]
on (表名一.列名(与表二的列名相符) = 表名二.列名(与表一的列名相符))
--三表联查
select [表1.表1中的列],[表2.表2中的列],[表3.表3中的列]
from [表1]
inner join [表1中的列]
on (表名1.列名(与表2的列名相符) = 表名2.列名(与表1的列名相符))
inner join 表2中的列
on (表名2.列名(与表3的列名相符) = 表名3.列名(与表2的列名相符))
--查询值1到值2之间的值(所有的列)
select * from users
where age between 值1 and 值2
--查询某列指定的几个值(所有的列)
select * from users
where in 列名 ('值1','值2','值3')
--查询某列指定的几个值之外的所有值(所有的列)
select * from users
where nickname not in ('值1','值2','值3')
--查询某列中含有n的字符的所有值
select * from users
where 列名 like '%n%'
--查询某列出字段值为null的记录
select * from users
where 列名 is not null
--查询某列出字段值为空字符串的记录
select * from users
where 列名 = ''
--统计某表中有多少男性用户
select count(*) as 男性用户数量 from 表名 where sex<>'女'
--查找最大值
select max(列名) as 最大值 from 表名
--查找最小值
select min(列名) as 最小值 from 表名
--计算平均值
select avg(列名) as 平均值 from 表名
--计算总和
select sum(列名) as 总和 from 表名
--多表联查
--用where条件做
select 表名1.列名,表名2.列名
from 表名1,表名2
where 条件(两表ID相等)
--用内连接做
select 表名1.列名,表名2.列名
from 表名1 inner join 表名2
on 条件(两表ID相等)
--左外连接 ---左边的可以为空 右边的不可以
select 表名1.列名,表名2.列名
from 表名1 left join 表名2
on 条件(两表ID相等)
--右外连接 ---右边的可以为空 左边的不可以
select 表名1.列名,表名2.列名
from 表名1 right join 表名2
on 条件(两表ID相等)
--交叉连接
select 表名1.列名,表名2.列名
from 表名1 cross join 表名2
where 条件(两表ID相等)
--三表联查
select 表1.值1,表2.值2,表3.值3
from 表1
inner join 表2
on 条件(两表ID相等)
inner join 表3
on 条件(两表ID相等)
--group by
--统计编号为10001的学员所有考试的平均分
select sid,avg(mark)as 平均分
from score
group by sid
--统计每一门课程的平均分
select cid,avg(mark)as 平均分
from score
group by cid
--显示学生姓名和考试平均分
select u.nickname,avg(s.mark)as 平均分
from users as u
inner join score as s
on u.id=s.sid
group by u.nickname
--显示科目名称和科目平均分
select c.cname,avg(s.mark)as 平均分
from course as c
inner join score as s
on c.id=s.cid
group by c.cname
--显示平均分大于60分的学生姓名,科目名称,平均分
select c.cname,avg(s.mark)as 平均分
from course as c
inner join score as s
on c.id=s.cid
group by c.cname
having avg(s.mark)>60
and:只有两个条件都为true,整个表达式的结果才为true
or:只要有一个条件为true,整个表达式的结果就为true
not:条件为true,表达式结果为false;条件为false,表达式结果为true
常用语法
select * from YuanGong
select len('天下乌贼')
select name,len(name) from YuanGong
select upper(name) from YuanGong
where ID = 10
select lower('TIANXIA') as '大写转小写'
rtrim((ltrim(' wo '))
select right(name,2) from YuanGong
select left(name,1) from YuanGong
select replace('他们好我也好,他们坏我也坏','他们','它')
select stuff('我是中国人',3,2,'美国')
select getdate()
select name,getdate() as '当前时间'from yuangong
select dateadd(yy,4,getdate())
select datediff(hh,'2008-10-24','2009-1-1')
select datename(dw,'2008-10-24') as '星期'
select datepart(hh,getdate())
select sqrt(7)