SQL基础入门

   

l      数据库简单认识

l      主键外键

l      基本SQL语句

l      数据检索

l      聚合函数,数字函数

l      Case函数

l      索引和子查询

                 

1.数据库

概念:按照数据结构来组织、存储和管理数据的仓库。    英文:Database

数据库管理系统:用于管理数据库的系统。

英文:DataBase Management System

2.除了某些文件型数据库,大部分数据库都需要连接服务器才能运行。

3.Catclog 分类  Table   Column

Field 字段

4.主键  数据行的唯一标识,不会重复的列才能当主键。

 选择:

业务主键      有意义的字段(如身份证号等)

逻辑主键      没意义的字段(纯属为了标号)

一般设置逻辑主键,主键不能被使用者看到。

数据类型标注(MAX)的不能设为主键。

SQL中常用的主键数据类型:int(bigint)uniqueidentifierGuid,全局唯一标示符,从来不会产生相同的标示符,不能设置为标识列

主键名统一叫id.

Int类型主键可以设置自增主键:

 

设置为自增主键的字段被称为标识列,每个表只能有一个标识列。

Int自增主键用insert语句添加时可以不指定主键。

Guid需要。例如:

insertinto newtable1(name,age)values('王明',21)

insertinto table_1(id,name,age)values(newid(),'王明',21)

SQLserver用于生成Guid的函数:newid()

SQL语句中设置主键的方法:

在类型设置后加上:primary key(主键名)

createtable table_2(iduniqueidentifier,namenvarchar(50),ageint,primarykey(id))

C#中生成Guid的方法:Guid.NewGuid();返回类型为Guid类型

           Guid id =Guid.NewGuid();

           Console.WriteLine(id);

两种数据类型作为主键的比较:

主键数据类型

占用空间

开发人员干预

可读性

效率

Int自增字段

不需要

易读

数据导入导出慢

Guid

需要

不易读

数据导入导出方便

推荐使用Guid作为主键。

 

5.外键:跟主键不在同一表中,指向主键。 ForeignKey

6.数据类型(只写C#中没的)

 bit   SQLserver中只有01两种选择,对应到数据库的值中为truefalse.

 nvarchar(50)

 nvarchar(MAX)    unicode类型字符,()内为长度,MAX表明自设最大长度(<255

 varchar(50)

varchar(MAX)       char类型字符(阿斯科码表)

+++varchar()与char()的比较+++

char(等效长度)类型数据字符串后面会被加上多余的空格以达到等效长度。

Varchar()字符串后面的不会有多余空格。

例如:

 

注意存储数据时,最好用varchar ,防止存储上多余的空格。

7.SQL语句

  DBMS中用到的语句。不同的DBMS通用。

  SQL语句中字符串用引号引起来。

  SQL语句的关键字大小写不敏感,但是字符串中的数据大小写敏感。

  SQL语句可以创建,修改,删除表。

例如:

createtable newtable(idint,namenvarchar(max),weightint,ageint) 创建表

droptable newtable           删除表

insertinto newtable(id,name,age)values(1,'王明',21)          修改表

SQL语句分为两类:

DDL  数据定义语句

Create table    drop table  ,   alter table(修改删除字段或列)

DML  数据操作语句

Insert into(插入) , select , update ,delete

更新一个列:

update table_1setname=N'王明'

更新多个列:

update table_1setname=N'王明',age=50      //加上N保证输入中文等unicode字符不出错

update table_1setname=N'刘忻'where age=55   where设定条件

SQL中的等于判断用单个=

其他判断符:and ,or, not ,<>(相当于!=)

Delete  删除数据不同于drop只删除数据不删除表加上where设定条件后可以只删除部分数据。

执行SQL语句delete from table_1 where age=55   

8数据检索

1)      Select * from表名    检索所有数据

     select*from table_1

 2Select 字段名 from表名       检索某一个,或多个字段

   selectnamefrom table_1

    selectname,agefrom table_1

3可以加上where设定条件

     selectname,agefrom table_1where age=22   

4字段名 as别名    可以给字段改名(仅限检索结果,表中并未改变)

      selectnameas姓名,ageas年龄from table_1

      selectnameas姓名,ageas年龄from table_1where age=22andname!='柳树'

5)聚合函数

    selectmax(age)from table_1      查询最大年龄

    selectmin(age)from table_1      查询最小年龄

    selectmax(age),min(age)from table_1  查询最大最小年龄

    selectavg(age)from table_1       查询平均年龄

    selectsum(age)from table_1      查询年龄之和

    selectcount(*)from table_1       查询个数()中必须有一个参数

    selectcount(*)from table_1wherename='柳树' 按条件查询

6)检索与表不相干的数据

    

select'姓名',name,'年龄',agefrom table_1 orderby agedesc

 

7)按条件排列

  order by字段 asc   按字段的值从小到大排列

  order by字段 desc  按字段的值从大到小排列

select*from table_1orderby age asc,weightdesc     先按age的升序排,后按weight的降序排

    如果语句中有where设定条件,排序要写在它后面

    select*from table_1 where age!=22orderby ageasc,nameasc

8)通配符过滤

  Like _字符’ 单字符匹配,_上是只差的一个字符就是完整字段(不常用)

  Like  ‘%字符%’   多字符匹配 

select*from table_1 where idlike'A344%'    A344开头

 select*from table_1 where idlike'%90c'     90c结尾

select*from table_1 where idlike'%44%'     包含44

9)数据库中的null

数据库中的null表示不知道(空值,无类型)

