您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 项目/工程管理 > 郝斌数据库SqlServer2005自学教程所有代码
1用sql命令建表和约束createtabledept(dept_idintprimarykey,dept_namenvarchar(100)notnull,dept_addressnvarchar(100))createtableemp(--不能写成{emp_idintconstraintpk_emp_id_hahahaprimarykey,emp_namenvarchar(20)notnull,emp_sexnchar(1),dept_idintconstraintfk_dept_id_heiheiforeignkeyreferencesdept(dept_id),)createtablettt(iint,jint)createtablestudent(stu_idintprimarykey,stu_salintcheck(stu_sal=1000andstu_sal=8000),stu_sexnchar(1)default('男')--()可以省在数据库中字符串是必须用''括起来的)insertintostudent(stu_id,stu_sal)values(1,1000);insertintostudentvalues(2,6000,'女');insertintostudentvalues(3,6000,'女');insertintostudentvalues(4,6000,'女');insertintostudentvalues(3,6000);createtablestudent2(stu_idintprimarykey,stu_salintcheck(stu_sal=1000andstu_sal=8000),stu_sexnchar(1)default('男'),--()可以省在数据库中字符串是必须用''括起来的stu_namenvarchar(200)unique)insertintostudent2values(1,6000,'男','张三');--okinsertintostudent2values(2,6000,'男','张三');--error违反了唯一约束2insertintostudent2values(3,6000,'男','李四');--okinsertintostudent2values(null,6000,'男','王五');--error主键不能为null出错的信息是“不能将值NULL插入列'stu_id'”insertintostudent2values(4,6000,'男',null);--ok说明唯一键允许为空insertintostudent2values(5,6000,'男',null);createtablestudent3(stu_idintprimarykey,stu_salintcheck(stu_sal=1000andstu_sal=8000),stu_sexnchar(1)default('男'),--()可以省在数据库中字符串是必须用''括起来的stu_namenvarchar(200)uniquenotnull--uniqe和notnull约束可以组合是用)insertintostudent2values(3,6000,'男',null);--error证明了:uniqe和notnull约束可以组合使用如何合理的利用主键和唯一键建表droptablestudent4;--删除student4createtablestudent4(stu_idintprimarykey,stu_namenvarchar(50)uniquenotnull,stu_emailnvarchar(50)notnullunique,stu_addressnvarchar(50))oracle中的命令createtablestudent2(stu_idintprimarykey,stu_salintcheck(stu_sal=1000andstu_sal=8000),stu_sexnchar(1)default('男'),--()可以省在数据库中字符串是必须用''括起来的stu_namenvarchar2(200)unique)insertintostudent2values(4,6000,'男',null);insertintostudent2values(5,6000,'男',null);select*fromstudent2复习createtablestudent5(stu_idintprimarykey,3stu_emailnvarchar(200)notnull,stu_namenvarchar(20)unique,stu_salintcheck(stu_sal=1000andstu_sal=8000),stu_sexnchar(1)default'男')insertstudent5values(1,'hb.g@163.com','zhangsan',5000);--errorselect*fromstudent5insertstudent5(stu_id,stu_email,stu_name,stu_sal)values(2,'hb.g@163.com','zhangsan',5000);insertstudent5(stu_id,stu_email,stu_sal)values(3,'hb.g@163.com',5000);--ok--这说明:stu_name默认是null也就是说如果一个字段不写null也不行notnull则默认是null即默认允许为空用户可以不给该字段赋值多对多关系sql语句的实现--班级表createtablebanji(banji_idintprimarykey,banji_numintnotnull,banji_namenvarchar(100))--教师createtablejiaoshi(jiaoshi_idintprimarykey,jiaoshi_namenvarchar(200))--第三张表用来模拟班级和教师的关系createtablebanji_jiaoshi_mapping(banji_idintconstraintfk_banji_idforeignkeyreferencesbanji(banji_id),jiaoshi_idintforeignkeyreferencesjiaoshi(jiaoshi_id),kechengnvarchar(20),constraintpk_banji_id_jiaoshi_idprimarykey(banji_id,jiaoshi_id,kecheng))4--删除表droptablebanji_jiaoshi_mapping查询1select*fromemp;--*表示所有的--fromemp表示从emp表查询selectempno,enamefromemp;selectename,salfromemp;selectename,sal*12as年薪fromemp;--as可以省略记住:年薪不要写成'年薪'也不要写成年薪selectename,sal*12as年薪,sal月薪,jobfromemp;select888fromemp;--ok--输出的行数是emp表的行数每行只有一个字段,值是888select5;--ok--不推荐查询2selectdeptnofromemp;--14行记录不是3行记录selectdistinctdeptnofromemp;--distincedeptno会过滤掉重复的deptnoselectdistinctcommfromemp;--distinct也可以过滤掉重复的null或者说如果有多个null只输出一个selectdistinctcomm,deptnofromemp;--把comm和deptno的组合进行过滤selectdeptno,distinctcommfromemp;--error逻辑上有冲突select10000fromemp;--14行记录复习select*fromemp;selectenamefromemp;selectename,*fromemp;--ok但是在Oracle11G中会出错,因此不建议这样写selectenameas姓名,salfromemp;selectename,15fromemp;select15fromemp;--14行5select15;--不推荐selectdistinctdeptno,commfromemp;--ok把deptno和comm的组合不重复的输出selectdistinctcommfromemp;--okselectdeptno,distinctcommfromemp;--errorbetween查询示例--查找工资在1500到3000之间(包括1500和3000)的所有的员工的信息select*fromempwheresal=1500andsal=3000等价于select*fromempwheresalbetween1500and3000--查找工资在小于1500或大于3000之间的所有的员工的信息select*fromempwheresal1500orsal3000等价于select*fromempwheresalnotbetween1500and3000select*fromempwheresalin(1500,3000,5000)等价于select*fromempwheresal=1500orsal=3000orsal=5000in查询示例select*fromempwheresalnotin(1500,3000,5000)--把sal既不是1500也不是3000也不是5000的记录输出等价于select*fromempwheresal1500andsal3000andsal5000--数据库中不等于有两种表示:!=推荐使用第二种--对或取反是并且对并且取反是或top查询示例select*fromemp;selecttop5*fromemp;selecttop15percent*fromemp;--输出的是3个,不是2个6--把工资在1500到3000之间(包括1500和3000)的员工中工资最高的前4个人的信息输出selecttop4*fromempwheresalbetween1500and3000orderbysaldesc--desc降序不写则默认是升序null查询示例select*fromemp;--输出奖金非空的员工的信息select*fromempwherecommnull;--输出为空errorselect*fromempwherecomm!=null;--输出为空errorselect*fromempwherecomm=null;--输出为空error--总结:null不能参与!==运算--null可以参与isnotisselect*fromempwherecommisnull;--输出奖金为空的员工的信息select*fromempwherecommisnotnull;--输出奖金不为空的员工的信息--任何类型的数据都允许为nullcreatetablet1(namenvarchar(20),cntint,riqidatetime);insertintot1values(null,null,null)select*fromt1;select*fromemp;--输出每个员工的姓名年薪(包含了奖金)comm假设是一年的奖金selectempno,ename,sal*12+comm年薪fromemp;--本程序证明了:null不能参与任何数据运算否则结果永远为空复习selecttop5fromemp;select*fromempwherecommisnotnullselectename,sal*12+commfr
本文标题:郝斌数据库SqlServer2005自学教程所有代码
链接地址:https://www.777doc.com/doc-2024376 .html