NIIT课本整理知识点.docx
《NIIT课本整理知识点.docx》由会员分享,可在线阅读,更多相关《NIIT课本整理知识点.docx(16页珍藏版)》请在冰豆网上搜索。
![NIIT课本整理知识点.docx](https://file1.bdocx.com/fileroot1/2023-8/15/2197ff45-b799-4b17-a36b-3d3fa2077ef0/2197ff45-b799-4b17-a36b-3d3fa2077ef01.gif)
NIIT课本整理知识点
Select语句的一般格式:
SELECT[ALL|DISTINCT]<目标列表达式>[别名][,<目标列表达式>[别名]]…
FROM<表名或视图名>[别名][,<表名或视图名>[别名]]…
[WHERE<条件表达式>]
[GROUPBY<列名1>[HAVING<条件表达式>]]
[ORDERBY<列名2>[ASC|DESC]]
--从(from)哪里来(where)分组(group)由’有’(having)命令(order)排列(asc|desc)
1、目标列表达式有以下可选格式:
、*
、<表名>.*
、COUNT([DISTINCT|ALL]*)
、[<表名>.]<属性列名表达式>[,[<表名>.]<属性列名表达式>]…
其中<属性列名表达式>可以是由属性列、作用于属性列的聚集函数和常量的任意算数运算(+,-,*,/)组成的运算公式
2、聚集函数的一般格式为:
([DISTINCT|ALL]<列名>)
3、where子句的条件表达式有以下可选格式:
、<属性列名>
、<属性列名>[NOT]BETWEEN
AND
、<属性列名>[NOT]IN
、<属性列名>[NOT]LIKE<匹配串>
、<属性列名>IS[NOT]LIKE<匹配串>
、[NOT]EXISTS(SELECT语句)
、<条件表达式>
<条件表达式>
…
自定义显示:
1、可以使用文字向列中显示的值添加更多文本,文字是字符串值,用单引号括起来,如
selectcustomerid,'价格',price
fromitems_ordered
显示如下:
2、并置输出表中的文本值:
并置两个字符串,如:
select'你是‘+’谁啊'
显示如下:
将表中的两列并置到单独一列:
如:
selectcustomerid+'买了:
'+itemasitemfromitems_ordered
As后面跟的是将要显示出来的列名,可以是已存在的列名,也可以是虚拟的列名,其无实际意义
3、计算列值:
如:
selectcustomerid,two_price=2*pricefromitems_ordered
uselonewolf
selectcustomerid,2*priceastwo_pricefromitems_ordered
等于号‘=’和as效果相同只不过语句中位置不同,as在后,=号在前
4、检索选定行:
即查看与条件匹配的记录,在select语句中使用where子句,使用where子句选择满足条件的行
select*fromitems_orderedwhereitem='Tent'
5、使用比较运算符来指定条件
语法是
selectcolumn_list
fromtable_name
whereexpression1comparison_operaratorexpression2
--其中expression1和expression2是常量、变量、函数或基于列的表达式的任何有效组合
如:
selectprice
fromitems_ordered
whereprice>=100
一些运算符:
<>,!
=不等于
!
<不小于
!
>不大于
6、检索满足一个或多个条件的记录
OR:
至少满足一个条件时返回true值
如:
select*fromitems_ordered
wherequantity='4'orprice>1000
and:
用于连接两个条件并在均满足这两个条件时返回true值
如:
select*fromitems_ordered
wherequantity='4'andprice<1000
Not:
对搜索条件的结果相反
select*fromitems_ordered
wherenotprice<1000
Between:
指定要搜索的包含范围
select*fromitems_ordered
wherepricebetween200and1500
Notbetween:
从结果集排除指定的范围
select*fromitems_ordered
wherepricenotbetween5and1500
--not的位置最好紧跟between,不过不紧跟也不报错
7、检索包含给定值集中任何值的记录
这类运算是使用IN和NOTIN关键字执行的
select*fromitems_ordered
wherequantityin('3','4')
8、like关键字用于使用通配符来搜索字符串,通配符是特殊字符
%表示任何字符串,可以是零个或更多字符
_表示任何单个字符
[]表示指定范围内的任何单个字符—范围是指:
中括号中给定值的所有单个值的集合
[^]表示指定范围外的任何单个字符
表达式
返回
LIKE’LO%’
以“LO”开头的所有名称
LIKE’%ion’
以ion结尾的所有名称
LIKE’%rt%’
其中包含字母rt的所有名称
LIKE’_rt’
所有以rt结尾的三个字母的名称
LIKE’[DK]%’
以D或K开头的所有名称
LIKE’[A&nbhy;D]ear
所有以ear结尾并以A到D中任一字母开头的四个字母的名称
LIKE’D[^c]%’
以D开头并且第二个字母不是c的所有名称
Like运算符不区分大小写
9、null值在列中暗示该列没有提供任何数据值,语法:
Selectcolumn_listFromtable_name
Wherecolumn_nameunknown_value_operator
其中unknown_value_operator是关键字ISNULL或ISNOTNULL
selectcustomeridfrom
items_orderedwherepriceisnull
两个NULL值不想等。
无法比较一个NULL值和另一个NULL值。
在按升序排列的输出中,NULL值总是第一个显示的项
10、检索将按一定顺序显示的记录
可以使用select语句的ORDERBY子句按特定顺序显示数据。
数据可以按给定列中值的升序或降序显示。
ORDERBY子句:
按照递增或递减顺序在指定字段中对查询的结果记录进行排序
在select语句中使用ORDERBY子句的语法是:
Selectselect_listfromtable_name
[ORDERBYORDER_by_expression[ASC|DESC],order_by_expression[ASC|DESC]…]
其中order_by_expression是要执行排序运算的列名
ASC指定需要按升序来排序值
DESC是指定需要按降序来排序值
如:
select*fromitems_orderedorderbypriceASC
ORDERBY子句完全可以与WHERE子句一起使用,唯一需要注意的就是:
ORDERBY子句要放到WHERE子句之后,即:
select*fromitems_orderedwhereprice>200orderbypriceDESC;
或者基于多个列来对结果集排序,为此,需要在ORDERBY子句中指定列的排序顺序,如
select*fromitems_orderedorderbycustomerid,price
上述查询先按照customerid的升序,然后按照price的升序来排序items_ordered表
如果没有在ORDERBY子句中指定列名的关键字,将按升序来排序记录
ORDERBY子句不会从物理上对表排序
11、从表顶部检索记录
TOP关键字是从查询结果返回的一些记录或者一定百分比的行
selecttop10column_name
fromitems_ordered—显示前10行的列
selecttop10percentcolumn_name
fromitems_ordered--显示前10%的列
12、检索值不重复的记录:
需要删除列中具有重复值的行时,可以使用distinct关键字。
Distinct关键字从结果集中删除重复行。
关键词DISTINCT用于返回唯一不同的值
selectdistinctitemfromitems_ordered
使用函数来定义结果集:
1、使用字符串函数
2、使用日期函数
查询显示当前日期:
selectGETDATE()
函数名
参数
示例
描述
Dateadd
(datepert,number,date)
Selectdateadd(mm,3,’2009-01-01’)
返回2009-04-01,即向该日期加上三个月
Datediff
(datepart,date1,date2)
Selectdatename(month,convert(datetime,’2009-09-01’))
返回4,计算两个日期的该日期(year)的间隔
Datename
(datepart,date)
Selectdatename(month,convert(datetime,’2005-06-06’))
返回6月,这是所列日期的月份,返回值为字符值
Getdate
无参数
Selectgetdate()
返回当前日期和时间
Day
(date)
Selectday(‘2009&nbhy,01-05’)
返回5,代表几号,返回值为整数
Getutcdate
无参数
Selectgetutcdate()
返回系统当前日期,使用“协调世界时(UTC)”,UTC时间也称格林威治时间(GMT)
Month
(date)
Selectmonth(‘2009&nbhy,01&nbhy;05’’)
返回1,代表月份,返回值为整数
Year
(date)
Selectyear(‘2009-01-05’)
返回2009,代表年份,返回值为整数
日期函数的利用:
selectcustomerid,DATENAME(YY,order_date)+','+convert(varchar,datepart(MM,order_date))+'买了'+itemasxiaofei
fromitems_ordered
另一例子:
selectitem,convert(char(10),order_date,2)as'hiredate'
fromitems_ordered
排名函数
Row_number()
Rank()
Dense_rank()
Ntile()
以上这些函数都是用over子句。
该子句确定在行中指定排名的升序或降序。
可以将partitionby子句与over子句一起使用来划分执行排名的行。
Partitionby子句根据指定的条件将结果集划分为分区,然后rank函数应用到每个分区
Row_number()函数
根据列为结果集中的行返回有序数字,从1开始
如:
selectitem,price,order_date,ROW_NUMBER()over(orderbypriceasc)asrankfromitems_ordered
rank()函数
根据指定条件在结果集中返回每一行的排名
如:
selectitem,price,order_date,Rank()over(orderbypriceasc)asrankfromitems_ordered
如上所示,相同的会有并列排名,而且有了并列则排名就是不连续的了
Dense_rank()函数
适用于需要根据指定条件给出连续排名值的情况。
其执行的排名任务与rank()函数执行的一样,但是它为输出提供连续的排名值如:
selectitem,price,order_date,dense_rank()over(orderbypriceasc)asrankfromitems_ordered
分区函数partitionby:
partitionby关键字是分析性函数的一部分,它和聚合函数不同的地方在于它能返回一个分组中的多条记录,而聚合函数一般只有一条反映统计值的记录,partitionby用于给结果集分组,如果没有指定,那么它把整个结果集作为一个分组
示例:
--不分班按学生成绩排名
select*,ROW_NUMBER()over(orderbyScoredesc)asSequencefromStudent
--分班后按学生成绩排名
select*,row_number()over(partitionbyGradeorderbyScoredesc)asSequencefromStudent
聚合函数:
用来生成汇总数据
Avg()返回数据表达式中的平均值
Count()返回表达式中的值数
Min()返回表达式中的最小值
Max()返回表达式中的最大值
Sum()返回素质表达式中全部值或唯一值的总和
分组数据:
Groupby子句使用聚合函数将结果集汇总到组中,having子句进一步限制结果集以根据条件生成数据
Groupby的含义是将数据分组,然后在组中进行函数操作
如:
selectitem,SUM(price)
fromitems_ordered
groupbyitem
--将items_ordered表按照item分组,然后分别计算各组中的item花费总和
且GROUPBY子句中出现的列,也要包含在SELECT语句中
HAVING子句对GROUPBY子句设置条件的方式与WHERE子句和SELECT语句交互的方式类似
WHERE子句搜索条件在进行分组操作之前应用
而HAVING搜索条件在进行分组操作之后应用
HAVING语法与WHERE语法类似,但HAVING可以包含聚合函数