当前位置:文档之家› T-Sql高级查询

T-Sql高级查询

高级理论部分简单子查询语法:select......from表where列>(子查询)其中:子查询语句必须放置在一对圆括号内*********⏹习惯上,外面的查询成为父查询,圆括号中嵌入的查询称为子查询⏹注意:SQL编译时:先执行父查询,后执行子查询,即先父后子●SQL执行时:先执行子查询,后执行父查询,即先子后父*********表命名别名(alias) 的方法:----1.使用AS 关键字,符合ANSI标准select列表from表名as表的别名----2.使用空格,简便的方法select列表from表名表的别名●提示:◆1>.般来说,表连接都可以用子查询替换,但反过来却不一定,有的子查询不能用表连接来替换◆2>.查询比较灵活,方便,形式多样,适用于作为查询的筛选条件,而表连接更适合于查看多表的数据●注意:⏹当某个表命名别名后,在select 语句中出现该表的列需要指定表名时,就必须统一使用该表的别名,⏹否则将产生语法错误IN 子查询:◆后面可跟随返回多条记录的子查询,用于检测某列的值是否存在于某个范围中NOT IN 子查询:◆后面可跟随返回多条记录的子查询,用于检测不存在于某个范围中的某列的值EXISTS :◆关键字能够检测数据是否存在◆语法:if exists (子查询)语句其中:如果子查询的结果非空,则Exists将返回真(true),否则返回假(false)NOT EXISTS子句:EXISTS和IN 一样,同样允许添加not关键字实现取反操作,not exists 表示不存在子查询注意事项:⏹子查询语句可以嵌套在SQL 语句中任何表达式出现的位置●嵌套在select 语句的select 子句中的子查询语句如下:⏹select (子查询)from表名子查询结果为单行单列,但不必指定列的别名●嵌套在select 语句的from 子句中的子查询语句如下:⏹select*from (子查询)as表的别名必须为表指定别名⏹在子查询的select 子句中不能出现TEXT 、NTEXT、IMAGE数据类型的列⏹目前大部分数据库管理系统的编译器不支持在子查询语句中查询二进制类型的数据⏹只出现在子查询中而没有出现在父查询中的表不能包含在输出列中SQL为列命名别名的方法◆使用AS 关键字:⏹select列名as列的别名from表名◆使用空格:⏹select列名列的别名from表名◆使用赋值运算符,SQL Server 支持的方式:⏹select列的别名=列名from表名列命名别名时注意的问题:⏹当使用中文列名时,可不写引号,但千万不能使用全角引号,否则查询会出错⏹当使用的英文列名超过两个单词时,必须使用引号将列名括起来合并多个表中的数据的方法:◆联合——合并多个数据集中的行◆子查询——将一个查询嵌套在另一个查询中◆连接——合并多个数据表中的列基础理论部分◆在查询中使用的函数,根据用途,把函数分为四类字符串函数:用于控制返回给用户的字符串◆Charlndex:用来寻找一个指定的字符串在另一个字符串的起始位置◆len:返回传递给它的字符串长度◆upper:把传递给它的字符串转化成大写◆ltrim:清除字符左边的空格◆rtrim:清除字符右边的空格◆right:从字符右边返回指定数目的字符◆replace:替换一个字符串中的字符◆stuff:在一个字符串中,删除指定长度的字符,并在该位置插入一个新的字符日期函数getdate:取得当前的系统日期●例如:select getdate()●返回:今天的日期dateadd:将指定的数值添加到指定的日期部分后的日期●例如:select dateadd(mm,4,‘01/01/1999’)●返回:以当前的日期格式返回05/01/1999datediff:两个日期之间的指定日期部分的区别●例如:selectdatediff(mm,‘01/01/1999’,‘05/01/1999’)●返回:4datename:日期中指定日期部分的字符串形式●例如:selectdatename(dw,‘01/01/2000’)●返回:saturdaydatepart:日期中指定日期部分的整数形式●例如:selectdatepart(day,‘01/15/2000’)●返回:15数学函数⏹abs:取数值表达式的绝对值例如:select abs(-43)返回:43⏹ceiling:取大于或等于指定数值,表达式的最小整数例如: select ceiling(43.5)返回:44⏹floor:取小于或等于指定表达式的最大整数例如:select floor(43.5)返回:44⏹power:取数值表达式的幂值例如:lelect power(5,2)返回: 25⏹round:将数值表达式四舍五入为指定精读例如:select round(43.543,1)例如:43.5⏹sign:对于正数返回+1,对于负数返回-1,对于0返回例如:select sign(-43)返回:43⏹sqrt:取浮点表达式的平方根例如:select sqrt(9)返回:3系统函数◆convert:数据类型转换●例如:select convert(varchar(5)),12345)●返回:字符串12345◆(2)cast:数据类型转换,与couvert相比起语法比较简单些,●例如:select cast(‘2009-03-17’as datetime)●返回:2009-03-17 00:00:00.000◆current_user:返回当前用户的名字●例如:select current_user●返回:你登录的用户名◆datalength:返回用于指定表达式的字节数●例如:select datalength(‘中国A联盟’)●返回:5◆host_name:返回当前用户所登录的计算机的名字●例如:select host_name()●返回:你所登录的计算机的名字◆system_user:返回当前所登录的用户名●例如:select system_user●返回:你当前所登录的用户名◆user_name:从给定的用户ID中返回用户名●例如:select user_name(1)●返回:从任意数据中返回“dbo”SQL Server中的聚合函数sum:返回表达式中所有数值的总和,只能用于数字类型的列,不能够汇总字符avg:返回表达式中所有数值的平均值,只能用于数字类型的列✓注意:如果表名包含了非字母,数字,下划线字符的,在引用时请使用双引号括起来max和min:max返回表达式中的最大值;min返回表达式中的最小值,它们都可以用于数字型,字符型以及日期型/时间性的列 count:返回表达式中非空值的计数,count可用于数字和字符类型的列分组查询一、使用Group By进行分组查询二、使用Having子句进行分组筛选✓注意:having和where子句可以在同一select语句中使用,使用时应按照where-group by-having的顺序。

