一、SQL基础知识
1、DDL(数据定义语言)
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<基本表名>(<列明序列>);
2、DML(数据操纵语言)
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; --简单运算
select1+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 中可以使用的逻辑运算符:or、and、not、<、>、=、>=、<=、!=、<>等.
--模糊匹配,首字母未知.
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
--可更改显示列名的关键字as,as—起别名
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
4、Unicode字符串类型
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