第二章 数据操作语句

第四章 数据操作语句

 

插入数据:

INSERT [INTO]table_Name [<列名>……] VALUES <值列表>……

例:

INSERT INTOdbo.student(Sno,Sname,Ssex,Sage,Sdept) VALUES

('9512203','王敏','女','20','计算机系')--按列名顺序插入一行数据

INSERT INTOdbo.student VALUES ('9521101','张力','男','信息系','22')--按默认列顺序插入一行数据

 

INSERT INTOdbo.student(Sno,Sname,Ssex,Sage,Sdept) VALUES

('9521102','吴斌','男','21','信息系'),

('9521103','张海','男','20','信息系')--插入多行数据

INSERT INTOdbo.student(Sno,Sname,Ssex,Sage,Sdept)

SELECT '9531101','钱小平','女','18','数学系'

UNION SELECT'9531102','王大力','男','19','数学系'--插入多行数据

(插入数据必须一行一行进行,不能一列一列插入,并且必须插入主键)、

 

更新数据:

UPDATE <表名> SET <列名>=表达式(新值)[……] 

[WHERE <条件>]

例:

用子查询实现:

UPDATE SCSET Grade=Grade+5

WHERE SnoIN

(SELECT SnoFROM Student

WHERE Sdept=计算机系)

用多表连接实现:

UPDATE SCSET Grade=Grade+5

FROM SCJOIN student ON SC.Sno=student.Sno –-将两个表连起来

WHERE Sdept= '计算机系'

 

删除数据:

DELETE FROM <表名>  [删除条件]

 

查询语句:

SELECT <目标列名> FROM <数据源>

WHERE <条件>

GROUP BY <分组依据>

HAVING <组提取条件>

ORDER BY <排序依据>

单表查询:

SELECT Sno,Sname FROM  dbo.student --列名不用加括号

SELECT SNAME,2016-SAGE FROM dbo.student –-2016-SAGE 无列名

SELECT SNAME,'出生年月',2016-SAGE FROM dbo.student 设置常量列

SELECT SNAMEAS 姓名,常量列='出生年月',2016-sage 年份 FROM dbo.student

--设置列别名

SELECT DISTINCTSNO FROM dbo.SC --DISTINCT 去掉重复行

SELECT SnameFROM dbo.student WHERE Sdept='计算机系'

 

 

查询条件

谓词

比较

<、>、<=、>=、=、<>(!=)、(NOT+ 比较运算符)

确定范围

BETWEEN AND、NOT BETWEEN AND

确定集合

IN,NOT IN

字符匹配

LIKE,NOT LIKE

空值

IS NULL,IS NOT NULL

多重条件

AND,OR,NOT (取反(效率低)) AND的优先级高于OR

 

SELECT Sname,Sage FROM dbo.student WHERE Sage>20

SELECT Sname,Sdept,Sage FROM dbo.student WHERE Sage BETWEEN 20 AND 23

SELECT Sname,Sdept,Sage FROM dbo.student WHERE Sage NOT IN('20','21','22','23')

 

_

任意一个字符

%

任意0或多个字符

[]

匹配[]中的任意一个字符,例[abcd]

[^]

不匹配[]中的任意一个字符

 

SELECT Sname,Sdept,Sage FROM dbo.student WHERE Sname LIKE '[张王李]%' -- % 放在后面

SELECT Sname,Sdept,Sage FROM dbo.student WHERE Sname LIKE '_[大小]%' -- 如果没有_,结果为大??,小?;如果没有%,结果为?大,??小

SELECT SageFROM dbo.student WHERE RTRIM(Sname) LIKE '王__' --去掉数据中自动添加的空格

SELECT Sno,Grade FROM dbo.SC WHERE Grade IS NOT NULL

排序:

ORDER BY <列名> ASC|DESC

SELECT Grade,Sage,Sname FROM dbo.SC JOIN dbo.student ON SC.Sno=student.Sno ORDER BY Grade,Sage DESC  --排序,ASC升序,DESC降序

