黑马程序员_Sql语句基础

来源:互联网 发布:华云数据与中昌数据 编辑:程序博客网 时间:2024/05/19 19:39

                               ------- ASP.Net+Unity开发.Net培训、期待与您交流! -------

1、  Sql语句的注意事项:

(1)、Sql语句中的关键字可以大小写不敏感,但是除了关键字以外,其他语句是大小写敏感的,例如SELECT * from table1同select * from table1,因为select是关键字。但是select * from table1却不同于select* from TABLE1,这两个语句查询的是不同表中的数据。

(2)、数据库中常用的数据类型有:字符串数据类型、时间数据类型和数字数据类型。其中字符串数据类型和时间数据类型在使用时要用单引号包括在内。

(3)、创建和删除表不仅可以在Sql Server中手工完成,还可以执行Sql语句完成。用Sql语句创建和删除表在自动化部署、数据导入中应用很广泛。

(4)、Sql语句中出现中文时,前边加一个N,不容易出错。例如:select * from table1 where name=N’张晓明’

2、Sql语句的类型:

Sql语句分为数据定义语言(DDL)和数据操作语言(DML)。DDL是对数据表的创建、修改和删除(createa/alter/drop table),DML是对数据的增删查改(insert/delete/select/update)。

3、  Sql Server中常用的两种主键类型:

(1)、int(或bigint)类型+标识列,即自动增长字段。优点:占用空间小,无需开发人员干预,易读。缺点:操作的时候效率低,导入导出时比较麻烦

(2)、uniqueidentifier类型,也叫GUID类型(globalunique identifier):全球唯一标识符。GUID算法是产生唯一标识符的高效算法,使用MAC网卡、ip地址、纳秒级时间、芯片的IO码等算出来,永远不会重复。在Sql Server中用内置函数newid()获取GUID。优点:效率高,导入导出时方便。缺点:占用空间大,不易读。

注:业界主流倾向使用GUID。

4、  聚合函数

Sql中常用的聚合函数有:max()最大、min()最小、sum()求和、avg()求平均值、count()总数。

5、   数据排序:用order by (升序为ASC,降序为DESC,默认为ASC,可以不写)

注意:orderby语句一定要写在where语句后面,例:select * fom table1 where age>18 order byage,意义为:将数据查询出来,where语句过滤掉不符合条件的数据,将剩下的数据按照age进行升序排序(默认为升序)。

6、  通配符过滤,即模糊匹配,用关键字like

单字符通配符:半角下划线”_”,匹配单个出现的字符。

多字符通配符:半角百分号”%”,匹配零或多个出现的字符。

例子:select* from table1 where name like ‘_晓明’(查找名字叫“晓明”的数据)。

      Select * from table1 wherename like ‘%家%’(查找名字中有“家”字的数据)。

7、  空值处理(Null)

数据库中的Null表示“不知道”,Null的任何运算都是Null,例如:select 1+Null,结果为Null。也不能用“=“查找Null值,例如:select* from table1 where name=Null,根本就查找不出name为Null的数据。正确的查询语句为:select * from table1 where name is Null,要用is关键字。

8、  多值匹配(in和between…and…)

当Sql语句中出现多个限制条件时,要用多个and写出条件,例如:select * from table1 where

age=12 and age=18 and age=20 and ag=29,这时候就可以用in来简化语句的书写,select * from table1 where agein(12,18,20,29)。如果条件为某个范围,还可以用between…and..来写,select * from table1 where age between 12 and29。

9、  数据分组(group by)

(1)、没有出现在group by后面的列是不能出现在select语句后的列名列表中的(除聚合函数外),错误:selectname,age from table1 group by age,

 正确:selectage,count(*) from table1 group by age

(2)、group by语句必须放在where语句之后(和order类似,按条件查询后再分组)

10、having语句

聚合函数不能出现在where语句中,要使用聚合函数的结果来作为查询条件,就要用having语句,having语句要放在groupby语句之后。例:

select age,count(*) from table1 group by age having count(*)>1

