一、SQL基础知识

1DDL(数据定义语言)

1)创建数据表

--创建数据表

createtable Test(Id intnotnull, Age char(20))


--创建数据表

createtable T_Person1(Id intnotnull,

                       Name nvarchar(50),

                       Age intnull)

--创建表,添加外键

Createtable T_Students(

   StudentNo char(4),

   CourseNo char(4),

   Score int,

Primarykey(StudentNo),

Foreignkey(CourseNo)References T_Course(CourseNo)

);


2)修改表结构

--修改表结构,添加字段

Altertable T_Person add NickName nvarchar(50)null;


--修改表结构,删除字段

Altertable T_Person Drop NickName;


3)删除数据表

--删除数据表

Droptable T_Person;


--删除数据表

droptable test

4)创建索引

Create[Unique]Index<索引名>on<基本表名>(<列明序列>);


2DML(数据操纵语言)

1)插入语句

insertinto T_Person1(Id,Name,Age)values(1,'Vicky',20)

--插入一条据数,字段和值必须前后对应

insertinto T_Preson1(Id,Name,Age)values(2,'Tom',19)

insertinto T_Person1(Id,Name,Age)values(4,'Jim',19)

insertinto T_Person1(Id,Name,Age)values(5,'Green',20)

insertinto T_Person1(Id,Name,Age)values(6,'Han×××',21)

insertinto T_Person1(Id,Name,Age)values(7,'Lilei',22)

insertinto T_Person1(Id,Name,Age)values(8,'Sky',23)


insertinto T_Person1(Id,Name,Age)values(newid(),'Tom',19)


2)更新语句

--修改列,把所有的age字段改为30

update T_Person1 set age=30


--把所有的Age字段和Name字段设置为...

update T_Person1 set Age=50,Name='Lucy'


update T_Person1 set Name='Frankie'where Age=30


update T_Person1 set Name=N'中文字符'where Age=20

--中文字符前面最好加上N,以防出现乱码


update T_Person1 set Name=N'成年人'where Age=30or Age=50


3)删除语句

deletefrom T_Person1

--删除表中全部数据


deletefrom T_Person1 where Name='Tom'

--根据条件删除数据


4)查询语句

查询语句非常强大,几乎可以查任意东西!

-----------------

---- 数据检索 -----

-----------------

--查询不与任何表关联的数据.

SELECT1+1; --简单运算
select
1+2as
结果


SELECTnewid();--查询一个GUID字符创


selectGETDATE()as日期--查询日期


--可以查询SQLServer版本

select @@VERSION as SQLServer版本


--一次查询多个

select1+1结果,GETDATE()as日期, @@VERSION as版本,NEWID()as编号


--简单的数据查询.HelloWorld级别

SELECT*FROM T_Employee;


--只查询需要的列.

SELECT FNumber FROM T_Employee;


--给列取别名.As关键字

SELECT FNumber AS编号, FName AS姓名FROM T_Employee;


--使用 WHERE 查询符合条件的记录.

SELECT FName FROM T_Employee WHERE FSalary<5000;


--对表记录进行排序,默认排序规则是ASC

SELECT*FROM T_Employee ORDERBY FAge ASC,FSalary DESC;


--ORDER BY 子句要放在 WHERE 子句之后.

SELECT*FROM T_Employee WHERE FAge>23ORDERBY FAge DESC,FSalary DESC;


--WHERE 中可以使用的逻辑运算符:orandnot<>=>=<=!=<>.


--模糊匹配,首字母未知.

SELECT*FROM T_Employee WHERE FName LIKE'_arry';


--模糊匹配,前后多个字符未知.

SELECT*FROM T_Employee WHERE FName LIKE'%n%';


--NULL 表示"不知道",有 NULL 参与的运算结果一般都为 NULL.


--查询数据是否为 NULL,不能用 = != <>,要用IS关键字

SELECT*FROM T_Employee WHERE FName ISNULL;

SELECT*FROM T_Employee WHERE FName ISNOTNULL;


--查询在某个范围内的数据,IN 表示包含于,IN后面是一个集合

SELECT*FROM T_Employee WHERE FAge IN(23,25,28);


--下面两条查询语句等价。

SELECT*FROM T_Employee WHERE FAge>=23AND FAge<=30;

SELECT*FROM T_Employee WHERE FAge BETWEEN23AND30;


----创建一张Employee表,以下几个Demo中会用的这张表中的数据

----SQL管理器中执行下面的SQL语句,在T_Employee表中进行练习

createtable T_Employee(FNumber varchar(20),

                       FName varchar(20),

                       FAge int,

                       FSalary Numeric(10,2),

primarykey(FNumber)

)


insertinto T_Employee(FNumber,FName,FAge,FSalary)values('DEV001','Tom',25,8300)

insertinto T_Employee(FNumber,FName,FAge,FSalary)values('DEV002','Jerry',28,2300.83)

insertinto T_Employee(FNumber,FName,FAge,FSalary)values('SALES001','Lucy',25,5000)

insertinto T_Employee(FNumber,FName,FAge,FSalary)values('SALES002','Lily',25,6200)

insertinto T_Employee(FNumber,FName,FAge,FSalary)values('SALES003','Vicky',25,1200)

insertinto T_Employee(FNumber,FName,FAge,FSalary)values('HR001','James',23,2200.88)

insertinto T_Employee(FNumber,FName,FAge,FSalary)values('HR002','Tom',25,5100.36)

insertinto T_Employee(FNumber,FName,FAge,FSalary)values('IT001','Tom',28,3900)

insertinto T_Employee(FNumber,FAge,FSalary)values('IT002',25,3800)


--开始对T_Employee表进行各种操作

--检索所有字段

select*from T_Employee


--只检索特定字段

select FName,FAge from T_Employee


--带过滤条件的检索

select*from T_Employee

where FSalary<5000


--可更改显示列名的关键字asas—起别名

select FName as姓名,FAge as年龄,FSalary as薪水from T_Employee


二、SQLServer 中的数据类型

1精确数字类型

   bigint

int

smallint

   tinyint

bit

   money

   smallmoney

2字符型数据类型MS建议用VarChar(max)代替Text

Char

VarChar

   Text

3近似数字类型

Decimal

Numeric

Real

Float

4Unicode字符串类型

Nchar

   NvarChar

   Ntext

5二进制数据类型,MS建议VarBinary(Max)代替Image数据类型,max=231-1

Binary(n)存储固定长度的二进制数据

   VarBinary(n)存储可变长度的二进制数据,范围在n~(1,8000)

   Image  存储图像信息

6日期和时间类型,数据范围不同,精确地不同

   DateTime

   SmallDateTime

7特殊用途数据类型

Cursor

Sql-variant

Table

TimeStamp

   UniqueIdentifier

   XML


三、SQL中的内置函数


--------------------------------------

-----       数据汇总-聚合函数   ---------

--------------------------------------

--查询T_Employee表中数据条数

selectCOUNT(*)from T_Employee


--查询工资最高的人

selectMAX(FSalary)as Top1 from T_Employee


--查询工资最低的人

selectMin(FSalary)as Bottom1 from T_Employee


--查询工资的平均水平

selectAvg(FSalary)as平均水平from T_Employee


--所有工资的和

selectSUM(FSalary)as总工资from T_Employee


--查询工资大于5K的员工总数

selectCOUNT(*)as total from T_Employee

where FSalary>5000