聚合函数(统计函数):

COUNT(*)

求表中元组个数

COUNT(DISTINCT <列名>)

求列中非空值数量

SUM(<列名>)

求列值总和

AVG(<列名>)

求平均

MAX(<列名>)

最大值

MIN(<列名>)

最小值

不能出现在WHERE中!!!

SELECT COUNT(*)选课数量 ,COUNT(Grade) 考试门数,MAX(Grade) 最高分,MIN(Grade) 最低分 FROM dbo.SC WHERE Sno='9512101'

 

分组统计:细化统计函数的作用对象。查询列表中的每个列要么是分组依据列,要么是统计函数列;

SELECT Sno,COUNT(Cno),AVG(Grade) FROM SC GROUP BY Sno --单分组条件

SELECT Sdept,Ssex,COUNT(*) FROM dbo.student GROUP BY Sdept,Ssex --多分组条件

SELECT Sdept,Ssex,COUNT(*) FROM dbo.student GROUP BY Sdept,Ssex HAVING COUNT(*)<2 --使用HAVING 语句进行筛选

WHERE 语句用于分组前对所有数据进行筛选,不用使用统计函数,HAVING语句用于分组后对分组数据进行筛选,可以使用统计函数;

多表连接:

内连接:

SELECT CO.Cno,Grade FROM dbo.Course AS CO INNER JOIN dbo.SC AS SC ON CO.Cno=SC.Cno WHERE Sno='9512101' --内连接

自连接:必须使用别名将同一张表区分成两张表,注意哪个是查询条件表,哪个是查询结果表。

SELECT Sname,Sdept FROM dbo.student WHERE Sdept=(SELECT Sdept FROM dbo.student WHERE Sname='李晨')

SELECT T2.Sname,T2.Sdept FROM dbo.student T1 JOIN dbo.student T2 ON T1.Sdept=T2.Sdept WHERE T1.Sname='李晨' --自连接

外连接:

 

SELECT CnameFROM dbo.Course CO LEFT OUTER JOIN dbo.SC SC ON CO.Cno=SC.Cno WHERE SC.Grade IS NULL --左外连接

SELECT Cname,Sno FROM Student.dbo.SC RIGHT OUTER JOIN STUDENT.DBO.Course ON Course.Cno=SC.Cno WHERE Sno IS NULL—右外连接

左外连接要求T2必须满足连接条件,T1可以不满足;(T1中的数据在T2中可以找不到对象,即T2中可以没有对应的数据)

ALTER VIEWdbo.V_Inventory2

AS

SELECT INV.cInvCode,INV.cInvName,INV.cInvStd,inv.dSDate,COM.cComUnitName,INVC.cInvCCode,INVC.cInvCName,INVC.iInvCGrade FROM UFDATA_001_2016.dbo.Inventory INV  JOIN (可以使用RIGHT OUTER JOIN)UFDATA_001_2016.dbo.ComputationUnit COMON INV.cComUnitCode=COM.cComunitCode

RIGHT OUTERJOIN  UFDATA_001_2016.dbo.InventoryClass INVC ON INV.cInvCCode=INVC.cInvCCode

INNER JOIN UFDATA_100_2016.dbo.InventoryClass INVCLASSON INVCLASS.cInvCCode IN(SELECT SUBSTRING(cInvCCode,1,2)FROM UFDATA_100_2016.dbo.Inventory)

使用外连接进行多表联查:你希望他的某一列数据都出现的那个表,用RIGHT时放在最后一个表,用LEFT时放在第一个表,其他的表连接使用JOIN 即可

右外连接正相反;

截取字符串:

SUBSTRING(字段,startindex,length)startindex从1开始

TOP限制结果集:‘

TOP N [PERCENT][WITH TIES]

WITH TIES:表示包括并列结果。(必须与ORDER BY排序一起使用 )

如果使用DISTINCT 则要放在DISTINCT之后。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值