1第二章数据查询1回顾数据完整性包括了实体完整性、引用完整性、域完整性和自定义完整性创建数据库表的过程实际上就是实施完整性约束的过程创建表包括选择字段名称、数据类型、定义是否为空、设置默认值、主键和关系、检查约束等表中没有合适的列作为主键,可以创建标识列2目标理解T-SQL及其作用使用SQLServer中的逻辑表达式和运算符使用T-SQL向表中插入数据使用T-SQL更新表中的数据使用T-SQL删除表中的数据3SQLWHAT(SQL是什么?)——StructuredQueryLanguage:结构化查询语言WHY(为何要使用SQL?)——难道仅仅使用企业管理器操作SQLServer数据库?——应用程序如何与数据库打交道?WHEN(何时使用?)——对SQLServer执行所有的操作都可以——程序中的增删改查HOW(怎么使用?)——…4T-SQL中的运算符运算符含义=等于大于小于=大于或等于=小于或等于不等于!非5与C语言中的一样,很难写错通配符6通配符解释示例‘_’一个字符ALike'C_'%任意长度的字符串BLike'CO_%'通配符使用说明通常与LIKE关键字一起来使用可以用在检查约束中使用LIKE在后面的查询语句中还会经常使用到7逻辑表达式逻辑表达式说明示例AND逻辑与1AND1=;1AND0=0;0AND0=0;OR逻辑或1OR1=1;1OR0=1;0OR0=0;NOT逻辑非NOT1=0;NOT0=1;8讲述T-SQL之前…9语法检查执行选择数据库数据库对象T-SQL执行结果Sql语言四个关键字select(查)insert(增)update(改)delete(删)目标理解查询的机制使用SELECT语句进行条件查询在查询中返回限制行、进行查询排序在查询中使用表达式、运算符和函数11什么是查询?12ApplicationLogic客户程序查询请求查询结果集SQLSERVERABCDEFGSELECT*FROMSALES查询产生一个虚拟表,看到的是表形式显示的结果,但结果并不真正存储,每次执行查询只是现从数据表中提取数据,并按照表的形式显示出来怎么查的?13学员编号学员姓名地址所在班级…….001张明全湖南长沙S201002李菲湖北宜昌S202003于寄谦甘肃天水S204004刘国正山东荷泽S201005周接轮台湾新竹S204006巩小妹香港龙湾S203007巩大妹香港龙湾S203008张明敏北京顺义S202009矛十八四川棉阳S204010罗林光陕西临潼S202011司马坡新疆喀什S201S202陕西临潼罗林光010…S202湖北宜昌李菲002S202北京顺义张明敏008SELECT*FROMStudentsHWHERE所在班级=‘S202’思考14既然查询得到的“结果集”的结构类似于一张表,那么可以在“结果集”上继续进行查询吗?编写查询语句之前…15查询16SELECT列名FROM表名[WHERE查询条件表达式][ORDERBY排序的列名[ASC或DESC]]列名称SELECTSCode,SName,SAddress表名FROMStudents过滤条件WHERESSEX=0排序条件ORDERBYSCodeSELECTsNum,sName,sDepartFROMStudentWHEREsSEX=0ORDERBYsNum数据查询-基础17查询全部的行和列SELECT*FROMStudents查询部分行SELECTsNum,sName,sDepartFROMStudentWHEREsDepart=‘计算机’数据查询-列名18使用AS来命名列SELECTsNumAS学号,sNameAS学员姓名,sDepartAS专业FROMstudentWHEREsDepart‘计算机'SELECTFirstName+'.'+LastNameAS'姓名'FROMEmployees使用=来命名列SELECT'姓名'=FirstName+'.'+LastNameFROMEmployees数据查询-空行常量列19查询空行SELECTsNameFROMstudentsWHEREsAgeISNULL使用常量列SELECT姓名=sName,性别=sSex,‘中南大学'AS学校名称FROMstudent思考:非空行怎么查?数据查询-限制行数20限制固定行数SELECTTOP5sName,sDepartFROMStudentWHEREsSex=0返回百分之多少行SELECTTOP20PERCENTsName,sDepartFROMStudentWHEREsSex=0数据查询-排序2-121升序排列SELECTStudentIDAs学员编号,(Score*0.9+5)As综合成绩FROMScoreWHERE(Score*0.9+5)60ORDERBYScore降序排列SELECTAu_Lname+'.'+Au_fNameASEMPFromAuthorsUnionSELECTfName+'.'+LNameASEMPFromEmployeeORDERBYEMPDESC数据查询-排序2-222按多列排序SELECTStudentIDAs学员编号,ScoreAs成绩FROMScoreWHEREScore60ORDERBYScore,CourseID思考:排序中的字段,可以使用表达式吗?——如果不可以,请说明原因;——如果可以,请举例说明;SQLServer中的函数23相当于C语言中的内部函数字符串函数日期函数数学函数系统函数字符串函数24SELECTSTUFF('ABCDEFG',2,3,'我的音乐我的世界')返回:A我的音乐我的世界EFG在一个字符串中,删除指定长度的字符,并在该位置插入一个新的字符串STUFFSELECTCHARINDEX(‘sql','MysqlCourse',1)返回:4用来寻找一个指定的字符串在另一个字符串中的起始位置CHARINDEX举例描述函数名SELECTLEN('SQLServer课程')返回:12返回传递给它的字符串长度LENSELECTLOWER('SQLServer课程')返回:sqlserver课程把传递给它的字符串转换为小写LOWERSELECTUPPER('sqlserver课程')返回:SQLSERVER课程把传递给它的字符串转换为大写UPPERSELECTLTRIM('周智宇')返回:周智宇(后面的空格保留)清除字符左边的空格LTRIMSELECTRTRIM('周智宇')返回:周智宇(前面的空格保留)清除字符右边的空格RTRIMSELECTRIGHT('买卖提.吐尔松',3)返回:吐尔松从字符串右边返回指定数目的字符RIGHTSELECTREPLACE('莫乐可切.杨可','可','兰')返回:莫乐兰切.杨兰替换一个字符串中的字符REPLACE日期函数25SELECTDATEPART(day,’01/15/2000’)返回:15日期中指定日期部分的整数形式DATEPARTSELECTGETDATE()返回:今天的日期取得当前的系统日期GETDATE举例描述函数名SELECTDATENAME(dw,’01/01/2000’)返回:Saturday日期中指定日期部分的字符串形式DATENAME数学函数26SELECTSQRT(9)返回:3取浮点表达式的平方根SqrtSELECTABS(-43)返回:43取数值表达式的绝对值ABS举例描述函数名SELECTCEILING(43.5)返回:44返回大于或等于所给数字表达式的最小整数CEILINGSELECTPOWER(5,2)返回:25取数值表达式的幂值POWERSELECTROUND(43.543,1)返回:43.5将数值表达式四舍五入为指定精度ROUNDSELECTSIGN(-43)返回:-1对于正数返回+1,对于负数返回-1,对于0则返回0SignSELECTFLOOR(43.5)返回:43取小于或等于指定表达式的最大整数FLOOR系统函数27SELECTUSER_NAME(1)返回:从任意数据库中返回“dbo”从给定的用户ID返回用户名USER_NAMESELECTCONVERT(VARCHAR(5),12345)返回:字符串12345用来转变数据类型CONVERT举例描述函数名SELECTCURRENT_USER返回:你登录的用户名返回当前用户的名字CURRENT_USERSELECTDATALENGTH('中国A盟')返回:7(一个汉字占两个字节)返回用于指定表达式的字节数DATALENGTHSELECTHOST_NAME()返回:你所登录的计算机的名字返回当前用户所登录的计算机名字HOST_NAMESELECTSYSTEM_USER返回:你当前所登录的用户名(登录电脑的用户名)返回当前所登录的用户名称SYSTEM_USER总结查询将逐行筛选表中的数据,最后符合要求的记录重新组合成“记录集”,记录集的结构类似于表结构判断一行中的数据项是否为空,使用ISNULL使用ORDERBY进行查询记录集的排序,并且可以按照多个列进行排序在查询中,可以使用常量、表达式、运算符在查询中使用函数,能够像在程序中那样处理查询得到的数据项28