第一篇:數據庫學生數據庫代碼
代碼
#include
char a[16];
char s[16];
char d[16];
char f[24];
struct person *next;}stu;////////////////////////////////////////////主菜單 void menu(){inti=0;printf(“t**************************************************************************************n”);printf(“t********************************通訊錄管理程序****************************************n”);printf(“t**************************************************************************************n”);printf(“t*
tt1添加通訊錄 *n”);printf(“t*
tt2修改通訊錄 *n”);printf(“t*
tt3查找通訊錄 *n”);printf(“t*
tt4刪除通訊錄 *n”);printf(“t*
tt5顯示通訊錄 *n”);printf(“t*
tt6統計通訊錄 *n”);printf(“t*
tt7退出通訊錄 *n”);printf(“t**************************************************************************************n”);printf(“ttt 請輸入操作1-7,以Enter結束n”);printf(“ttt 請輸入:”);while(i==0){scanf(“%d”,&i);switch(i)//用switch函數實現多分支選擇結構
{ case 1:tianjia();break;case 2:xiugai();break;case 3:chazhao();break;case 4:shanchu();break;case 5:xianshi();break;case 6:tongji();break;case 7:printf(“ttt謝謝您的使用,請按任意鍵退出....n”);getchar();break;default:printf(“tt 您的輸入有誤,請重新輸入,并以Enter結束n”);menu();} } } //////////////////////1添加 voidtianjia(){ int w=0;inti=0,n;struct person *head;struct person *p1,*p2;
printf(“tt請輸入要操作的通訊錄文件 1 同學 2 家人 3 同事 4 朋友:”);printf(“請輸入:”);while(w==0){scanf(“%d”,&w);
if(w==1)//建立同學文件
{
if((fp=fopen(“tongxue.txt”,“a”))==NULL)
{ fp=fopen(“tongxue.txt”,“w+”);
printf(“tttt同學文件已建立”);
}
else printf(“tttt同學文件已存在ntttt”);
} else if(w==2)//建立家人文件
{
if((fp=fopen(“jiaren.txt”,“a”))==NULL)
{ fp=fopen(“jiaren.txt”,“w+”);
printf(“tttt家人文件已建立”);
} else printf(“tttt家人文件已存在ntttt”);
} else if(w==3)//建立同事文件 { if((fp=fopen(“tongshi.txt”,“a”))==NULL)
{ fp=fopen(“tongshi.txt”,“w+”);
printf(“tttt同事文件已建立”);
} else printf(“tttt同事文件已存在ntttt”);} else if(w==4)//建立朋友文件
{ if((fp=fopen(“pengyou.txt”,“a”))==NULL)
{ fp=fopen(“pengyou.txt”,“w+”);
printf(“tttt朋友文件已建立”);
} else printf(“tttt朋友文件已存在n”);} else {printf(“ttt您的輸入有誤,請重新輸入:”);w=0;} } printf(“tttt請輸入添加的個數:”);scanf(“%d”,&n);p2=malloc(LEN);while(i { p1=malloc(LEN);if(i==0)head=p1;else p2->next=p1;printf(“ttt請輸入以下信息,并以Enter結束n”);printf(“ttt姓 名 電話號碼 地址nttt”);scanf(“%s%s%s%s”,p1->a,p1->s,p1->d,p1->f);p2=p1;i++;} p2->next=NULL;while(head!=NULL){ fprintf(fp,“%-16s%-16s%-16s%-24sn”,head->a,head->s,head->d,head->f);head=head->next;} fclose(fp);menu();} ///////////////////2修改 voidxiugai(){ inti=0,w=0;long offset;char a[16],s[16],d[16],f[24];struct person *p;printf(“tt請輸入要操作的通訊錄文件 1同學 2家人 3同事 4朋友:nttt”);printf(“請輸入:”);while(w==0){scanf(“%d”,&w); if(w==1) { if((fp=fopen(“tongxue.txt”,“r+”))==NULL) { printf(“ttt請添加數據n”); menu(); fp=fopen(“tongxue.txt”,“w+”); printf(“tttt同學文件已建立n”); } else printf(“tttt同學文件已存在n”); } else if(w==2) { if((fp=fopen(“jiaren.txt”,“r+”))==NULL) { printf(“ttt請添加數據n”); menu(); fp=fopen(“jiaren.txt”,“w+”); printf(“tttt家人文件已建立n”); } else printf(“tttt家人文件已存在n”); } else if(w==3){ if((fp=fopen(“tongshi.txt”,“r+”))==NULL) { printf(“ttt請添加數據n”); menu(); fp=fopen(“tongshi.txt”,“w+”); printf(“tttt同事文件已建立n”); } else printf(“tttt同事文件已存在n”);} else if(w==4){ fp=fopen(“pengyou.txt”,“r+”);if((fp=fopen(“pengyou.txt”,“r+”))==NULL) { fp=fopen(“pengyou.txt”,“w+”); printf(“tttt朋友文件已建立n”); } else printf(“tttt朋友文件已存在”);} else{ printf(“tttt輸入錯誤,請重新輸入n”);w=0; } } printf(“ttt請輸入要修改人的 姓 名:n ttttt”);scanf(“%s%s”,a,s);p=malloc(LEN);while(!feof(fp)){ offset=ftell(fp);fscanf(fp,“%s%s%s%sn”,p->a,p->s,p->d,p->f);if((strcmp(a,p->a)==0)&&(strcmp(s,p->s)==0)){ printf(“ttt已找到記錄:nttt%-16s%-16s%-16s%-16sn”,p->a,p->s,p->d,p->f); i=1; break;} } if(i==1){ printf(“ttt請輸入新的姓 名 號碼 地址:nttt”);scanf(“%s%s%s%s”,a,s,d,f); fseek(fp,offset,0);fprintf(fp,“tttt%-16s%-16s%-16s%-24sn”,a,s,d,f); printf(“ttt恭喜,已修改成功!n”);} else printf(“ttt無此相關信息n”);fclose(fp);menu();} /////////////////////3查找 void chazhao(){ char a[16],s[16],d[16],f[24],m[16],n[16];int w=0,e=0; printf(“tt請輸入要操作的通訊錄文件 1同學 2家人 3同事 4朋友:nttt”);printf(“請輸入:”);while(w==0){scanf(“%d”,&w); if(w==1) { if((fp=fopen(“tongxue.txt”,“r+”))==NULL) { printf(“tttt請添加數據n”); menu(); fp=fopen(“tongxue.txt”,“w+”); printf(“tttt同學文件已建立n”); } else printf(“tttt同學文件已存在n”); } else if(w==2) { if((fp=fopen(“jiaren.txt”,“r+”))==NULL) { printf(“tttt請添加數據n”); menu(); fp=fopen(“jiaren.txt”,“w+”); printf(“tttt家人文件已建立n”); } else printf(“tttt家人文件已存在n”); } else if(w==3){ if((fp=fopen(“tongshi.txt”,“r+”))==NULL) { printf(“tttt請添加數據n”); menu(); fp=fopen(“tongshi.txt”,“w+”); printf(“tttt同事文件已建立n”); } else printf(“tttt同事文件已存在n”);} else if(w==4){ fp=fopen(“pengyou.txt”,“r+”);if((fp=fopen(“pengyou.txt”,“r+”))==NULL) { printf(“tttt請先添加數據n”); menu(); fp=fopen(“pengyou.txt”,“w+”); printf(“tttt朋友文件已建立n”); } else printf(“tttt朋友文件已存在n”);} else {printf(“ttt輸入錯誤,請重新輸入n”);w=0;} } printf(“tt請輸入查找方式 1:按姓氏查找 2:按姓名查找nttt”);while(e==0){scanf(“%d”,&e);if(e==1)//按姓氏查找 { printf(“ttt請輸入姓氏:ntttt”);scanf(“%s”,m);printf(“ttt查找結果如下:nttt姓tt名tt電話tt地址nn”); while(feof(fp)==0){ fscanf(fp,“%s%s%s%sn”,a,s,d,f);if(strcmp(a,m)==0)printf(“ttt%-16s%-16s%-16s%-24sn”,a,s,d,f);} } else if(e==2)//按姓名查找 {printf(“ttt請輸入姓t名:ntttt”);scanf(“%s%s”,m,n);printf(“ttt查找結果如下:nttt姓tt名tt電話tt地址nn”);while(feof(fp)==0) { fscanf(fp,“%s%s%s%sn”,a,s,d,f); if(strcmp(a,m)==0&&strcmp(s,n)==0)printf(“ttt%-16s%-16s%-16s%-24sn”,a,s,d,f); } } else {printf(“你想干嘛,重新輸入吧!1按姓氏查找 2按姓名查找”);e=0;} } fclose(fp);menu();} /////////////////4刪除 voidshanchu(){ inti=0,w=0;long offset;char a[16],s[16],d[16],f[24];struct person *p;printf(“tt請輸入要操作的通訊錄文件 1同學 2家人 3同事 4朋友:nttt”);printf(“請輸入:”);while(w==0){scanf(“%d”,&w); if(w==1) { if((fp=fopen(“tongxue.txt”,“r+”))==NULL) { printf(“tttt請添加數據n”); menu(); fp=fopen(“tongxue.txt”,“w+”); printf(“tttt同學文件已建立n”); } else printf(“tttt同學文件已存在n”); } else if(w==2) { if((fp=fopen(“jiaren.txt”,“r+”))==NULL) { printf(“tttt請添加數據n”); menu(); fp=fopen(“jiaren.txt”,“w+”); printf(“tttt家人文件已建立n”); } else printf(“tttt家人文件已存在n”); } else if(w==3){ if((fp=fopen(“tongshi.txt”,“r+”))==NULL) { printf(“tttt請添加數據n”); menu(); fp=fopen(“tongshi.txt”,“w+”); printf(“tttt同事文件已建立n”); } else printf(“tttt同事文件已存在n”);} else if(w==4){ fp=fopen(“pengyou.txt”,“r+”);if((fp=fopen(“pengyou.txt”,“r+”))==NULL) { printf(“tttt請添加數據n”); menu(); fp=fopen(“pengyou.txt”,“w+”); printf(“tttt朋友文件已建立n”); } else printf(“tttt朋友文件已存在n”);} else{ printf(“tttt您的輸入有誤,請重新輸入:”);w=0; } } printf(“ttt請輸入要修改人的姓 名:n ttttt”);scanf(“%s%s”,a,s);p=malloc(LEN);while(!feof(fp)){ offset=ftell(fp);fscanf(fp,“%s%s%s%sn”,p->a,p->s,p->d,p->f);if((strcmp(a,p->a)==0)&&(strcmp(s,p->s)==0)){ printf(“ttt已找到記錄:nttt%-16s%-16s%-16s%-16sn”,p->a,p->s,p->d,p->f); i=1; break;} } if(i==1)//找到信息,確認刪除 { fseek(fp,offset,0);fprintf(fp,“%-16s%-16s%-16s%-24sn”,“",”“,”“,”“); printf(”ttt恭喜,已刪除成功!n“); } else printf(”ttt好像沒有此記錄???n“);fclose(fp);menu();} /////////////////5顯示 voidxianshi(){ char a[20],s[20],d[20],f[20];//足夠大 int w=0; printf(”tt請輸入要操作的通訊錄文件 1同學 2家人 3同事 4朋友:nttt“);printf(”請輸入:“);while(w==0){scanf(”%d“,&w); if(w==1) { if((fp=fopen(”tongxue.txt“,”r+“))==NULL) { fp=fopen(”tongxue.txt“,”w+“); printf(”tt請先添加信息n“); printf(”ttt請先添加數據n“); menu(); } else printf(”tt同學文件已存在n“); } else if(w==2) { if((fp=fopen(”jiaren.txt“,”r“))==NULL) { fp=fopen(”jiaren.txt“,”w+“); printf(”ttt請添加數據n“); menu(); } else printf(”ttt家人文件已存在n“); } else if(w==3){ if((fp=fopen(”tongshi.txt“,”r+“))==NULL) { fp=fopen(”tongshi.txt“,”w+“); printf(”ttt請添加數據n“); menu(); } else printf(”ttt同事文件已存在n“);} else if(w==4){ fp=fopen(”pengyou.txt“,”r+“);if((fp=fopen(”pengyou.txt“,”r+“))==NULL) { fp=fopen(”pengyou.txt“,”w+“); printf(”ttt請添加數據n“); menu(); } else printf(”ttt朋友文件已存在n“);} else {printf(”ttt您的輸入有誤,請重新輸入:“);w=0;} } while(feof(fp)==0){ fscanf(fp,”%s%s%s%sn“,a,s,d,f);printf(”%-16s%-16s%-16s%-24sn“,a,s,d,f);} fclose(fp);menu();//返回主菜單繼續接下來的操作 } ////////////////////6統計 voidtongji(){ int w=0,i=0; char a[20],s[20],d[20],f[20]; printf(”tt請輸入要操作的通訊錄文件 1同學 2家人 3同事 4朋友:nttt“);printf(”請輸入:“);while(w==0){scanf(”%d“,&w); if(w==1) { if((fp=fopen(”tongxue.txt“,”r+“))==NULL) { printf(”ttt總數是0個,請先添加數據n“); menu(); fp=fopen(”tongxue.txt“,”w+“); printf(”tttt同學文件已建立n“); } else printf(”tttt同學文件已存在n“); } else if(w==2) { if((fp=fopen(”jiaren.txt“,”r+“))==NULL) { printf(”ttt總數是0個,請先添加數據n“); menu(); fp=fopen(”jiaren.txt“,”w+“); printf(”tttt家人文件已建立n“); } else printf(”tttt家人文件已存在n“); } else if(w==3){ if((fp=fopen(”tongshi.txt“,”r+“))==NULL) { printf(”ttt總數是0個,請先添加數據n“); menu(); fp=fopen(”tongshi.txt“,”w+“); printf(”tttt同事文件已建立n“); } else printf(”tttt同事文件已存在n“);} else if(w==4){ fp=fopen(”pengyou.txt“,”r+“);if((fp=fopen(”pengyou.txt“,”r+“))==NULL) { printf(”ttt總數是0個,請先添加數據n“); menu(); fp=fopen(”pengyou.txt“,”w+“); printf(”tttt朋友文件已建立“); } else printf(”tttt朋友文件已存在“);} else {printf(”ttt您的輸入有誤,請重新輸入:“);w=0;} } while(feof(fp)==0){ fscanf(fp,”%s%s%d%s“,a,s,&d,f);i++;} printf(”nttt總數是%d個n“,--i);fclose(fp);menu();} ///////////////////主函數 #include { //主函數體開始 char a[20],b[20],c[20]=”admin“,d[20]=”12345“;//設置密碼 printf(”nnnnn“);//歡迎界面 system(”COLOR 37“);//定義頁面顏色 printf(”t**********Welcome to use the address book management system**********n“);printf(”n“);printf(”t**********************歡迎使用通訊錄管理系統*************************n“);printf(”n“);printf(”nnnttt經常聯系,問問彼此,最近你過得好嗎?n“);printf(”n“);printf(”ttt 愿親情、愛情、友情永不凋零!n“);printf(”nnnntt litter Copyright litter.Allrights reservednnn“);printf(”t*********************************************************************n“);Sleep(3000);(”cls“);printf(”t(Please enter your user name)請輸入用戶名:“); scanf(”%s“,a);printf(”t(Please input your password)請輸入密碼:“);scanf(”%s“,b);if((strcmp(a,c)==0)&&(strcmp(b,d)==0))//為什么改為a[20]就不行 { printf(”nnn(The user name and password are correct, welcome to use)用戶名和密碼正確,歡迎使用n“);Sleep(1000);system(”cls“);} else {printf(”(Password mistake, please press any key to exit)密碼錯誤,請按任意鍵退出n“);exit(0);} system(”COLOR 37");menu();} 實驗一 (1)無條件單表查詢 select sname NAME,'year of birth:' BIRTH,2004-sage BIRTHDAY,LOWER(sdept)DEPARTMENT FROM student;(2)有條件單表查詢 SELECT sname,sdept,sage FROM student WHERE sage NOT BETWEEN 20 AND 23;(3)單表嵌套(一層)查詢 SELECT sno,sname,sdept FROM student WHERE sdept IN(SELECT sdept FROM student WHERE sname='劉晨');(4)復合條件多表查詢 SELECT student.sno,sname,cname,grade FROM student ,sc,course WHERE student.sno=sc.sno AND sc.cno=course.cno;(5)使用COUNT()的單表查詢 SELECT COUNT(*)FROM student;(6)使用AVG()的單表查詢 SELECT AVG(grade)'平均成績' from SC where CNO='1';(7)查詢結果分組 SELECT cno,COUNT(sno)'人數' FROM sc GROUP BY cno;(8)查詢結果排序 SELECT * FROM student ORDER BY sdept,sage DESC;(9)使用通配符的查詢 SELECT sname,sno,ssex FROM student WHERE sname NOT LIKE'劉%';(10)使用換碼字符的單表查詢 SELECT cno,ccredit FROM course WHERE cname LIKE 'DB_Design'ESCAPE'';(11)插入單個元組 插入一個新學生元組 Insert into student(sno,sname,ssex,sdept,sage)values('200215128','陳冬','男','IS',18)(12)插入子查詢結果 對每一個系,求學生平均年齡,并把結果存入數據庫 Create table dept_age(sdept char(15),avg_age int)Insert into dept_age(sdept,avg_age)select sdept,avg(sage)from student group by sdept(13)修改某個元組的值 將學生200215121的年齡改為22歲 Update student set sage=’22’ where sno=’200215121’(14)修改多個元組的值 將所有學生的年齡增加一歲 Update student set sage=sage+1(15)刪除一個元組的值 刪除學號為200215128的學生記錄 delete from student where sno='200215128'(16)建立視圖 建立信息系學生的視圖 create view is_student as select sno,sname,sage from student where sdept='IS' ×(17)查詢視圖 查詢選修了1號課程的信息系學生信息 Select is_student.sno,sname from is_student,sc where is_student.sno=sc.sno and sc.cno=’1’ ×(18)更新視圖 將信息系學生視圖is_student中學號為95001的學生姓名改為李楠 update is_student set sname='李楠' where sno='95002' 將下列問題用SQL命令表示: 1.查詢‘IS’系學生的學號、姓名、性別。 SELECT sno,sname,ssex FROM student WHERE sdept='IS';2.查詢‘IS’系年齡在20歲以下的學生。 SELECT * FROM student WHERE sdept='IS'AND sage<20;3.查詢所有不姓‘劉’的學生的學號、姓名、性別。 SELECT sname,sno,ssex FROM student WHERE sname NOT LIKE'劉%';4.查詢student表中學生的總人數。 SELECT COUNT(*)'總人數' FROM student;5.查詢和‘李勇’同性別的所有同學的姓名。 SELECT sname from student where ssex in(select ssex from student where sname='李勇');6.查詢和‘李勇’同性別并同系的所有同學的姓名。 Select sname from student where ssex in(select ssex from student where sname='李勇')and sdept in(select sdept from student where sname='李勇')7.查詢選修2號課程的學生的學號。Select sno from sc where cno='2' 8.求3號課程的平均成績。 Select avg(grade)from sc where cno=’3’ 9.查詢選修2號課程的學生的最高分。Select max(grade)from sc where cno=’2’ 10.按成績降序排列,輸出‘IS’系學生選修了2號課程的學生的姓名和成績。 Select sname,grade from student,sc where sdept='IS' and cno='2' and student.sno=sc.sno order by grade desc SQL查詢分析器下建數據庫的命令代碼: create database 霍雙雙200826352 on(name='霍雙雙200826352_data',filename='E: 霍霍 雙雙 雙雙 ***5 霍霍 雙雙 雙雙200826352_data.mdf',size=10mb,maxsize=50mb,filegrowth=10%)log on(name='霍雙雙200826352_log',filename='E:200826352_log.ldf',size=10mb,maxsize=50mb,filegrowth=10%)在查詢分析器重建立各表的命令代碼: 建立student表: create table student(sno char(5)primary key,sname char(20),ssex char(2),sage int,sdept char(15))建立course表: create table course(cno char(2)primary key,cname char(15),cpno char(2),ccredit int)建立cs表: use 霍雙雙200826352 create table sc(sno char(5),cno char(2),grade smallint,primary key(sno,cno),foreign key(sno)references student(sno),foreign key(cno)references course(cno))實驗二 T-SQL查詢、存儲過程、觸發器、完整性上機作業題 第一部分 :T-SQL程序設計 (1).如果3號課程的平均成績在80分以上,則輸出“3號課程成績良好”,否則輸出“3號成績一般” declare @avg float set @avg=(select avg(grade)from sc where cno='3')if @avg>80print'3號課程成績良好'else print'3號成績一般'(2)計算并輸出95003號學生的平均成績,若無該生信息,則顯示“該生未選課”,提示信息.declare @avg float if(select count(*)from sc where sno='95003')=0 print '該生未選課' else begin select @avg=avg(grade)from sc where sno='95003' print'95003號學生平均成績' print @avg end(3).如果有成績在90分以上的學生,則顯示他的學號,課程和成績,否則顯示“沒有學生的課程成績在90分以上”提示信息 declare @text char(10)if exists(select grade from SC where grade>90)select Sno,Cno,Grade from SC where Grade>90 else begin set @text='沒有學生的課程成績在90分以上' print @text end ×(4).利用游標逐行顯示student表中的記錄。 declare stu cursor for select *from student open stu fetch next from stu while @@fetch_status=0 fetch next from stu close stu deallocate stu(5).用自定義函數計算全體男生的平均年齡 create function avg_age(@sex char(2))returns int as begin declare @aver int select @aver=(select avg(Sage)from Student where Ssex=@sex)return @aver end go declare @aver1 int,@sex char(2)set @sex='男' select @aver1=dbo.avg_age(@sex)select @aver1 as '全體男生的平均年齡' go(6).顯示course表中課程名的前2個字符。select substring(Cname,1,2)from Course(7).在一列中顯示student中各元組的學號中的年級,列名顯示為“年級”;另一列中顯示學號中的學生序列號,列名顯示為“序號”。 select substring(Sno,1,2)年級,substring(Sno,3,len(Sno)-1)序號 from Student order by Sno(8).在選課表中顯示學號、課程號,并根據成績:0-59顯示“不合格”;60-79顯示“合格”;80-89顯示“良好”;90-100顯示“優秀。” select Sno as '學號',Cno as '課程號', grade =case when Grade<=59 then '不合格' when Grade>=60 and Grade<=79 then '合格' when Grade>=80 and Grade<=89 then '良好' else '優秀' end from SC 第二部分 :存儲過程 (1)創建一個為worker表添加職工記錄的存儲過程Addworker go if exists(select name from sysobjects where name='Addworker' and type='P')drop procedure Addworker go create proc Addworker @職工號 char(4),@姓名 char(8),@性別 char(2),@出生日期 datetime,@黨員否 char(2),@參加工作 datetime,@部門號 char(4)as insert into worker(職工號,姓名,性別,出生日期,黨員否,參加工作,部門號)values(@職工號,@姓名,@性別,@出生日期,@黨員否,@參加工作,@部門號)go exec Addworker '16','王璐','女','1988-11-20','否','2010-08-21','11'(2)創建一個存儲過程Delworker刪除worker表中指定職工號的記錄 go if exists(select name from sysobjects where name='Delworker' and type='P')drop procedure Delworker go create procedure Delworker @職工號 char(4)as delete from worker where 職工號=@職工號 go exec Delworker '16'(3)顯示存儲過程Delworker的定義信息。Sp_helptext Delworker(4)刪除存儲過程Addworker和Delworker。drop procedure Addworker, Delworker(5)創建并執行以下存儲過程: a.從數據庫表中查詢,返回學生學號、姓名、課程名、成績 use 霍雙雙200826351 go if exists(select name from sysobjects where name='select_stu' and type='P')drop procedure select_stu go create procedure select_stu as select SC.Sno,Sname,Cname,Grade from Student,SC,Course where SC.Sno=Student.Sno and SC.Cno=Course.Cno go exec select_stu b.從數據庫表中查詢指定學號的學生學號,姓名,該存儲過程接受與傳遞參數,精確匹配的值 use 霍雙雙200826351 go if exists(select name from sysobjects where name='select_sno' and type='P')drop procedure select_sno go create procedure select_sno @Sno char(5)as select Sno,Sname from Student where Sno=@Sno go exec select_sno '95002' ×第三部分:觸發器 (1)在表depart上創建一個觸發器 depart_update , 當更改部門號時同步更改 worker表中對應的部門號。Go If exists(select name from sysobjects where name='depart_update'and type='tr')drop trigger depart_update go Create trigger depart_update on depart for update as set worker.部門號=(select 部門號 from inserted)where worker.部門號=(select 部門號from deleted)(2)在表worker上創建一個觸發器worker_delete,當刪除職工記錄時同步刪除salary表中對應的職工記錄。Go If exists(select name from sysobjects where name='worker_delete'and type='tr')drop trigger worker_delete go create trigger worker_delete on worker for delete as delete salary where salary.職工號=(select 職工號 from deleted)(3)刪除觸發器depart_update(4)刪除觸發器worker_delete(5)在數據庫中創建一個觸發器,向選課表添加一條紀錄時,檢查該紀錄的學號在學生表中是否存在,檢查該紀錄的課程號在課程表中是否存在,若其中有一項為否,則拒絕添加操作,并顯示“違反數據一致性”提示信息。Go If exists(select name from sysobjects where name='add_student'and type='tr')drop trigger add_student go create trigger add_student on sc for insert as go 第四部分:數據庫完整性 1、實施worker表的“性別”字段默認值為“男”的約束 create default default_sex as '男' go sp_bindefault'default_sex','worker.性別' 2、實施salary表的“工資”字段值在0~9999的約束、create rule salary_rule as @salary='[0~9999]' go sp_bindrule 'salary_rule','salary.工資' 3、實施depart表的“部門號”字段值唯一的非聚集索引的約束 4、為worker表建立外鍵“部門號”,參考表depart的“部門號”列。 5、建立一個規則 sex:@性別=’男’OR @性別=’女’,將其綁定到worker表的“性別”列上。Create rule sex as @性別='男'OR @性別='女' Go Sp_bindrule 'sex','worker.性別' 6、刪除1小題所建立的約束。 7、刪除2小題所建立的約束。 8、刪除3小題所建立的約束 9、刪除4小題所建立的約束 10.解除5小題所建立的綁定并刪除規則sex 建立數據庫: create database 數據庫 建表: create table 部門信息表 (部門編號 char(2)primary key ,部門名稱 nchar(14),部門職能 nchar(14),部門人數 char(4))go create table 管理員信息表 (用戶名 nchar(4)primary key ,密碼 char(10),)go create table 用戶信息表 (用戶名char(10)primary key ,用戶類型char(10),密碼 char(10))go create table 員工工作崗位表 (姓名 nchar(4)primary key ,員工編號 char(4) 工作崗位 nchar(3),部門名稱 nchar(10),參加工作時間 char(4))go create table 員工學歷信息表 (姓名 nchar(4)primary key ,員工編號 char(4) 學歷 nchar(2),畢業時間 char(10),畢業院校 nchar(10),外語情況 nchar(10),專業 nchar(10))go create table 員工婚姻情況表 (姓名 nchar(4)primary key ,員工編號 char(4) 婚姻情況 nchar(2),配偶姓名 nchar(4),配偶年齡 char(3),工作單位 nchar(10),)go create table 員工基本信息表 (員工編號 char(4)primary key ,姓名 nchar(4),性別 nchar(1),民族 nchar(3),出生年月 char(14),學歷 nchar(10),政治面貌 nchar(3),婚姻狀況 nchar(2),部門名稱 nchar(10),工作崗位 nchar(10),) 建立視圖: CREATE VIEW 按員工工作崗位查詢 as SELECT 員工工作崗位表.工作崗位, 員工基本信息表.員工編號,員工基本信息表.姓名, 員工基本信息表.性別, 員工基本信息表.出生年月,員工基本信息表.學歷, 員工基本信息表.婚姻狀況,員工基本信息表.部門名稱 FROM 員工工作崗位表 INNER JOIN 員工基本信息表 ON 員工工作崗位表.姓名 = 員工基本信息表.姓名 go CREATE VIEW 按員工詳細信息查詢 as SELECT 員工基本信息表.* FROM 員工基本信息表 go CREATE VIEW 按參加工作時間查詢 as SELECT 員工工作崗位表.參加工作時間, 員工工作崗位表.工作崗位,員工基本信息表.員工編號, 員工基本信息表.姓名, 員工基本信息表.性別,員工基本信息表.出生年月, 員工基本信息表.部門名稱 FROM 員工工作崗位表 INNER JOIN 員工基本信息表 ON 員工工作崗位表.姓名 = 員工基本信息表.姓名 觸發器的建立 delete觸發器: create trigger 刪除員工1 ON 員工工作崗位表 for delete AS BEGIN DELETE FROM 員工基本信息表 WHERE 員工編號 IN(SELECT 員工編號 FROM DELETED)end go create trigger 刪除員工2 ON 員工學歷信息表 for delete AS BEGIN DELETE FROM 員工基本信息表 WHERE 員工編號 IN(SELECT 員工編號 FROM DELETED)end go create trigger 刪除員工3 ON 員工婚姻情況表 for delete AS BEGIN DELETE FROM 員工基本信息表 WHERE 員工編號 IN(SELECT 員工編號 FROM DELETED)end go create trigger 刪除員工4 ON 員工基本信息表 for delete AS BEGIN DELETE FROM 員工工作崗位表 WHERE 員工編號 IN(SELECT 員工編號 FROM DELETED)end go create trigger 刪除員工5 ON 員工基本信息表 for delete AS BEGIN DELETE FROM 員工學歷信息表 WHERE 員工編號 IN(SELECT 員工編號 FROM DELETED)end go create trigger 刪除員工6 ON 員工基本信息表 for delete AS BEGIN DELETE FROM 員工婚姻情況表 WHERE 員工編號 IN(SELECT 員工編號 FROM DELETED)end Update觸發器: Create Trigger 修改編號1 On 員工基本信息表 for Update As if Update(員工編號) begin Update 員工工作崗位表 Set 員工編號=i.員工編號 From 員工工作崗位表 br , Deleted d ,Inserted i Where br.員工編號=d.員工編號 end go Create Trigger 修改編號2 On 員工基本信息表 for Update As if Update(員工編號) begin Update 員工學歷信息表 Set 員工編號=i.員工編號 From 員工學歷信息表 br , Deleted d ,Inserted i Where br.員工編號=d.員工編號 end go Create Trigger 修改編號3 On 員工基本信息表 for Update As if Update(員工編號) begin Update 員工婚姻情況表 Set 員工編號=i.員工編號 From 員工婚姻情況表 br , Deleted Where br.員工編號=d.員工編號 end go Create Trigger 修改員工編號1 On 員工工作崗位表 for Update As if Update(員工編號) begin Update 員工基本信息表 Set 員工編號=i.員工編號 From 員工基本信息表 a , Deleted Where a.員工編號=d.員工編號 end go Create Trigger 修改員工編號2 On 員工學歷信息表 for Update As if Update(員工編號) begin d ,Inserted i d ,Inserted i Update 員工基本信息表 Set 員工編號=i.員工編號 From 員工基本信息表 a , Deleted d ,Inserted i Where a.員工編號=d.員工編號 end go Create Trigger 修改員工編號3 On 員工婚姻情況表 for Update As if Update(員工編號) begin Update 員工基本信息表 Set 員工編號=i.員工編號 From 員工基本信息表 a , Deleted d ,Inserted i Where a.員工編號=d.員工編號 end 存儲過程的建立: CREATE PROC 按婚姻查找 @婚姻狀況 nchar(2)AS select 員工基本信息表.員工編號,員工基本信息表.姓名,員工婚姻情況表.婚姻情況,員工婚姻情況表.配偶姓名 from 員工基本信息表 inner join 員工婚姻情況表 on 員工基本信息表.員工編號=員工婚姻情況表.員工編號 where 員工婚姻情況表.婚姻情況=@婚姻狀況 order by 員工基本信息表.員工編號 CREATE PROC 按學歷查找 @員工學歷 nchar(4)AS select 員工基本信息表.員工編號,員工基本信息表.姓名,員工學歷信息表.學歷,員工學歷信息表.畢業院校,員工學歷信息表.專業 from 員工基本信息表 inner join 員工學歷信息表 on 員工基本信息表.員工編號=員工學歷信息表.員工編號 where 員工學歷信息表.學歷=@員工學歷 order by 員工基本信息表.員工編號 數據庫營銷案例 一、賣游戲幣的例子 案例:有一個人,04年時,他曾做過游戲幣生意,就是傳說中的網游商人。他當時屬于中間商,左手從打幣工作室手中收貨,右手再銷售給的玩家。當時倒騰的是新浪代理的一款名為《天堂2》的游戲。他當時應該是這個游戲里最知名的商人,玩這個游戲的,特別是倒騰游戲幣的,大部分都知道他。而且從收入上說,他也應該是同行中賺的最多的人之一。當時他一天最多可以賺2000多元,注意,說的是純利潤。而這成績的背后,數據庫營銷幫了很大的忙。 分析:數據庫營銷的第一步是搜集客戶資料。而搜集客戶資料最好的方式就是與客戶交流。而很多人上網賣東西,是賣完就拉倒,就再不與客戶主動聯系了,頂多是來新貨后發發廣告,這是很不可取的。但這個人上網賣東西有一個習慣,就是喜歡和客戶聊天。比如說賣游戲幣時,每個來買幣的人,他都會和他聊一聊,弄清楚對方在那個城市、年齡有多大、做什么工作、玩了多少年網游、在游戲里玩到什么階段、每月在游戲里的支出、以往是如何消費的、身邊有多少個朋友一起玩、對其它玩家的影響力如何等等。當掌握了這些數據后,開始給用戶分類,然后進行有針對性的維護。一般客戶大概可以分四種: 1、暫時還不購買的客戶: 很多客戶并不馬上購買,可能只是詢詢價。很多賣家對于這樣的客戶是直接放棄,這點很不對。因為網絡上的騙子太多,客戶第一次不放心,觀望一下很正常。對于這樣的賣家,首先要根據數據分析一下購買力如何,其次要看一下是不是會經常購買。而且即使其本身購買力不行,但他身邊或許有很多強力買家。如果發現這個用戶具備其中一條,就不能輕易放棄。這時候就需要與客戶經常的溝通聊天,先和客戶成為朋友。當成為朋友之后,下次肯定會在你這兒消費。 2、重點維護的大客戶: 對于經常購買游戲幣,特別是消費額高的大客戶,一定要重點維護。對于這種用戶的信息,掌握的也應該是越多越好。 3、偶爾購買的散戶: 對于偶爾買一點開開葷的散戶,可以不用重點維護。但是不維護不代表不重視,起碼不能讓他們出去罵你。 4、玩家資源多的意見領袖: 有些玩家本身的購買力可能不行,但是他的身邊卻可能有大量的優質客戶。對于這樣的用戶,即使購買力弱,也要當成大客戶重點維護。因為從他身上能挖掘到資源。 通過以上方法,當年他總共賺了有小幾十萬,但是實際上總共在他這兒消費過的人加一塊也就80多個。當時開發最成功的一個客戶是一個上班族,其一開始沒想在他這兒長期購買,因為他的價錢偏貴。但是由于他在獲取到他的資料后,找到了很好的突破口,結果變成了他的忠實用戶,他一個人就在他這兒消費了幾萬元,而且還給他介紹了好幾個忠實客戶。 二、理發店的例子 案例:理發大家都知道,是一個擁有上千年歷史的老行當了,現在的理發店競爭越來越激烈。而對于理發店來說,最優質的客戶是女性用戶,因為愛美是女人的天性,一般做一次頭發,至少都是上百元。如果那個理發店能有一群忠實的女性顧客,那生意一定會非常火爆。 而有這么一家理發店,就通過數據庫營銷,牢牢抓住了600個白領回頭客。那他是怎么做的呢? 分析:首先,這家理發店會為來理發的用戶,都建立一個客戶檔案,其中包括顧客目前頭發的狀況、歷次燙發染發的時間、用的什么燙發水等等,同時還包括職業、單位等基本信息。最重要的,要留下客戶的聯系方式,特別是線上聯系方式。 其次,通過MSN等工具與客戶進行線上交流,比如聊顧客的美發要求、閑聊促進感情等。因為大家都知道,要想長期留住你的用戶,最好的方法是與他成為朋友。而在理發的過程中,與顧客交流的時間和精力肯定有限,而如果通過電話等方式,又不是很現實。所以MSN等IM工具,就成了最佳選擇。與顧客聊成了朋友,自然就會成為你的回頭客。 而且當客戶要理發時,還可以提前在MSN上溝通好需求,再結合顧客的數據檔案,基本上就能對用戶的期望值把握的非常準確了。最重要的,這樣能最大程度的節省雙方的時間,同時也避免客人多時“撞車”排隊。 三、內聯升的數據庫營銷 一個古代的案例。清朝末年的老北京流傳著一句諺語:“頭戴馬聚源,身披瑞蚨祥,腳踏內聯升,腰纏‘四大恒’。”意思是戴馬聚源的帽子最尊貴,用瑞蚨祥的綢緞做衣服穿在身上最光彩,腳蹬一雙內聯升鞋店的靴鞋最榮耀,腰中纏著“四大恒”錢莊的銀票最富有,有腰纏萬貫之意。而這個內聯升,就是咱們接下來要講的故事主角。 內聯升的創始人叫趙廷,最早在一家鞋作坊學得一手制鞋手藝,又積累了一定的經驗。后來,由一位丁大將軍出資入股,資助趙廷開辦了鞋店。由于當時京城的制鞋行業競爭也挺激烈,于是他決定走專業路線,專門為皇親國戚、朝廷文武百官制作朝靴。早期的經營并不是一帆風順,因為這些達官貴人做鞋,經常只是差下人送個鞋樣過來,但這樣就保證不了鞋的舒適度。特別是遇到一些腳形比較特殊的人,可能就容易出問題。在經歷過幾次交易糾紛后,趙廷打起了數據庫營銷的主意(當然,那時候還沒有這個說法,也沒這個名詞,但是意思是一樣的),搞了一本后來聞名于世的《履中備載》。這個備載實際上就是內聯升的用戶檔案,里面詳細記載了京城內所有達官貴人腳上的秘密,比如鞋的尺寸、樣式和特殊腳形等等。有了這個數據后,為客人做鞋就不怕不合腳了,而且還省去了很多麻煩,比如說某個客人要做鞋,直接來支會一聲就行,不需要費勁的去溝通需求了。 《履中備載》推出之后,趙廷的生意果然是越來越火爆。而這火爆的原因,除了顧客對他的鞋越來越滿意這個原因外,還有個意外收獲。原來很多人聽說內聯升掌握了京城達官貴人的足下之秘后,都紛紛來訂鞋送禮。因為在當時,上好的朝靴經常作為一種禮品,饋贈親友或者下級送給上級。而內聯升的數據在當時不可多得的精準信息,大大方便了送禮者。 《數據庫》教學計劃 黃 艷 《數據庫》是一門語言學科,是職專學生素質教育的一個重要組成部分,對提高學生的編程能力,促進教學內容和教學體制改革,提高教育質量和管理水平,實現教育現代化具有重要意義。為了能順利完成教學任務,讓學生學有所成,特制定教學計劃如下: 一、學生情況分析 本學期擔任電子一年四個班的教學工作,從總體上看,學生的學習情況不一,學生的基礎參差不齊,僅有小部分同學操作能力較強,大部分學生基礎較差。在學習上懶惰、怕動手動腦,對要求掌握的概念及操作要領不加強與鞏固。所以,教學上要努力克服困難,充分利用現在條件,從實際出發,注重實效,堅持理論與實踐相結合等多途徑、多策略地激發他們的學習興趣,把他們引導到系統地學習上來。 二、學期教學目標 知識與技能: 1、數據庫基礎知識。 2、數據類型、運算符和表達式。 3、表文件的建立,基本操作。 4、通過學習,使學生了解并掌握一些學習方法和技巧,培養學生的學習積極性和自覺性,鼓勵學生之間相互交流,進行某些創新設計的能力。情感態度與價值觀: 讓學生理解《數據庫》對日常生活和學習的重要作用,激發強烈的求知欲,養成積極主動地學習和使用《數據庫》。做好學生的思想工作,調動學生的學習積極性,樹立自信心。在課堂上培養學生學習興趣和學習能力。同時使每個學生在課堂上都能掌握更多更廣的編程知識,技能和技巧。感受到創新的喜悅,并能用于實踐。培養學生對《數據庫》的興趣和意識,讓學生了解和掌握《數據庫》基本知識和技能,了解《數據庫》的發展及期應用對人類日常生活和科學技術的深刻影響。通過《數據庫》課程使學生具有獨立編程的能力;培養學生良好的學習素養,把《數據庫》作為支持終身學習和合作學習手手段,為適應信息社會的學習、工作和生活打下必要的基礎。 三、教材分析 本學期使用的教材是高等教育出版社出版的《數據庫應用基礎》,內容較多,知識面廣,學生掌握起來有較大的難度,需要加強上機操作練習,掌握操作要領。 四、預定教學進度安排如下: 九月份: 基礎知識 各種運算 十月份: 函數 十一月份: 函數 十二月份 第二章 一月份 考試第二篇:數據庫上機實驗總結(含代碼)
第三篇:人事管理系統數據庫設計 sql代碼
第四篇:數據庫營銷
第五篇:數據庫教學計劃--(定稿)