Where子句从数据源中去掉不符合其搜索条件的数据;group by子句搜索数据行到各个组中,统计函数为各个组计算统计值;having子句去掉不符合其族搜索条件的各组数据行多表联接查询1.内联接:根据表中共同的列来进行匹配,只有匹配条件的数据才能够被查询出来.内联接使用inner join关键字或者直接在where条件里通过表达式来进行表之间的关联✓实现方式一:在where子句中指定联接条件,例如:数据库MySchool中表Student和Result 中查询学生姓名、学生学号、考试成绩、考试日期:use MySchoolgoselect StudentName,s.StudentNo,StudentResult,ExamDate fromStudent as s,Result as rwhere s.StudentNo=r.StudentNo实现方式二:在from子句中使用join……on来实现,例如:数据库MySchool中表Student和Result 中查询学生姓名、学生学号、考试成绩、考试日期:use MySchoolgoselect StudentName,s.StudentNo,StudentResult,ExamDate fromStudent as sinner join Result as r on s.StudentNo=r.StudentNo2.外联接:不仅显示两个表关联字段匹配的记录,同时不匹配的记录根据外联接类型也会显示,(1)左外联接:left join或left outer join.左外联接的结果集包括left join子句中指定的左表的所有行,而不仅仅是连接列所匹配的行,如果左表的某行在右表没有匹配行,则在相关联的结果集行中,右表的所有选择列均为空值(2)有外联接:right join或right outer join.右外联接是左外联接的反向联接,将返回右表的所有行,如果右表的某行在左表中没有匹配行,则将为左表返回空值(3)完整外联接:full join或full outer join.完整外联接返回左表和右表的所有行,当某行在另一个表中没有匹配行时,则另一个表的选择列包含空值,如果表之间没有匹配行,则整个结果集包含基表的数据值3.交叉联接:交叉联接就是表之间没有任何关联条件,查询将返回左表与右表挨个联接的所有行,就是左表中的每一行与右表中的所有行再一一组合,相当于两个表相乘。

相关主题