经典SQL基础回顾

     孔子有云:温故而知新,能够为师矣。既然孔老圣人都云了,咱今天就一块儿来重温一下MS SQL吧。开篇声明一下:大部分都是基础内容,SQL很是熟练的就别浪费您的时间了,由于这年头,你们时间都挺宝贵的。可是若是您坚持看完了,确定也不会让您失望的,其中有几点很经常使用,可是也不多有人知道,但愿能对您有所帮助。因为大部分都是记的笔记,因此可能有点乱,还望见谅。      算法

      首先要链接数据库服务器,就得启动服务,关于启动服务,我介绍我所用的三种方式:数据库

      一、开始-->运行-->cmd-->NET START MSSQLSERVER;express

      二、开始-->运行-->services.msc  而后找到SQL Server服务,设置为启动;服务器

      三、经过SQL Server配置管理器启动服务。服务启动以后,就能够连数据库了。ide

       另外顺带介绍几个命令行操做数据库服务的:函数

       暂停SQL Server服务--> NET PAUSE MSSQLSERVERui

       从新启动暂停的SQL Server服务--> NET CONTINUE MSSQLSERVERspa

       中止SQL Server服务--> NET STOP MSSQLSERVER命令行

      

       一些经常使用知识:code

       select @@version 可查看数据库版本

       关于SQL 值类型须要注意的地方:

       bit经常使用来表示bool类型的变量,取值为0和1,这里0常表示false,1常表示true(约定大于熟成);

       varchar 类型不含中文,nvarchar可能含有中文,nvarchar(max)至关于无穷大,SQL中查询或者赋值时字符串须用单引号括起来;

       varchar和char(n)的区别在于char(n)不足n的部分会用空格填充,而varchar不会,这里细微的差异不少时候会形成数据不一致。

      经常使用作主键的数据类型有:int(或bigint)、uniqueidentifier。在表格中可经过设置标识列来实现自动增加,并且一个表只容许有一个标识列。SQL 2005以上的版本设置标识列的方法为:选中须要设置标识的列,而后点开标识规范,设置标识,如图-1所示。一般设置自动标识以后,插入值的时候不须要再给值,若是再给值,则会报错,这时须要咱们执行以下语句容许显示为设置为标识的列给值(设置标识以后默认是不容许给值的):set IDENTITY_INSERT 表名 on,值插入以后再经过  set IDENTITY_INSERT 表名 off语句关闭。

                                                                                                    图-1

      另外也能够经过GUID算法来生成不一样的值来做为主键,C#中也有:Guid id=Guid.newGuid();若Guid类型的主键默认值设定为new()就会自动生成。关于int类型的主键和Guid类型主键的优缺点,这里做一个简单的比较:首先int自增主键的优势是占用空间小、无序开发人员干预、易读;缺点是效率低,速度比较慢;而GUID主键的优势是效率高、数据导入导出方便;缺点是占用空间大、不易读。

     SQL语句建立表用Create Table而更新表用Update Table,删除表用Delete和Drop,注意Delete删除表中数据而Drop则删除整个表。

     通常查询的顺序是:

      select  列名 from 表名 where 条件 group by 分组依据 having 组提取条件 order by 排序依据列

      select getdate()得到当前时间,select 列名 as 别名,经过这种方式能够为列取别名(图-3) ,select count(*) 获取表中数据总条数(行数)

      SQL 中聚合函数有:max,min,avg,sum,依次是求最大,最小,平均,和

      如下举例所用到的表为简单的学生表,结构和表中的初始数据如图-2所示。

                                                                                        图-2

      查询语句中,列名自己是能够参加运算的,参考图-3的结果。order by排序的时候能够根据多列排序,asc(ascend)升序,desc(descend)降序,用法如图-3.

   

                                                                                                                    图-3

      注意:where 必须在order by 以前。单字符匹配通配符为半角下划线“_",用于匹配单个出现的字符。多字符匹配的通配符为半角百分号”%“,用于匹配任意次数出现的任意字符。SQL语句中NULL表示不知道而不是没有,表中NULL和null是有区别的,NULL表示为空。查找某项为NULL时:

       select 列名 from 表名 where 列名 is NULL而不是列名=NULL。SQL语句中也有or,and和in等关键字。

       查询的时候注意了,没有出如今Group by子句中的列是不能放到select语句后列的各列表中的(聚合函数除外,图-4例。

      解决办法是在没有出如今Group by以后的列前加聚合函数。 

      聚合函数不出如今where子句中,但可用having,它放Group by 以后,是对分组后的信息的过滤。

      top x,表示取某列中前x个,如:select top 5 ……

      distinct加于列前表示取列的不一样的值;union将两个表连在一块儿(条件是两个列相同,数据类型相同),对重复的只保留一个,若不想合并则在union后加all。

      经常使用函数:

      ABS():求绝对值;CEILING():舍入到最大整数;FLOOR():舍入到最小整数;ROUND():四舍五入----->select ROUND(2.365,2)=>2.370

      LEN():计算字符串长度  LOWER、UPPER 转小写、大写  LTRIM():去掉字符串左侧空格 RTRIM():去掉字符串右侧空格

      SUBSTRING(string,startposition,length)--------->同C#,在制定字符串中,从气势位置取指定长度的字符

      DATEADD(datepart,number,date)---------------->DATEADD(hour,3,getdate())在当前时间上加上3小时

      DATEDIFF(datepart,startdate,enddate)------>计算两个日期间的差额

      DATEPART(datepart,date)--------------------->返回一个日期的特定部分

      CAST(expression As data_type)

      Convert(data_type,expression)(以上两种方式常作类型转换用)

      isnull函数 select isnull(Sno,'暂无')as 学号 from student  从Student表中选择Sno的值做为学号,当Sno为空时则返回暂无。

      case函数用法,当对单值判断时至关于Switch case

      如:

select case  expression
when value1 then returnvalue1
whern value2 then returnvalue2
       ..............
else defaultreturnvalue
end from table
//实例
select Fname
(case Flevel
when 1 then '普通用户'
when 2 then '会员'
when 3 then 'VIP'
end )
as '客户类型' from Customer
View Code

      因为篇幅缘由,上篇到此告一段落。总的来讲上篇基本上都是些较基本,但也很常见的零零散散的知识。下篇将从索引,模糊匹配,精确匹配,自链接以及外链接,试图,存储过程,事务这几个方面来总结,敬请期待!

相关文章
相关标签/搜索