SQL语句中用 is null  is not null来判断是否为空值

10)检索某些值和检索范围值

select*from table_1  where weight in(11,99)         检索weight1199的数据

select*from table_1 where weightbetween 11and 99 检索weight1199的数据

11)数据分组

Group By  

Group By子句必须放在where语句之后 

Group by字段按字段1分组 

select age,count(*)from table_1 groupby age

检索的项必须包含在分组中或者聚合函数中,聚合函数不能出现在where子句中,用having,在group之后,但是having的设定条件必须是检索项。

select age,count(*)from table_1 groupby agehaving age>22  //不能是having name !=N’柳树

取出年龄大于22的分组,按年龄不同分组标出每组的个数

12)限制检索

Select top数字 * from表名

selecttop 3*from table_1 orderby agedesc    取按照年龄降序排列前三名

selecttop 3*from table_1

where agenotin(selecttop 3 agefrom table_1orderby agedesc)

orderby agedesc              //嵌套检索,取出年龄降序后第4-6

检索后:

13)向表中加入列

  Alter table表名 add 列名列名数据类型

 alter table table_1add classnumber int

altertable table_1add nicknamenvarchar(MAX)

加入信息:

update table_1set classnumber=408,nickname=N'北京的云'where age=22   更新和插入insert有区别,更新会取代原来的数据,插入会加入新数据

14)检索不重复信息

   Distinct   其后字段有一个不同就会被检索.

  selectdistinct age,name,nicknamefrom table_1

取出年龄,姓名,昵称中有一个不同的信息

15)联合结果集

  Union    用于连接两个检索结果,两个检索字段数必须相同,对应位置上的类型必须兼容。

  

selectname,agefrom table_1

union

selectname,agefrom table_2

只有检索字段中不相同的内容才会被检索出来,如果两表中检索内容都相同,只会出现一个。

 Union all   检索内容重复也会被列为结果。

selectname,weightfrom table_1

union all

select'平均体重',avg(weight)from table_1

 union比较:

 

 

 

Union除了不会列出重复结果,还会打乱检索顺序,所以一般都用union all

16)数字函数

Abs()   求绝对值

Ceiling() 舍入到最到整数。

selectceiling(-3.4)   -3

selectceiling(2.8)    3

selectceiling(2.2)   3

selectceiling(-3.8)    -3

Floor()     舍入到最小整数。

selectfloor(-3.8)    -4

selectfloor(2.8)     2

2selectfloor(2.2)     2

selectfloor(-3.1)     -4

Round(数字,小数点后保留位数)四舍五入

selectround(2.1,0)   2

selectround(2.5,0)   3

selectround(-3.4,0)  -3

selectround(-3.8,0)  -4

17)字符串函数

Len( )   求字段长度(字段后边长度不计)

selectlen(2.5)           3

selectlen('abc')          3

selectlen('abc  ')      3

selectlen(null)          null

selectlen(newid())       36

Ltrim()  去掉左边空格

Rtrim()  去掉右边空格

Ltrim(rtrim(字段))        去掉两边空格

Substring(字段,起始截取位置,截取长度)

selectsubstring('abcdefg',0,3)     ab    从零截取只有两位

selectlen(substring('abcdefg',0,3))   2  

selectsubstring('abcdefg',1,3)     abc   注意SQL中字符下标从1开始

getdate()  获取当前时间

Dateadd(datepart, number,date)  date为日期,number为增量,datepart为要增加的部分,可以是年,月,日,小时,分,秒

 

Datediff(datepart,startdate,enddate) 计算两个日期时间差

Datepart(datepart,date)返回时间一部分,返回年,月,日,等

select'当前时间和三天前此时差多少小时',datediff(hour,getdate(),dateadd(day,-3,getdate()))

 

 

汉字不能直接连接到SQL语句中。

根据入职年数查询人数和根据入职时间查询人数

 

18)类型转换函数

  Cast(字段 as 类型)

  Convert(类型,字段)

 

19)空值处理函数

  Isnull(待判断字段,取代值)

如果待判断字段不为null则返回其值,如果为null则返回取代值。

selectisnull(weight,0)from table_1       如果体重为空(null)则用0代替

selectisnull(name,'匿名')from table_1     如果姓名为空(null)则用匿名代替

 

20)case函数

相当于C#switchifelse的结合

语法:

抓取值判断:

     Case(字段)

     When 1then 返回结果1

     When 1then 返回结果2

     When 1then 返回结果3

      Else  返回其他结果

      End

抓取条件判断:

      Case

     When 条件1then 返回结果1

     When 条件2then 返回结果2

     When 条件3then 返回结果3

      Else  返回其他结果

      End

 

联合聚合函数示例:

 

21)索引

 在经常检索的字段上创建索引,提高检索效率。

虽然索引能提高检索效率,但索引也占据空间,而且添加,更新,删除数据时也需要同步更新索引,因此会降低insertupdatedelete的速度。

22)表连接join

 Inner join   ,  left join ,   right join

语法:

Select 字段(必须明确)from

1  join 2 on 1.=2.    列中有相同内容  

例如下表1记录了一些人的姓名和他们的体重等信息,表2记录了这些人中个别人的年龄,这时,姓名可以作为连接输出不同的内容。

As 可以省略。

可以在连接的基础上设定where条件。

23)子查询

将一个查询语句作为一个结果集供其他SQL语句使用。

语法: select查询内容 from(select语句) as别名

括号内的查询语句必须有别名才能使用

 

单值子查询:只有返回一行一列(就是一个数)的子查询才能被当成单值子查询。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值