您的位置:首页 > 其它

第二章 数据操作语句

2016-05-04 18:01 369 查看
第四章 数据操作语句

插入数据:
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之后。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: