SQL语句总结由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“sql语句总结”。
SQL语句总结
一、插入记录
1. 插入固定的数值
语法:
INSERT[INTO]表名[(字段列表)]VALUES(值列表)
示例1:
Insert into Students values('Mary’,24,’mary@163.com’)
若没有指定给Student表的哪些字段插入数据:表示给该表的所有字段插入数据,根据数据的个数,可以得知Students表中一共有3个字段表中有4个字段,其中一个字段是标识列。
示例2:
Insert into Students(Sname,Sage)values(‘Mary’,24)
指定给表中的Sname,Sage两个字段插入数据。注意事项:
1)该命令运行一次向表中插入1条记录。无法实现向已存在的某记录中插入一个数据
2)如果不指定给哪些字段插入数值,则应注意值列表的值个数
3)插入数据时,注意值的数据类型要与对应的字段数据类型匹配
4)插入数据时,如果没有给值的字段必须保证允许其为空
5)插入数据时,要注意字段中的一些约束
2. 插入的记录集为一个查询结果
语法:
INSERTINTO表名[(字段列表)]SELECT 字段列表 FROM表WHERE条件 示例1:
InsertintoTeacherselectSname,Sage,SemailfromStudent
从Student表中查询三个字段的全部记录,插入Teacher表,没有指定Teacher表的具体字段,表示给Teacher表的全部字段插入数值
示例2:
InsertintoTeacherselectSname,Sage,SemailfromStudentwhereSage>25
从Student表中查询三个字段的部分记录,插入Teacher表
示例3:
InsertintoTeacher(tid,tname)selectSname , SagefromStudent 从Student表中查询两个字段的全部记录,插入到Teacher表中的tid,tname字段 注意事项:
查询表的字段要和插入表的字段数据类型一一对应
3. 生成表查询
语法:
SELECT字段列表INTO新表名FROM原表WHERE条件
示例1:
SelectSname,Sage,SemailintonewStudentfrom Studentwhere Sage
共6页当前第1页
示例2:
Select Sname,Sage,SemailintonewStudentfromStudentwhere 1=2
利用Student表的表结构生成新表newStudent,newStudent表中记录为空
注意事项:
执行该语句时,确保数据库中不存在into关键字后面的指定的表名
二、删除记录
1)删除满足条件的记录
语法:
DELETEFROM表名WHERE条件
示例1:
DeletefromStudentwhereSage
从Student表中删除年龄小于20岁的学生的记录
示例2:
DeletefromStudent
没有设置条件,删除Student表的全部记录
2)删除表的全部记录
语法:
TRUNCATETABLE表名
示例:
TruncatetableStudent
删除表Student中的全部记录,约束依然存在三、修改记录
语法:
UPDATE表名SET字段=新值WHERE条件
示例1:
UpdateStudentsetSemail=’Email’+SemailwhereSemailisnotnull
把有email的学员的email地址变为原先的地址前加上‘Email’字符串
示例2:
UpdateStudentsetSage=Sage+1
把所有记录的Sage变为原先的值加1,例如过一年学生要长一岁
四、查询记录
1. 基本查询
语法:
SELECT字段列表FROM表
示例1:
SelectsName,sAge,sEmailfromStudents
从Students表中查询3个字段的所有的记录
示例2:
Select*fromStudents
从Students表中查询所有字段的所有的记录(字段列表位置写*代表查询表中所有字段)
2. 带WHERE子句的查询
语法:
SELECT字段列表FROM表WHERE条件
示例1:
SelectSNamefromStudentswhereSage>23
查询Students表中年龄大于23的学员的姓名
3. 应用别名
语法1:
SELECT字段列表AS别名„„
示例1:
SelectSNameas学员姓名,sAgeas学员年龄fromStudents
将查询的两个字段分别用中文别名显示
语法2:
SELECT别名=字段„„
示例2:
Select学员姓名=sName, 学员年龄=sAgefromStudents
注意事项:
别名可以是英文,也可以是中文,别名可以用单引号引起,也可以不引
4. 使用常量(利用‘+’连接字段和常量)
示例:
SelectsName+’的年龄是’+convert(varchar(2),sAge)as 学员信息
from Students
从Students表中查询,将学员的姓名和年龄信息与一个常量连接起来,显示为一个字段,该字段以“学员信息”为别名
5. 限制返回的行数
语法1:
SELECTTOPN字段列表 FROM表
示例1:
Select top 3sName,sAgefromStudents
查询Students表的前三条记录
语法2:
SELECTTOPNPERCENT字段列表FROM表
示例2:
Selecttop30percentsName,sAge from Students
查询Students表的前30%条记录
6. 排序
语法:
SELECT字段列表FROM表WHERE条件ORDER BY字段ASC/DESC 示例1:
Select*fromStudentswhere sAge>20order by sAge
查询年龄大于20岁的学员信息,并且按照年龄升序排序(若不指定升降序,默认为升序)示例2:
Select*fromStudentsorder by sNamedesc
查询所有学生的所有信息,并按照学生的姓名降序排序
7. 模糊查询
1)Like:通常与通配符结合使用,适用于文本类型的字段
示例1:
Select * from StudentswheresNamelike ‘张_’
查询Students表中张姓的,两个字名的学生信息
示例2:
Select * from StudentswheresNamelike ‘张%’
查询Students表中张姓的学生的信息
示例3:
Select * from StudentswheresEmaillike ‘%@[a-z]%’
查询Students表中,Semail字段‘@’后的第一个字符为小写英文字母的学生信息 示例4:
Select * from StudentswherestuNamelike ‘%@[^a-z]%’
查询Students表中,Semail字段‘@’后的第一个字符不是小写英文字母的学生信息
2)Between „and„:用于查询条件为一个字段介于两个值之间
示例:
Select * from Students where Sage between 20and25
查询学员年龄在20到25之间的学员信息
3)In:用于查询某个字段在值列表中出现作为条件
示例:
Select*fromStudentswhereScityin(‘大连’,’沈阳’,’北京’)查询学员的城市在大连,沈阳或北京的学员信息,等价于如下功能:
Select * from Students where Scity=’大连’or Scity=’沈阳’or Scity=’北京’
4)Isnull:用于查询某个字段为空作为条件
示例:
Select * from Students where Semail is null
查询学员的email为空的学员信息
Select * from Students where semail is not null
查询学员的email不为空的学员信息
8. 聚合函数(所有函数自动忽略空值)
1)Sum():统计某字段的和,用于数值型数据
示例:
Select sum(Sage)as 学员的年龄和 from Student
统计Students表中所有学员的年龄总和,显示结果为一个字段一条记录
2)Avg():统计某字段的平均值,用于数值型数据
示例:
Select avg(Sage)as 学员的平均年龄fromStudents
统计Students表中所有学员的年龄的平均值,显示结果为一个字段一条记录
3)Max():统计某字段的最大值,用于数值,文本,日期型
4)Min():统计某字段的最小值,用于数值,文本,日期型
示例:
Select max(Sage)as 最大年龄 , min(Sage)as 最小年龄from Students
查询Students表中的学员的最大年龄和最小年龄,显示结果为两个字段一条记录
5)Count():统计某字段的记录数或者表的记录数
示例1:
Select count(Semail)as email的数量 fromStudents
查询Students表中,有email的学员的数量。Count(字段)代表统计字段的记录数 示例2:
Select count(*)as学员的数量fromStudents
查询Students表中的记录数,count(*)代表统计表的记录数
9. 分组与聚合函数
语法:
SELECT字段1,聚合函数(字段)AS别名
FROM表
WHERE条件1
GROUP BY字段1
HAVING条件2
ORDER BY字段
注意事项: 1)此语法格式用于对表中按照某个字段分类之后,对每类中的某个数据进行统计
2)分组的字段应该是包含大量重复数据的字段
3)只有出现的group by后的字段,才可以独立出现在select后
4)Where条件用于在分组之前进行对记录的过滤
5)Having条件用于对分组之后的记录集进行条件过滤
6)Orderby总是出现在最后,对最终的结果集进行排序
示例1:
SelectSsex,avg(Sage)as平均年龄fromStudent
Group by Ssex
统计Student表中男生和女生的平均年龄。按照性别分组,分为男生和女生两组,统计每组中年龄的平均值
示例2:
SelectSsex,avg(Sage)as 平均年龄fromStudents
WhereSemail is not null
Group by Ssex
统计具有email的学员中,男生和女生的平均年龄。先根据Smail字段进行条件过滤,过滤掉没有email的学员,对有email的学员分为男生和女孩两组,统计每组中年龄的平均值
示例3:
SelectSdate,count(*)as人数
FromStudents
Group by Sdate
Havingcount(*)>10
统计每天报名的人数,并显示出报名人数多于10人的记录。先按照报名的日期进行分组,统计出每天的报名人数,再在分组之后的记录集上进行条件过滤,留下人数超过10人的记录。
示例4:
SelectSdate,count(*)as人数
From Students
Where xueli=’大专’
Group by Sdate
Having by count(*)>10
查询大专学历的学员中,每天报名的人数,并显示多于10人的记录。先按照学历为大专的条件进行过滤,把是大专的学员按照报名日期进行分组,统计每组的报名人数,再把分组之后的记录集进行再次过滤,显示出报名人数多于10人的信息
10. 多表查询 注意事项:
1)能够进行多表联接查询的表中必须包含有公共字段,两个表的公共字段不要求字段名相同,但数据类型必须相同,功能相同,且两个字段中要包含相同记录
2)最常用的联接为内联接
1)内联接
SELECT字段列表
FROM表1INNERJOIN表2
ON表1.公共字段=表2.公共字段
返回两个表基于公共字段有相同记录的匹配结果
SELECT字段列表
FROM表1INNERJOIN表2
ON表1.公共字段表2.公共字段
返回两个表的交叉联接的结果与相等条件的内联的差集
2)外联接
(1)左外联接
SELECT字段列表
FROM左表LEFTJOIN右表
ON左表.公共字段=右表.公共字段
返回内联的结果加上左表的剩余记录
(2)右外联接
SELECT字段列表
FROM左表RIGHTJOIN右表
ON左表.公共字段=表2.公共字段
返回内联的结果加上右表的剩余记录
(3)完整外联接
SELECT字段列表
FROM表1FULLJOIN表2
ON表1.公共字段=表2.公共字段
返回内联的结果加上左表的剩余和右表的剩余
3)交叉联接
SELECT字段列表
FROM表1CROSSJOIN表2
返回结果集的数目为表1的记录数*表2的记录数,表1中的每一条记录分别和表2中的每条记录进行匹配
4)自联接
SELECT字段列表
FROM表1AS别名1INNERJOIN表1AS别名2
ON别名1.公共字段=别名2.公共字段