数据管理SQLBase第四章2SQL•WHAT(SQL是什么?)——StructuredQueryLanguage:结构化查询语言•WHY(为何要使用SQL?)——难道仅仅使用企业管理器操作SQLServer数据库?——应用程序如何与数据库打交道?•WHEN(何时使用?)——对SQLServer执行所有的操作都可以——程序中的增删改查•HOW(怎么使用?)——…SQL和T-SQL•T-SQL=Transact-SQL•T-SQL是SQL的加强版•对功能进行了扩充:如变量说明、流程控制、功能函数思考•ORACLE数据库支持标准SQL,在SQLServer中编写的T-SQL语句他也支持吗?T-SQL的组成•DML(数据操作语言)——查询、插入、删除和修改数据库中的数据;——SELECT、INSERT、UPDATE、DELETE等;•DCL(数据控制语言)——用来控制存取许可、存取权限等;——GRANT、REVOKE等;•DDL(数据定义语言)——用来建立数据库、数据库对象和定义其列——CREATETABLE、DROPTABLE等•变量说明、流程控制、功能函数——定义变量、判断、分支、循环结构等——日期函数、数学函数、字符函数、系统函数等T-SQL中的运算符运算符含义=等于大于小于=大于或等于=小于或等于不等于!非与C语言中的一样,很难写错通配符通配符解释示例‘_’一个字符ALike'C_'%任意长度的字符串BLike'CO_%'[]括号中所指定范围内的一个字符CLike'9W0[1-2]'[^]不在括号中所指定范围内的一个字符DLike'%[A-D][^1-2]'通配符使用说明•通常与LIKE关键字一起来使用•可以用在检查约束中使用LIKE•在后面的查询语句中还会经常使用到思考:身份证号码的约束表达式怎么写?逻辑表达式逻辑表达式说明示例AND逻辑与1AND1=;1AND0=0;0AND0=0;OR逻辑或1OR1=1;1OR0=1;0OR0=0;NOT逻辑非NOT1=0;NOT0=1;NOT(付款方式='信用卡')OR(信用卡'阳光卡')讲述T-SQL之前…语法检查执行选择数据库数据库对象T-SQL执行结果插入数据行INSERT[INTO]表名[列名]VALUES值列表INSERTINTOStudents(SName,SAddress,SGrade,SEmail,SSEX)VALUES('张青裁','上海松江',6,'ZQC@Sohu.com',0)插入数据行注意事项1:每次插入一行数据,不可能只插入半行或者几列数据,因此,插入的数据是否有效将按照整行的完整性的要求来检验;INSERTINTOStudents(SName,SAddress,SGrade,SEmail,SSEX)VALUES('张青裁')×插入数据行注意事项2:每个数据值的数据类型、精度和小数位数必须与相应的列匹配;INSERTINTOStudents(SName,SAddress,SGrade,SEmail,SSEX)VALUES('张青裁','上海松江',ZQC,'ZQC@Sohu.com','ZG')×插入数据行注意事项3:不能为标识列指定值,因为它的数字是自动增长的;INSERTINTOStudents(SCode,SName,SAddress,SGrade,SEmail,SSEX)VALUES(32,'张青裁','上海松江',6,'ZQC@Sohu.com',0)×插入数据行注意事项4:如果在设计表的时候就指定了某列不允许为空,则必须插入数据;INSERTINTOStudents(SAddress,SGrade,SEmail,SSEX)VALUES('上海松江',6,'ZQC@Sohu.com',0)×插入数据行注意事项5:插入的数据项,要求符合检查约束的要求INSERTINTOStudents(SName,SAddress,SGrade,SEmail,SSEX)VALUES('张青裁','上海松江',6,'ZQC',0)插入数据行注意事项6:具有缺省值的列,可以使用DEFAULT(缺省)关键字来代替插入的数值INSERTINTOStudents(SName,SAddress,SGrade,SEmail,SSEX)VALUES('张青裁',DEFAULT,6,'ZQC@Sohu.com',0)插入多行数据INSERTINTOTongXunLu('姓名','地址','电子邮件')SELECTSName,SAddress,SEmailFROMStudentsINSERTINTO表名(列名)SELECT列名FROM源表名插入多行数据SELECTStudents.SName,Students.SAddress,Students.SEmailINTOTongXunLuFROMStudentsSELECT(列名)INTO表名FROM源表名猜一猜:该语句可以执行两次吗?插入多行数据SELECTStudents.SName,Students.SAddress,Students.SEmail,IDENTITY(int,1,1)AsStudentIDINTOTongXunLuEXFROMStudentsSELECTINTO插入多行数据的时候,如何插入新的标识列?SELECTIDENTITY(数据类型,标识种子,标识增长量)AS列名INTO新表FROM原始表插入多行数据INSERTSTUDENTS(SName,SGrade,SSex)SELECT'测试女生1',7,0UNIONSELECT'测试女生2',7,0UNIONSELECT'测试女生3',7,0UNIONSELECT'测试女生4',7,0UNIONSELECT'测试女生1',7,0UNIONSELECT'测试男生2',7,1UNIONSELECT'测试男生3',7,1UNIONSELECT'测试男生4',7,1UNIONSELECT'测试男生5',7,1INSERTINTO表名(列名)SELECT列名UNIONSELECT列名UNION……更新数据行UPDATE表名SET列名=更新值[WHERE更新条件]UPDATEStudentsSETSSEX=0UPDATEStudentsSETSAddress='北京女子职业技术学校家政班'WHERESAddress='北京女子职业技术学校刺绣班'UPDATEScoresSETScores=Scores+5WHEREScores=95删除数据行DELETEFROM表名[WHERE删除条件]DELETEFROMStudentsWHERESName='张青裁'河南新乡赵可以0010016河南新乡张丽鹃0010015江西南昌雷铜0010014湖南新田吴兰0010013山东定陶李山0010012….地址姓名学号980010016数学810010013语文670010012语文740010013数学880010012数学….分数学号科目DELETEFROM学员信息表WHERE学号='0010012'删除数据行思考:以下的删除语句可以执行吗?DELETESCodeFROMStudents删除数据行TRUNCATETABLE表名TRUNCATETABLEStudentsDELETEFROMStudents=