注意:having不能使用未分组的参数,having不能代替where,having是对分组后信息的过滤,能用的列只限于select中出现的列。

11、限制结果集行数(top关键字)

例:selecttop 3 * from table1 order by salary DESC,只查询表中的前3行数据。和子查询相结合可以实现Sql语句分页,提高分页的效率。

12、抑制重复数据,(distinct关键字)

例:selectdistinct * from table1,如果有重复的行,则只显示一行, 其他重复行不显示。

13、联合结果集(union关键字)

Union关键字用来联合两个或多个表的数据,例子:

Select name,age from table1

Union

Select name,age from table2

Union使用的条件:

(1)、两个select语句中的列要相同(数量相同、数据类型相同或兼容),数量不同可以补足相同类型的任意数据。

(2)、union默认会合并重复的数据(效果同distinct),如果不想合并,可以在union后加all,一般如果不想合并重复的话,要养成在union后面加all的习惯。

14、数据库中的内置函数(Sql Server)

(1)数字函数

 ABS():求绝对值函数

Celing():舍入到最大整数,如分页计算总页数,用到了这个函数

floor():舍入到最小整数

round(number,int):四舍五入(舍入到离我半径最近的数),number为要处理的数,int为精度

(2)、字符串函数

Len():获取字符串的长度

Lower():转化为小写字母

Upper():转化为大写字母

LTRrim():去掉左空格

RTRim():去掉右空格

Substring(string,starr_position,length):取子字符串

(3)、日期函数

Getdate():获取当前如期

Dateadd(datepart,number,date):计算增加以后的日期

Datediff(datepart,startdate,enddate):计算两个日期的差值

Datepart(datepart,date):返回一个日期的特定部分

参数中的datepart为日期的计算单位,可选值为:year、quarter、month、week、day、hour、second、millisecond等

(4)、类型转换函数

Sql Server中有两个类型转换函数:convert()函数和cast()函数

Cast(expressionas date_type)   

Convert(date_type,expression,datestyle),其中datestyle参数为可选参数,可以没有

其中:expression:待转换表达式;date_type:数据类型;datestyle:将字符串数据类型转换为时间类型的时候,时间数据类型的样式。

(5)、空值处理函数

Isnull(expression,value),此函数的用法为:当expression不为空,则返回expression的值;如果expression为空,则返回value。

(6)、case函数

用法一:

Caseexpression

Whenvalue1 then returnvalue1

Whenvalue2 then returnvalue2

……..

Elsedefaultreturnvalue

End

用法二:

Case

Whenexpression条件 then returnvalue1

Whenexpression条件 then returnvalue2

…….

Elsedefaultreturnvalue

End

15、索引(index)

对于经常要进行查询的列,可以建立索引,这样在where语句中按照索引列进行查询,就会大大提高查询的效率,这是索引的优点。缺点是a、要为索引列建立存储目录,需要额外的存储空间。b:对索引列进行插入、更新和删除操作时需要同步更新目录,降低插入、更新和删除操作的效率。

16、表连接(用join关键字,也可不用join)

当要查询的数据不在一个表中,而分布在其他两个或多个表中时,而且其他表中数据与此表数据有外键关系,则需要进行表连接进行查询。表连接就是在一个select语句中完成从多个表中查询和处理数据。

例:select * from table1 as t1 jointable2 as t2 on t1.name=t2.name

17、子查询

将一个查询语句作为一个结果集供其他Sql语句使用,就像使用其他普通的表一样,被当作结果集的查询语句被称为子查询。所有可以使用普通表的地方都可以使用子查询来代替。

例:select * from (select * fromtable1 where age>18 as table2

按照子查询返回的值,可以将子查询分为单值子查询和多行单列子查询

(1)、单值子查询:返回一行一列的子查询,可作为外围查询的列

(2)、多行单列子查询:结果集其实是一个集合,这样的子查询往往是只查询一列的数据。 

                                    ------- ASP.Net+Unity开发.Net培训、期待与您交流! -------