一、建表(create table 语句。
注:主键与外键的定义子句)create table student(student_id char(6) not null primary key,student_name varchar(20) not null,class varchar(16) ,sex tinyint ,birthday datetime ,credit tinyint ,notes varchar(50))create table course(course_id char(3) primary key,course_name varchar(16) ,term tinyint ,course_time tinyint ,credit tinyint)create table result(student_id char(6) ,course_id char(3) ,grade tinyint ,credit tinyint ,constraint pk_result primary key (student_id,course_id),Constraint fk_result foreign key (course_id) references course (course_id) )二、修改表结构(alter table, drop table语句)1.在表XS中增加1个新列——奖学金等级ALTER TABLE XSADD奖学金等级tinyint NULL2.在表XS中删除名为奖学金等级的列ALTER TABLE XSDROPCOLUMN 奖学金等级3.修改表XS中已有列的属性ALTER TABLE XSALTER COLUMN 姓名char(10)4.删除表XSDROP TABLE XS三、修改表数据(insert,delete,update语句)1.向XSCJ数据库的表XS中插入如下的一行:001112 罗林琳计算机0 “1/30/1980 0:0:0” 40INSERT INTO XSV ALUES(‘001112’,’罗林琳’,’计算机’, 0 ,‘1/30/1980 0:0:0’, 40,NULL)2.将XS表中总学分小于39的行删除DELETE FROM XSWHERE 总学分<393.XS表中学号为001110的学生的备注列值改为“三好生”UPDATE XSSET 备注=‘三好生’WHERE 学号=‘001110’4.将XS表中的所有学生的总学分都增加10UPDATE XSSET 总学分= 总学分+105.将姓名为“罗林琳”的同学的专业改为“通信工程”,备注改为“转专业学习”,学号改为001241。
UPDATE XSSET 专业= ‘通信工程’,备注= ‘转专业学习’,学号= ‘001241’WHERE 姓名= ‘罗林琳’6.对XS表进行修改,将姓名为“李明”的学生的总学分加4,备注改为“提前修完《数据结构》,并获得学分”UPDATE XSSET 总学分= 总学分+ 4,备注= ‘提前修完《数据结构》,并获得学分’WHERE 姓名=’ 李明’四、查询语句:(select)1.常规查询SELECT 姓名,专业名,总学分FROM X2.带Where子句的查询SELECT 学号,姓名,总学分FROM XSWHERE 专业名= '计算机'3.查询所有列SELECT *FROM XS4.别名SELECT 学号AS number,姓名AS name,总学分AS markFROM XSWHERE 专业名= '计算机'5.别名用法之二SELECT number = 学号,name = 姓名,mark = 总学分FROM XSWHERE 专业名= '计算机'6.产生计算列SELECT CPMC AS '产品名称',产品总值= JG * KCLFROM CP7.去除重复记录SELECT DISTINCT 专业名,总学分FROM XS8.查出前几条SELECT TOP 6 姓名,专业名,总学分FROM XS9.不等号的使用SELECT *FROM CPWHERE KCL!< 50010. 多字段限制条件SELECT *FROM XSWHERE 专业名= '通信工程' and 总学分>= 4211.like的使用SELECT *FROM XSWHERE 专业名LIKE '计算机'SELECT *FROM CPWHERE CPMC LIKE '%冰箱%'SELECT *FROM XSWHERE 姓名LIKE '王_'12.between的使用SELECT *FROM CPWHERE JG BETWEEN 2000 AND 400013.in的使用SELECT *FROM XSWHERE 专业名IN ('计算机','通信工程','无线电')14.空字段的判断SELECT *FROM XSWHERE 备注IS NULL15.多表连接SELECT XS.* , XS_KC.*FROM XS , XS_KCWHERE XS.学号= XS_KC.学号--查找选修了206课程且成绩在80分以上的学生姓名及成绩SELECT 姓名, 成绩FROM XS , XS_KCWHERE XS.学号= XS_KC.学号AND 课程号='206'AND 成绩>= 80--查找选修了“计算机基础”课程且成绩在80分以上的学生学号、姓名、课程名及成绩。
SELECT XS.学号, 姓名, 课程名, 成绩FROM XS , KC , XS_KCWHERE XS.学号= XS_KC.学号AND KC.课程号= XS_KC.课程号AND 课程名= '计算机基础' AND 成绩>= 80--查找XSCJ数据库每个学生的情况以及选修的课程情况SELECT *FROM XS INNER JOIN XS_KCON XS.学号= XS_KC.学号--查找选修了206课程且成绩在80分以上的学生姓名及成绩。
SELECT 姓名, 成绩FROM XS JOIN XS_KC ON XS.学号= XS_KC.学号WHERE 课程号='206' AND 成绩>=8016.聚合函数--求选修101课程的学生的平均成绩。
SELECT A VG(成绩) AS '课程101平均成绩'FROM XS_KCWHERE 课程号= '101'--求选修101课程的学生的最高分和最低分。
SELECT MAX(成绩) AS '课程101的最高分' , MIN(成绩) AS '课程101的最低分' FROM XS_KCWHERE 课程号= '101'--求学生的总人数。
SELECT COUNT(*) AS '学生总数'FROM XS--求选修了课程的学生总人数。
SELECT COUNT(DISTINCT 学号)FROM XS_KC--将XSCJ数据库中各专业名输出。
SELECT 专业名FROM XSGROUP BY 专业名--求XSCJ数据库中各专业的学生数。
SELECT 专业名,COUNT(*) AS '学生数'FROM XSGROUP BY 专业名--求被选修的各门课程的平均成绩和选修该课程的人数SELECT 课程号, A VG(成绩) AS '平均成绩' ,COUNT(学号) AS '选修人数' FROM XS_KCGROUP BY 课程号--查找XSCJ数据库中平均成绩在85分以上的学生的学号和平均成绩。
SELECT 学号, A VG(成绩) AS '平均成绩'FROM XS_KCGROUP BY 学号HA VING A VG(成绩) > =85--查找选修课程超过2门且成绩都在80分以上的学生的学号。
SELECT 学号FROM XS_KCWHERE 成绩>= 80GROUP BY 学号HA VING COUNT(*) > 2'--查找通信工程专业平均成绩在85分以上的学生的学号和平均成绩。
SELECT 学号,A VG(成绩) AS '平均成绩FROM XS_KCWHERE 学号IN( SELECT 学号FROM XSWHERE 专业名= '通信工程')GROUP BY 学号HA VING A VG(成绩) > =8517.排序--将通信工程专业的学生按出生时间先后排序。
SELECT *FROM XSWHERE 专业名= '通信工程'ORDER BY 出生时间--将计算机专业学生的“计算机基础”课程成绩按降序排列。
SELECT 姓名,课程名,成绩FROM XS,KC,XS_KCWHERE XS.学号= XS_KC.学号AND XS_KC.课程号= KC.课程号AND 课程名= '计算机基础' AND 专业名= '计算机'ORDER BY 成绩DESC18.用into子句创建新表--由XS表创建“计算机系学生”表,包括学号和姓名。
SELECT 学号,姓名INTO计算机系学生FROM XSWHERE 专业名= '计算机'五、创建视图CREATE VIEW CS_XSASSELECT *FROM XSWHERE 专业名= '计算机'六、游标的使用游标的声明,打开,提取,关闭,释放declare total_credit cursor forselect 学号, total_credit from vw_total_creditopen total_creditfetch next from total_creditclose total_creditdeallocate total_credit七、用SET语句赋值declare @var1 varchar(20),@var2 varchar(200)set @var1='中国'set @var2=@var1 + '是一个伟大的国家'select @var1,@var2八、流程控制语句if...elsewhilebreakreturn九、字符串处理函数select substring(姓名,1,1),substring(姓名,2,len(姓名)-1) from xs order by 姓名十、游标函数@@cursor_rows@@fetch_status十一、用户自定义函数create function average(@cnum char(20)) returns intasbegindeclare @aver intselect @aver=avg(成绩) from xs_kc where 课程号=@cnumreturn @averend用户自定义函数的调用declare @course1 char(20)declare @aver1 intselect @course1='101'select @aver1=dbo.average(@course1)select @aver1 as '101课程的平均成绩'(测试select avg(成绩) from xs_kc where 课程号='101' )十二、游标与存储过程create procedure prc_update_total_creditasdeclare @number char(10),@tot_credit intdeclare total_credit cursor forselect 学号, total_credit from vw_total_creditopen total_creditfetch next from total_credit into @number ,@tot_creditupdate xs set 总学分=@tot_credit where 学号=@numberwhile @@FETCH_STATUS=0beginfetch next from total_credit into @number ,@tot_creditupdate xs set 总学分=@tot_credit where 学号=@numberendclose total_creditdeallocate total_credit注:调用该存储过程等同于语句update xs set 总学分=(select total_credit from vw_total_credit b where xs.学号=b.学号) where 学号in (select 学号from vw_total_credit)。