第二章 数据操作语句
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='计算机系'
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')
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降序
聚合函数(统计函数):
不能出现在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之后。
插入数据:
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 |
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] |
[^] | 不匹配[]中的任意一个字符 |
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(<列名>) | 最小值 |
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之后。
相关文章推荐
- jQuery原型方法init的详解
- iOS - 设置Iconfont文字“图标”
- Android Studio 快捷键引包失效问题解决办法
- [学习笔记]C#中使用EmguCv时出现的 “Emgu.CV.CvInvoke”的类型初始值设定项引发异常
- 第一章 数据库语言基础
- OrmLite学习备份
- 线程池与Thread
- 数据科学家能力发展路线图
- java项目开发如何自制java打补丁工具
- java项目开发如何自制java打补丁工具
- 完美长方体是不可能存在的 第二章
- CG和免费的资源
- Currency Exchange_poj1860
- WebViewJavascriptBridge 实现js和java的交互
- 提高你的Python: 解释yield’和Generators(生成器)
- Android四大组件之Activity
- iOS项目上传到AppStore步骤流程
- 团队项目——编写项目的Spec
- Java 全角字符转半角字符
- jquery筛选器