SQL 基本语句解释

create database database2 数据库名称
On
 (
   name='database2_dat',名字
   filename='C:\Program Files\Microsoft SQL Server\MSSQL\Data\database2_dat.mdf',路惊
   size=10,maxsize=unlimited,filegrowth=10%文件大小最大只增长方式
 )
 log on 日志文件
(
  name='database2_log',
  filename='C:\Program Files\Microsoft SQL Server\MSSQL\Data\database2_log.ldf',
  size=1,maxsize=5,filegrowth=1
)
数据库文件和日志文件语句。。
 

filegroup fg1
 (  name='database52_data',
  filename='c:\program files\microsoft sql server\mssql\data\dddd_data.ndf'
  size=10,maxsize=20,filegrowth=5
 )
文件组文件语句。。必须要在数据库名称之后才能生效。。文件组包括在数据库里面。。
      2  重命名。。把WOKAO 文件改为LIU文件 语句
             方法一sp_renamedb wokao , liu 
             方法二  alter database liu
                   modify name=wokao   


             数据管理

 

      --创建数据库
create database liushuai
 on
 (name='liushuai',
  filename='c:\program files\microsoft sql server\mssql\data\liushuai_dat.mdf',
  size=10,
  maxsize=20,
  filegrowth=10%
  )
 use liushuai
--创建学生表
create table liushuai
 (
   sno int primary key, --学号。为整数,主键
   sname varchar(10) not null,--姓名为可变不为空
   stel char(12), --电话为固定12位
   sage smallint check(sage>=18 and sage<=25),--约束于在18-25之间
 ssex bit default(1)  --性别
   )
 --查看对象
 select * from liushuai 
--使用增量
 create table cs
 (sno int identity(1,1)
 )
--修改基本表
alter table }{--创建数据库
create database liushuai
 on
 (name='liushuai',
  filename='c:\program files\microsoft sql server\mssql\data\liushuai_dat.mdf',
  size=10,
  maxsize=20,
  filegrowth=10%
  )
 use liushuai
--创建学生表
create table liushuai
 (
   sno int primary key, --学号。为整数,主键
   sname varchar(10) not null,--姓名为可变不为空
   stel char(12), --电话为固定12位
   sage smallint check(sage>=18 and sage<=25),--约束于在18-25之间
 ssex bit default(1)  --性别
   )
 --查看对象
 select * from liushuai
--使用增量
 create table cs
 (sno int identity(1,1)
 )
--修改基本表
alter table <表名>
add [字段名 数据类型]--增加新量
alter table [表名]
drop column[列名]--删除该列
alter table [表明]
alter column[列名  类型]--修改该列类型
--课程表
create table course
 (
  cno int primary key,--课程号
  cname varchar(10)not null,--课程名不为空
  cpno int identity(2,1),--上一课程号,必须完成上一个号才可以完成该号
  ccredit decimal(4,1),--学分在111.1规定内
  cutime smallint --课时数为整数
  )
--学生选课表
create table sc 
(
  sno int identity(1,1),  --学号
  cno int unique,         --课程号唯一不允许取重复直
  grade decimal(4,1)      --成绩
)
add sbig int--增加新量
alter table liushuai
drop column sbig--删除该列
alter table liushuai
alter column sname varchar(11)--修改该列类型
--课程表
create table course
 (
  cno int primary key,--课程号 为主键(contraint pk primary key(cno,cpno)设这俩个为主键。只是俩个属性来表示。一个表中只能有个一主键,可以用俩个属性来表示。。呵呵)
  cname varchar(10)not null,--课程名不为空
  cpno int identity(2,1),--上一课程号,必须完成上一个号才可以完成该号
  ccredit decimal(4,1),--学分在111.1规定内
  cutime smallint --课时数为整数
  )
--学生选课表
create table sc 
(
  sno int identity(1,1),  --学号
  cno int unique,         --课程号唯一不允许取重复直
  grade decimal(4,1)      --成绩
)
      单行的修改。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
create database student
use student
create table student
(
   sno int primary key,
   sname varchar(10)not null,
   ssex bit default(1),
   stel char(12),
   sage smallint check:(sage>=18 and sage<=25)
  )
--插入数据
  insert into student(sno,sname)
  values (1,'李一')
  insert into student(sno,sname,ssex,stel,sage)
  values (2,'晓亮',1,123456123123,19)
--增加新列
 alter table wokao
 add stel char
--把student的stel插入到wokao
select * from student

 insert into wokao(stel)
 select stel
 from student

select sage不需要事先见表
into aaaa
from student

 


insert into wokao
 select sname,stel
 from student
--把都为空的年龄该为20
update student set sage=20
where sage is null
--当年龄为22时改为23
update student set sage=23
where sage=22
--删除年龄为23时的一行。。。。
delete from student
where sage=23
--所有年龄+1
update student
set sage=sage+1 
            约束规则。。。。。。。。。。。。。。。。。。。。。。。

create database student
use student
create table liushuai
(
  sno int,
  sname varchar(10),
  schengji decimal(4,2),
  ssex bit default(1),
  stel char(12),
  sage smallint check:(sage>=18 and sage<=25),
  constraint pk primary key (sno)  --设置sno 为主键
)
--查看主键信息
sp_pkeys liushuai
--浏览表中的所有约束建
sp_helpconstraint liushuai
--删除主键
alter table liushuai
drop constraint pk
sp_pkeys liushuai
--添加主键
alter table liushuai
add constraint pk primary key (sno)
--查看主键
sp_pkeys liushuai
--添加唯一建
alter table liushuai
add constraint up unique (sname) --姓名添加唯一建
alter table liushuai with nocheck

--禁用约束
alter table liushuai
nocheck constraint CK__liushuai__sage__7C8480AE
--禁用约束然后添加不符合要求的
insert into liushuai
values (2,'王2',82,1,123456789123,15)

--启用约束
alter table liushuai
check constraint CK__liushuai__sage__7C8480AE

 

drop table liu

create table liu
(
 sno int,
 sname varchar(10),
 stel char(12),
constraint fk foreign key(sno) references liushuai(sno)
on delete cascade
 )


alter table liu
drop  constraint CK
select * from shuai
--连续添加多个数据
insert into liushuai(Sno,sname)
select 9,'saf' union
select 2,'sg' union
select 3,'ags'

insert into liu(Sno)
select 1 union
select 2 union
select 9

alter table liu with nocheck
add constraint CK check(sno>0 and sno<5)

insert into liu(Sno)
select 12 union
select 0
                              使用规则。。。。。。。。。。。。。。。。。。。。。。
--使用规则
-创建一个表格
create table shuai
(
 sno int,
 sname varchar,
 gongzi int
)
--使用一个规则
create rule gongzi_rule
as @gongzi>=1000 and @gongzi<=1500
--绑定规则
sp_bindrule gongzi_rule,'shuai.gongzi'
 --添加数据
insert into shuai(gongzi)
values (500)
--解除规则
sp_unbindrule 'shuai.gongzi'
--列如
create table wang
(
 sno int primary key,
 sname varchar(10),
 sage smallint check:(sage>=18 and sage<=25)
)
create rule xingming_rule
as @xingming in('刘')
 sp_bindrule xingming_rule,'wang.sname'
insert into wang(sno,sname)
values(2,'刘')
create rule xing
--建立以个以姓刘的名字g规则
--先建立一个表格
create table yang
(
 sname varchar(12)
)
--第二建立一个规则
create rule ming
as @ming like '刘%'
--绑定规则
sp_bindrule ming,'yang.sname'
--添加数据
insert into yang(sname)
values ('刘帅')
select * from yang
--不符合要求
insert into yang(sname)
values ('杨华')

 

 

 

 

 

--删除student表中的主键约束
sp_pkeys student
alter table sc
drop constraint FK_SC_Student
alter table student
drop constraint PK_Student
select * from student
--向student表添加主键约束
alter table student
add constraint PK_student primary key(Sno)
--
create table stu
(
 Sno int,
 Sname varchar(10)
)
--向表中添加主键约束
alter table stu
alter column sno int not null

alter table stu
add constraint PK_stu primary key(sno)
--向student中sage列添加检查约束,不检查之前的数据
select * from student
alter table student with nocheck
add constraint CK_student check(sage>18 and sage<25)
insert into student(sage,Sno)
values (12,2005007)
alter table student
nocheck constraint CK_student

--禁用course表中的所有约束
alter table course
nocheck constraint all
--创建规则
create rule rule_sc
as
@score>=60 and @score<=100
--绑定规则
select * from sc
sp_bindrule rule_sc,'sc.grade'
--检验是否已绑定
insert into sc
values(2005005,4,59)
--解除绑定
sp_unbindrule 'sc.grade'
--创建邮箱数据类型'%@%'
sp_addtype 'Email','varchar(50)'
--创建规则
create rule rule_Email
as
@email like '%@%'
--将规则绑定到Email数据类型上
sp_bindrule 'rule_Email','Email'
--检验
create table tongxunlu
(
 Sname varchar(10),
 Semail Email
)
--插入记录,可插入
insert into tongxunlu
values('aa','[email protected]')
select * from tongxunlu
--插入一条记录
insert into tongxunlu
values('aa','wanghy_0716')
--不能插入,因为不符合Email数据类型的要求
--解除绑定
sp_unbindrule 'Email'
drop rule rule_Email

create table test8
(
  xingming varchar(20),
  xingbie varchar(2),
  nianling smallint
)
--创建默认值
Create   default     default_xb

As      '男'
--将默认值绑定到test8.xingbie
SP_bindefault default_xb,'test8.xingbie'
--单表查询
--显示表中所有行和列
select * from student
--显示部分列(查询所有学生的姓名和年龄)
select Sname,Sage
from student
--显示部分列和部分行(查询性别为男的学生姓名)
select Sname
from student
where Ssex=1

select * from sc
--查询学生的成绩(成绩+5)
select Grade+5
from sc
--查询所有学生的年龄(加1)
select Sname as 姓名,Sage+1 as 年龄
from student
--查询2005001的成绩
select sno 学号,grade 成绩
from sc
where sno=2005001

--查询前三个学生的信息
select top 3 * from student
--查询前50%的学生信息
select top 50 percent *
from student
--查询前50%的男生学生信息(姓名)
select top 50 percent Sname
from student
where Ssex=1
--查询计算机专业的学生信息
select * from student
where Sdept='计算机专业'
--显示面积大于300的仓库记录
use cangku
go
select * from 仓库
where 面积>300

--显示工资在600到1230之间的职工信息
select * from 职工
where 工资>600 and 工资<1230
select * from 职工
使用计算列。。。。。。。。。。。。。。。
销售价格降低0.5 price-price*0.5
select grade from sc
select grade-grade*0.5 from sc  成绩降低0.5
                         嵌套查询。。。。。。。。。。。。。。。。。。。。
select 列名 新列名,列名
from 表名,表名2
where 条件表达式
group by 列名
having 条件表达式(可以包含聚合函数)
order by 列名1 asc,列名2 desc
--查询每个学生的平均成绩
select sno,avg(grade) as 平均成绩
from sc
group by sno
--查询平均成绩在前三名的学生信息
select top 3 sno,avg(grade) 平均成绩
from sc
group by sno
order by avg(grade) desc

select * from student
--查询与刘晨同一专业的学生姓名
select sname from student
where sdept=
(
 select sdept from student
 where sname='刘晨'
) and sname<>'刘晨'
--查询计算机专业、生物专业和数学专业的学生姓名
select sname,sdept
from student
where sdept in('计算机专业','生物专业','数学专业')

--查询没参加考试的学生名单
select sname
from student
where sno in
(--找出SC表中没参加考试的学生学号
 select sno from sc
 where grade is null
)
--查询选修了一号课程的学生姓名和专业
select Sname,Sdept
from student
where sno in
(--找选修1号课程的学号
 select sno from sc
 where cno=1
)
--查找哪些城市至少有一个仓库的职工的工资为1250
select 城市
from 仓库
where 仓库号 in
(
 select 仓库号 from 职工
 where 工资=1250
)

use student
go
--参加考试的学号名单和成绩
select student.Sname,sc.Grade
from student,sc
where student.sno=sc.sno and grade is not null
--查询既不是计算机专业,也不是生物专业、数学专业的学生姓名
select sname from student
where sdept!='计算机专业' and sdept!='生物专业' and sdept!='数学专业'
--方法二
select sname from student
where sdept not in('计算机专业','生物专业','数学专业')
--判断cangku数据库是否存在,如果存在提示
--”数据库已存在"
use master
go
if exists(
 select * from sysdatabases
 where name='cangku'
)
print '数据库已存在'
--检查本次考试,本班如果没有人成绩达到
--90分以上,则每人减5分;
use student
go
if  exists(
 select sno from sc
 where grade>90
)
update sc
set grade=grade-5

select * from sc
--检查本次考试,本班如果没有人成绩达到
--95分以上,则每人加5分;
if not exists(
 select sno from sc
 where grade>95
)
update sc
set grade=grade+5
select * from sc
--检索有职工的工资大于或等于WH2仓库中
--其中一名职工工资的职工信息

use cangku
go
select 职工号,工资
from 职工
where 工资>any(
  select 工资 from 职工
  where 仓库号='wh2'
       )
--检索有职工的工资大于或等于WH2仓库中
--所有职工工资的职工信息
select * from 职工
where 工资>=all(
  select 工资 from 职工
  where 仓库号='wh2'
       )
--查询年龄大于20和专业为计算机专业的
--学生姓名、年龄
select sname,sage from student
where sage>20
union
select sname,sage from student
where sdept='计算机专业'

--1、找出和职工e4挣同样工资的所有职工信息
use cangku
select * from 职工
where 工资 in (
 select 工资 from 职工
 where 职工号='e4'
) and 职工号!='e4'

2、找出管理的仓库面积在300以下的职工信息
select *from 职工
where  仓库号 in(
      select 仓库号 from 仓库
      where 面积<300
)
--3、找出没有参加考试的学生姓名
 use student
 go
 select student.sname,sc.grade
 from student, sc
 where grade is null and student.sno=sc.sno
4、找出平均分最高的学生姓名
select Sname from student
where sno in
(
 select top 1 sno from sc
group by sno
order by avg(grade) desc
)


5、查询所有成绩都及格的学生信息
(可以毕业的学生信息)
 
  select distinct sno
  from sc
  where sno not in(
  select sno from sc
  where grade is null
       )
  group by sno
  having min(grade)>60

--9、求出选修了3门以上课程且所有成绩高于70分
--的学生的平均年龄
--找出选修了3门以上课程的学号
select avg(sage) from student
where sno in
(
 select sno
 from sc
 where sno not in(select sno from sc where grade is  null)
 group by sno
 having count(cno)>3 and min(grade)>70
)
select * from student


10、求出选修了‘数据结构’课程的男学生信息
(假设性别1的为男学生)
select * from student
where sno in(select sno from sc
             where cno in(
                         select cno from course
                         where cname='数据结构')) and ssex=1

11、查询选修了课程并且有考试成绩的学生的总人数
 
        接连查询。。。。。。。。。。。。。。。。。。。。
--7\查询没有选修1号课程的学生姓名
if exists(select cno from sc where cno=1)
select sname from student
where sno not in
(
 select sno from sc
 where cno=1
)
                    
select * from sc
8、求出选修了3门以上课程且所有成绩
高于75分的学生的最小年龄
select top 1 sage from student
where sno in
(
 select sno from sc
 where sno not in (select sno from sc
   where grade is  null
   )
  group by sno
 having count(cno)>3 and min(grade)>75
)
order by sage
select * from sc
9、求出选修了‘电子商务专业’课程(数据库和ASP)
的男学生信息
select * from student
where ssex=1 and sno in
(
 select sno from sc
 where cno in(
   select cno from course
   where cname='数据库'or cname='ASP语言'
   )
)
10 、将计算机专业全体学生的成绩每人增加3分
select grade+3 加分后的成绩 from sc
where sno in
(
 select sno from student
 where sdept='计算机专业'
)
11、删除计算机专业所有学生的选课记录
delete from sc
where sno in
(
 select sno from student
 where sdept='计算机专业'
)
select * from sc
12、查询选修了全部课程的学生姓名
select sname from student
where sno in
(
 select sno from sc
 group by sno
 having count(cno)=(
   select count(cno) from course
   )
)
select * from sc
12、查询选修了全部课程的学生姓名
分析:一、每个学生选修的课程数目
 select sno,count(cno) from sc
 group by sno
   二\课程表中总的课程数目
      select count(cno) from course
     三、判断一和二的结果是否相等,如果相等
 说明该学生选了所有科目
    
     四\根据学生学号找姓名
    select sname from student
 where sno in
(
 select sno from sc
 group by sno
 having count(cno)=(select count(cno) from course)
)

drop database student
13、查询至少选修了学生2005002选修全部课程
的学生学号(即所选修课程包含或者
等于2005002学生的课程)
分析:找出2005002选修的课程,然后找出哪个学生包含
 了2005002选的所有课程

select sno from sc
where cno  in
(
select cno from sc
where sno=2005002
) and sno!=2005002
group by sno
having count(cno)>=
(
 select count(cno) from sc
 where sno=2005002
)
 (a+b)*(c+d+e)=ac+ad+ae+bc+bd+be
select * from course,sc
--所有学生的选课情况
select sname,cname,grade
from student,course,sc
where student.sno=sc.sno and course.cno=sc.cno
--

select * from student
insert into course(cname)
values('linux')

insert into student(sno,sname)
values(2005007,'万雨晨')
查询学生的选课情况(内联接) 所关联的数据如果出现null则该数据不显示
select Sname,cno,grade
from student
inner join sc
on student.sno=sc.sno
--查询所有学生的选课情况(左联接)第一张表的内容全显示。第二满足的显示不满足的不显示
select Sname,Cno,grade
from student S
left join sc
on S.sno=SC.sno
--查询所有学生的选课情况(右联接)第一满足的显示第二的全显示
select Sname,Cno,grade
from sc
right join student S
on S.sno=SC.sno

你可能感兴趣的:(sql,server,基本语句)