-
2021-09-05 12:47:15
1.创建3张表
//学生表创建 CREATE table student( Sno CHAR(9) PRIMARY KEY, Sname CHAR(20) UNIQUE, Ssex char(2), Sage SMALLINT, Sdept char(20) ); //课程表创建 CREATE table course( Cno char(4) PRIMARY KEY, Cname char(40) not NULL, Cpno char(4), Ccredit SMALLINT ); //学生选课表创建 CREATE table SC( Sno char(9), Cno char(4), Grade SMALLINT );
2.向表格添加数据
//向学生表中添加数据 INSERT into Student values( 201215121,'李勇','男',20,'CS'), (201215122,'刘晨','女',19,'CS'), (201215123,'王敏','女',18,'MA'), (201215125,'张立','男',19,'IS' ); //向课程表中添加数据 insert into course VALUES( '1','数据库','5',4), '2','数学','',2), '3','信息系统','1',4), ('4','操作系统','6',3), ('5','数据结构','7',4), ('6','数据处理','',2), ('7','Java语言','6',4) //向学生选课表中添加数据 insert into sc values (201215121,1,92), (201215121,2,85), (201215121,3,88), (201215122,2,58), (201215122,3,80)
3.数据查询
3.1单表查询
3.1.1查询全体学生的学号与姓名
select Sno,Sname from student
3.1.2查询全体学生的姓名,学号,所在系select Sname,Sno,Sdept from student
3.1.3查询全体学生的详细记录select * from student
3.1.4查询全体学生的姓名及其出生年份select Sname,2020-Sage from Student
3.1.5查询全体学生的姓名,出生年份和所在的院系,要求用小写字母表示系名select Sname,2020-Sage,lower(Sdept) from student
3.1.6查询选修了课程的学生学号select Sno from SC
3.1.7查询计算机科学系全体学生的名单select Sname from student where Sdept='CS'
3.1.8查询所有年龄在20岁以下的学生姓名及其年龄select Sname,Sage from student where Sage<20
3.1.9查询考试成绩不及格的学生的学号select Sno from sc where Grade<60
3.1.10查询年龄在20-23岁(包括20和23)之间的学生的姓名,系别,年龄select Sname,Sdept,Sage from student where Sage between 20 and 23
3.1.11查询年龄不中20-23之间的学生姓名,系别,年龄select Sname,Sdept,Sage from student where Sage not between 20 and 23
3.1.12查询计算机科学系(CS),数学系(MA),信息系(IS)学生的姓名和性别select Sname,Ssex from student where Sdept in('CS','MA','IS')
3.1.13查询既不是CS,MA,也不是IS的学生的姓名和性别select Sname,Ssex from student where Sdept not in('CS','MA','IS')
3.1.14查询学号为201215121的学生的详细情况select * from student where Sno='201215121'
3.1.15查询所有姓刘的学生的姓名,学号,性别select Sname,Sno,Ssex from student where Sname like '刘%'
3.1.16查询姓欧阳且全名为3个汉字的学生的姓名select Sname from student where Sname like '欧阳_'
3.1.17查询名字中第二个字为“阳”的学生的姓名和性别select Sname,Ssex from student where Sname like '_阳%'
3.1.18查询所有不姓刘的学生的姓名,学号和性别select Sname,Sno,Ssex from student where Sname not like '刘%'
3.1.19查询缺少成绩的学生的学号和响应的课程号select Sno,Cno from sc where grade is null
3.1.20查询所有有成绩的学生的学号和课程号select Sno,Cno from sc where grade is not null
3.1.21查询计算机科学系且年龄在20岁以下的学生的姓名select Sname from student where Sdept='CS' and Sage<=20
3.1.22查询选修了3号课程的学生的学号及其成绩,查询结果按分数的降序排列//order by 默认升序,ASC是升序,DESC是降序 select Sno,Grade from sc where Cno='3' order by Grade desc
3.1.23查询全体学生情况,查询结果按所在系的系号升序排列,同一系的学生按年龄降序排列select * from student order by Sdept,Sage DESC
3.1.24查询学生总人数select count(*) from student
3.1.25查询选修了课程的学生人数//学生可以选多门课程,避免重复需在count函数里加distinct短语 select count(distinct Sno) from sc
3.1.26计算选修1号课程的学生平均成绩select avg(Grade) from sc where Cno='1'
3.1.27查询选修1号课程的学生最高分数select max(Grade) from sc where Cno='1'
3.1.28查询学生201215121选修课程的总学分数select sum(Grade) from sc where Sno='201215121'
3.1.29求各个课程号及相应的选课人数//group up 是将查询结果按某个属性进行分组 select Cno ,Count(Sno) from sc group by Cno
3.1.30查询选修了3门以上课程的学生学号//having作用于组,这里先用group by按Sno进行分组, 再用聚集函数count对每一组进行计数,用having提取出满足条件的组 select Sno from sc group by Sno having count(*)>3
3.1.31查询平均成绩大于等于90分的学生学号和平均成绩//where句中不能用聚集函数作为条件表达式 select Sno,avg(Grade) from sc group by Sno having avg(Grade)>=90
3.2连接查询
3.2.1查询每个学生及其选修课的情况select student.*,sc.* from Student,sc where student.Sno=sc.Sno
3.2.2将上面 的例子用自然连接完成select student.Sno,Sname,Ssex,Sage,Sdept,Cno,grade from student,sc where student.sno=sc.sno
3.2.3查询选修2号课程且成绩在90分以上的所有学生的学号和姓名select student.Sno,Sname from Student,sc where student.Sno=sc.Sno and sc.Cno='2' and sc.Grade>=90
3.2.4查询每一门课的间接先修课(先修课的先修课)//先对一门课找到其先修课,再按此先修课的课程号查找它的先修课, //将表与自身连接,就要取别名 select FIRST.Cno,second.Cpno from Course first,Course SECOND where `first`.Cpno=`SECOND`.Cno
3.2.5查询每个学生的学号,姓名,选修的课程名及成绩select student.Sno,Sname,Cname,Grade from student,sc,course where student.Sno=sc.Sno AND sc.Cno=course.Cno
3.3嵌套查询
3.3.1查询与刘晨在同一个系学习的学生select Sno,Sname,Sdept from student where Sdept in( select Sdept from student where Sname='刘晨' )
3.3.2查询选修了课程名为“信息系统”的学生学号和姓名//嵌套查询太多了,用连接查询呈现出来 select student.Sno,Sname from student,sc,course where student.Sno=sc.Sno and sc.Cno=course.Cno and course.Cname='信息系统'
3.3.3找出每个学生超过他自己选修课程平均成绩的课程号select Sno,Cno from sc x where Grade >=( select avg(Grade) from sc y where y.Sno=x.Sno )
3.3.4查询非计算机系中比计算机系任意学生年龄小的学生姓名和年龄//任意:any 所有:all select Sname,Sage from student where Sage<any( select Sage from student where Sdept='CS' )
3.3.5查询非计算机系中比计算机系所有学生年龄都小的学生姓名和年龄select Sname,Sage from student where Sage<all( select Sage from student where Sdept='CS' )
3.3.6查询所有选修了1号课程的学生姓名select Sname from student,sc where student.Sno=sc.Sno and sc.Cno='1'
3.3.7查询选修了全部课程的学生姓名select Sname from student where not exists( select * from course where not exists( SELECT * from sc where Sno=student.Sno AND Cno=course.Cno ) )
3.4集合查询
3.4.1查询选修了1号课程或则2号课程的学生select Sno from sc where Cno='1' UNION select Sno from sc where Cno='2'
3.4.2查询既选修了课程1又选修了课程2的学生select Sno from sc where Cno='1' intersert select Sno from sc where Cno='2'
4.数据更新
4.1插入数据
4.1.1将一个新学生元组(学号:201215128,姓名:陈东,性别:男,系别:IS,年龄:18岁)insert into student values ('201215128','陈东','男',18,'IS')
4.1.2插入一条选课记录insert into sc(Sno,Cno) VALUES('201215128','1')
4.1.3对每一个系,求学生的平均年龄,并把结果存入数据库//首先创建一张表来存放数据 create table Deptage( Sdept char(15), avg_age smallint ) //计算数据,存放到表中 insert into Deptage(Sdept,avg_age) select Sdept,avg(Sage) from student group by Sdept
4.2修改数据
4.2.1将学生201215121的年龄改为22岁update student set Sage=22 where Sno='201215121'
4.2.2将所有学生的年龄增加1岁update student set Sage=Sage+1
4.2.3将计算机系全体学生的成绩置0update student set Sage=0 where Sdept='CS'
4.3删除数据
4.3.1删除学号为201215128的学生记录delete from student where Sno='201215128'
4.3.2删除计算机系所有学生的选课记录delete from sc where Sno in( select Sno from student where Sdept='CS' )
4.3.3删除学生表所有记录truncat student //该语句是删除该张表,重新创建表, 不是一条一条删除表中数据;且truncat只能作用于表,delete,drop可作用于表,视图
5.常用关键字总结
5.1 distinct
5.1.1 作用于单列select distinct 列名 //去重
5.1.2 作用多列select distinct 列名1,列名2,列名3 //对3列都去重
5.1.3 与函数一起使用select count(distinct 列名) //计算不重复的列名个数
更多相关内容 -
SQL语句大全实例教程.pdf
2019-08-28 15:07:18SQL是英文Structured Query Language的缩写,意思为结构化查询语言。SQL语言的主要功能就是同各种数据库建立联系,进行沟通。按照ANSI(美国国家标准协会)的规定,SQL被作为关系型数据库管理系统的标准语言。SQL ... -
SQL语句大全实例
2019-04-09 13:32:12文档对主要sql语句进行了清晰的罗列,配以实例讲解,更加清晰易学 -
SQL语句大全实例.doc
2022-03-05 19:27:18SQL语句大全实例.doc -
sql语句大全+实例讲解
2020-05-20 19:09:031.创建3张表 //学生表创建 CREATE table student( Sno CHAR(9) PRIMARY KEY, ...truncat student //该语句是删除该张表,重新创建表,不是一条一条删除表中数据;且truncat只能作用于表,delete,drop可作用于表,视图1.创建3张表
//学生表创建 CREATE table student( Sno CHAR(9) PRIMARY KEY, Sname CHAR(20) UNIQUE, Ssex char(2), Sage SMALLINT, Sdept char(20) ); //课程表创建 CREATE table course( Cno char(4) PRIMARY KEY, Cname char(40) not NULL, Cpno char(4), Ccredit SMALLINT ); //学生选课表创建 CREATE table SC( Sno char(9), Cno char(4), Grade SMALLINT );
2.向表中添加数据
也可使用图形化工具Navicat或其他进行输入,//向学生表中添加数据 INSERT into Student values( 201215121,'李勇','男',20,'CS'), (201215122,'刘晨','女',19,'CS'), (201215123,'王敏','女',18,'MA'), (201215125,'张立','男',19,'IS' ); //向课程表中添加数据 insert into course VALUES( '1','数据库','5',4), '2','数学','',2), '3','信息系统','1',4), ('4','操作系统','6',3), ('5','数据结构','7',4), ('6','数据处理','',2), ('7','Java语言','6',4) //向学生选课表中添加数据 insert into sc values (201215121,1,92), (201215121,2,85), (201215121,3,88), (201215122,2,58), (201215122,3,80)
3.数据查询
3.1单表查询
3.1.1查询全体学生的学号与姓名
select Sno,Sname from student
3.1.2查询全体学生的姓名,学号,所在系
select Sname,Sno,Sdept from student
3.1.3查询全体学生的详细记录
select * from student
3.1.4查询全体学生的姓名及其出生年份
select Sname,2020-Sage from Student
3.1.5查询全体学生的姓名,出生年份和所在的院系,要求用小写字母表示系名
select Sname,2020-Sage,lower(Sdept) from student
3.1.6查询选修了课程的学生学号
select Sno from SC
3.1.7查询计算机科学系全体学生的名单
select Sname from student where Sdept='CS'
3.1.8查询所有年龄在20岁以下的学生姓名及其年龄
select Sname,Sage from student where Sage<20
3.1.9查询考试成绩不及格的学生的学号
select Sno from sc where Grade<60
3.1.10查询年龄在20-23岁(包括20和23)之间的学生的姓名,系别,年龄
select Sname,Sdept,Sage from student where Sage between 20 and 23
3.1.11查询年龄不中20-23之间的学生姓名,系别,年龄
select Sname,Sdept,Sage from student where Sage not between 20 and 23
3.1.12查询计算机科学系(CS),数学系(MA),信息系(IS)学生的姓名和性别
select Sname,Ssex from student where Sdept in('CS','MA','IS')
3.1.13查询既不是CS,MA,也不是IS的学生的姓名和性别
select Sname,Ssex from student where Sdept not in('CS','MA','IS')
3.1.14查询学号为201215121的学生的详细情况
select * from student where Sno='201215121'
3.1.15查询所有姓刘的学生的姓名,学号,性别
select Sname,Sno,Ssex from student where Sname like '刘%'
3.1.16查询姓欧阳且全名为3个汉字的学生的姓名
select Sname from student where Sname like '欧阳_'
3.1.17查询名字中第二个字为“阳”的学生的姓名和性别
select Sname,Ssex from student where Sname like '_阳%'
3.1.18查询所有不姓刘的学生的姓名,学号和性别
select Sname,Sno,Ssex from student where Sname not like '刘%'
3.1.19查询缺少成绩的学生的学号和响应的课程号
select Sno,Cno from sc where grade is null
3.1.20查询所有有成绩的学生的学号和课程号
select Sno,Cno from sc where grade is not null
3.1.21查询计算机科学系且年龄在20岁以下的学生的姓名
select Sname from student where Sdept='CS' and Sage<=20
3.1.22查询选修了3号课程的学生的学号及其成绩,查询结果按分数的降序排列
//order by 默认升序,ASC是升序,DESC是降序 select Sno,Grade from sc where Cno='3' order by Grade desc
3.1.23查询全体学生情况,查询结果按所在系的系号升序排列,同一系的学生按年龄降序排列
select * from student order by Sdept,Sage DESC
3.1.24查询学生总人数
select count(*) from student
3.1.25查询选修了课程的学生人数
//学生可以选多门课程,避免重复需在count函数里加distinct短语 select count(distinct Sno) from sc
3.1.26计算选修1号课程的学生平均成绩
select avg(Grade) from sc where Cno='1'
3.1.27查询选修1号课程的学生最高分数
select max(Grade) from sc where Cno='1'
3.1.28查询学生201215121选修课程的总学分数
select sum(Grade) from sc where Sno='201215121'
3.1.29求各个课程号及相应的选课人数
//group up 是将查询结果按某个属性进行分组 select Cno ,Count(Sno) from sc group by Cno
3.1.30查询选修了3门以上课程的学生学号
//having作用于组,这里先用group by按Sno进行分组,再用聚集函数count对每一组进行计数,用having提取出满足条件的组 select Sno from sc group by Sno having count(*)>3
3.1.31查询平均成绩大于等于90分的学生学号和平均成绩
//where句中不能用聚集函数作为条件表达式 select Sno,avg(Grade) from sc group by Sno having avg(Grade)>=90
3.2连接查询
3.2.1查询每个学生及其选修课的情况
select student.*,sc.* from Student,sc where student.Sno=sc.Sno
3.2.2将上面 的例子用自然连接完成
select student.Sno,Sname,Ssex,Sage,Sdept,Cno,grade from student,sc where student.sno=sc.sno
3.2.3查询选修2号课程且成绩在90分以上的所有学生的学号和姓名
select student.Sno,Sname from Student,sc where student.Sno=sc.Sno and sc.Cno='2' and sc.Grade>=90
3.2.4查询每一门课的间接先修课(先修课的先修课)
//先对一门课找到其先修课,再按此先修课的课程号查找它的先修课, //将表与自身连接,就要取别名 select FIRST.Cno,second.Cpno from Course first,Course SECOND where `first`.Cpno=`SECOND`.Cno
3.2.5查询每个学生的学号,姓名,选修的课程名及成绩
select student.Sno,Sname,Cname,Grade from student,sc,course where student.Sno=sc.Sno AND sc.Cno=course.Cno
3.3嵌套查询
3.3.1查询与刘晨在同一个系学习的学生
select Sno,Sname,Sdept from student where Sdept in( select Sdept from student where Sname='刘晨' )
3.3.2查询选修了课程名为“信息系统”的学生学号和姓名
//嵌套查询太多了,用连接查询呈现出来 select student.Sno,Sname from student,sc,course where student.Sno=sc.Sno and sc.Cno=course.Cno and course.Cname='信息系统'
3.3.3找出每个学生超过他自己选修课程平均成绩的课程号
select Sno,Cno from sc x where Grade >=( select avg(Grade) from sc y where y.Sno=x.Sno )
3.3.4查询非计算机系中比计算机系任意学生年龄小的学生姓名和年龄
//任意:any 所有:all select Sname,Sage from student where Sage<any( select Sage from student where Sdept='CS' )
3.3.5查询非计算机系中比计算机系所有学生年龄都小的学生姓名和年龄
select Sname,Sage from student where Sage<all( select Sage from student where Sdept='CS' )
3.3.6查询所有选修了1号课程的学生姓名
select Sname from student,sc where student.Sno=sc.Sno and sc.Cno='1'
3.3.7查询选修了全部课程的学生姓名
select Sname from student where not exists( select * from course where not exists( SELECT * from sc where Sno=student.Sno AND Cno=course.Cno ) )
3.4集合查询
3.4.1查询选修了1号课程或则2号课程的学生
select Sno from sc where Cno='1' UNION select Sno from sc where Cno='2'
3.4.2查询既选修了课程1又选修了课程2的学生
select Sno from sc where Cno='1' intersert select Sno from sc where Cno='2'
4.数据更新
4.1插入数据
4.1.1将一个新学生元组(学号:201215128,姓名:陈东,性别:男,系别:IS,年龄:18岁)
insert into student values ('201215128','陈东','男',18,'IS')
4.1.2插入一条选课记录
insert into sc(Sno,Cno) VALUES('201215128','1')
4.1.3对每一个系,求学生的平均年龄,并把结果存入数据库
//首先创建一张表来存放数据 create table Deptage( Sdept char(15), avg_age smallint ) //计算数据,存放到表中 insert into Deptage(Sdept,avg_age) select Sdept,avg(Sage) from student group by Sdept
4.2修改数据
4.2.1将学生201215121的年龄改为22岁
update student set Sage=22 where Sno='201215121'
4.2.2将所有学生的年龄增加1岁
update student set Sage=Sage+1
4.2.3将计算机系全体学生的成绩置0
update student set Sage=0 where Sdept='CS'
4.3删除数据
4.3.1删除学号为201215128的学生记录
delete from student where Sno='201215128'
4.3.2删除计算机系所有学生的选课记录
delete from sc where Sno in( select Sno from student where Sdept='CS' )
4.3.3删除学生表所有记录
truncat student //该语句是删除该张表,重新创建表,不是一条一条删除表中数据;且truncat只能作用于表,delete,drop可作用于表,视图
5.常用关键字总结
5.1 distinct
5.1.1 作用于单列
select distinct 列名 //去重
5.1.2 作用多列
select distinct 列名1,列名2,列名3 //对3列都去重
5.1.3 与函数一起使用
select count(distinct 列名) //计算不重复的列名个数
-
常用经典SQL语句大全完整版--详解+实例
2020-12-25 20:56:44SQL分类: DDL—数据定义语言(CREATE,ALTER,DROP,DECLARE) DML—数据操纵语言(SELECT,DELETE,UPDATE,INSERT) DCL—数据控制语言(GRANT,REVOKE,COMMIT,ROLLBACK) 首先,简要介绍基础语句: 1、...下列语句部分是Mssql语句,不可以在access中使用。
SQL分类:
DDL—数据定义语言(CREATE,ALTER,DROP,DECLARE)
DML—数据操纵语言(SELECT,DELETE,UPDATE,INSERT)
DCL—数据控制语言(GRANT,REVOKE,COMMIT,ROLLBACK)
首先,简要介绍基础语句:
1、说明:创建数据库
CREATE DATABASE database-name
2、说明:删除数据库
drop database dbname
3、说明:备份sql server
— 创建 备份数据的 device
USE master
EXEC sp_addumpdevice ’disk’, ’testBack’, ’c:\mssql7backup\MyNwind_1.dat’
— 开始 备份
BACKUP DATABASE pubs TO testBack
4、说明:创建新表
create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],…)
根据已有的表创建新表:
A:create table tab_new like tab_old (使用旧表创建新表)
B:create table tab_new as select col1,col2… from tab_old definition only
5、说明:
删除新表:drop table tabname
6、说明:
增加一个列:Alter table tabname add column col type
注:列增加后将不能删除。DB2中列加上后数据类型也不能改变,唯一能改变的是增加varchar类型的长度。
7、说明:
添加主键:Alter table tabname add primary key(col)
说明:
删除主键:Alter table tabname drop primary key(col)
8、说明:
创建索引:create [unique] index idxname on tabname(col….)
删除索引:drop index idxname
注:索引是不可更改的,想更改必须删除重新建。
9、说明:
创建视图:create view viewname as select statement
删除视图:drop view viewname
10、说明:几个简单的基本的sql语句
选择:select * from table1 where 范围
插入:insert into table1(field1,field2) values(value1,value2)
删除:delete from table1 where 范围
更新:update table1 set field1=value1 where 范围
查找:select * from table1 where field1 like ’%value1%’ —like的语法很精妙,查资料!
排序:select * from table1 order by field1,field2 [desc]
总数:select count * as totalcount from table1
求和:select sum(field1) as sumvalue from table1
平均:select avg(field1) as avgvalue from table1
最大:select max(field1) as maxvalue from table1
最小:select min(field1) as minvalue from table1
11、说明:几个高级查询运算词
A: UNION 运算符
UNION 运算符通过组合其他两个结果表(例如 TABLE1 和 TABLE2)并消去表中任何重复行而派生出一个结果表。当 ALL 随 UNION 一起使用时(即 UNION ALL),不消除重复行。两种情况下,派生表的每一行不是来自 TABLE1 就是来自 TABLE2。
B: EXCEPT 运算符
EXCEPT 运算符通过包括所有在 TABLE1 中但不在 TABLE2 中的行并消除所有重复行而派生出一个结果表。当 ALL 随 EXCEPT 一起使用时 (EXCEPT ALL),不消除重复行。
C: INTERSECT 运算符
INTERSECT 运算符通过只包括 TABLE1 和 TABLE2 中都有的行并消除所有重复行而派生出一个结果表。当 ALL 随 INTERSECT 一起使用时 (INTERSECT ALL),不消除重复行。
注:使用运算词的几个查询结果行必须是一致的。
12、说明:使用外连接
A、left outer join:
左外连接(左连接):结果集几包括连接表的匹配行,也包括左连接表的所有行。
SQL: select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c
B:right outer join:
右外连接(右连接):结果集既包括连接表的匹配连接行,也包括右连接表的所有行。
C:full outer join:
全外连接:不仅包括符号连接表的匹配行,还包括两个连接表中的所有记录。
其次,大家来看一些不错的sql语句
1、说明:复制表(只复制结构,源表名:a 新表名:b) (Access可用)
法一:select * into b from a where 1<>1
法二:select top 0 * into b from a
2、说明:拷贝表(拷贝数据,源表名:a 目标表名:b) (Access可用)
insert into b(a, b, c) select d,e,f from b;
3、说明:跨数据库之间表的拷贝(具体数据使用绝对路径) (Access可用)
insert into b(a, b, c) select d,e,f from b in ‘具体数据库’ where 条件
例子:…from b in ’"&Server.MapPath(".")&"\data.mdb" &"’ where…
4、说明:子查询(表名1:a 表名2:b)
select a,b,c from a where a IN (select d from b ) 或者: select a,b,c from a where a IN (1,2,3)
5、说明:显示文章、提交人和最后回复时间
select a.title,a.username,b.adddate from table a,(select max(adddate) adddate from table where table.title=a.title) b
6、说明:外连接查询(表名1:a 表名2:b)
select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c
7、说明:在线视图查询(表名1:a )
select * from (SELECT a,b,c FROM a) T where t.a > 1;
8、说明:between的用法,between限制查询数据范围时包括了边界值,not between不包括
select * from table1 where time between time1 and time2
select a,b,c, from table1 where a not between 数值1 and 数值2
9、说明:in 的使用方法
select * from table1 where a [not] in (‘值1’,’值2’,’值4’,’值6’)
10、说明:两张关联表,删除主表中已经在副表中没有的信息
delete from table1 where not exists ( select * from table2 where table1.field1=table2.field1 )
11、说明:四表联查问题:
select * from a left inner join b on a.a=b.b right inner join c on a.a=c.c inner join d on a.a=d.d where …
12、说明:日程安排提前五分钟提醒
SQL: select * from 日程安排 where datediff(’minute’,f开始时间,getdate())>5
13、说明:一条sql 语句搞定数据库分页
select top 10 b.* from (select top 20 主键字段,排序字段 from 表名 order by 排序字段 desc) a,表名 b where b.主键字段 = a.主键字段 order by a.排序字段
14、说明:前10条记录
select top 10 * form table1 where 范围
15、说明:选择在每一组b值相同的数据中对应的a最大的记录的所有信息(类似这样的用法可以用于论坛每月排行榜,每月热销产品分析,按科目成绩排名,等等.)
select a,b,c from tablename ta where a=(select max(a) from tablename tb where tb.b=ta.b)
16、说明:包括所有在 TableA 中但不在 TableB和TableC 中的行并消除所有重复行而派生出一个结果表
(select a from tableA ) except (select a from tableB) except (select a from tableC)
17、说明:随机取出10条数据
select top 10 * from tablename order by newid()
18、说明:随机选择记录
select newid()
19、说明:删除重复记录
Delete from tablename where id not in (select max(id) from tablename group by col1,col2,…)
20、说明:列出数据库里所有的表名
select name from sysobjects where type=’U’
21、说明:列出表里的所有的
select name from syscolumns where id=object_id(’TableName’)
22、说明:列示type、vender、pcs字段,以type字段排列,case可以方便地实现多重选择,类似select 中的case。
select type,sum(case vender when ’A’ then pcs else 0 end),sum(case vender when ’C’ then pcs else 0 end),sum(case vender when ’B’ then pcs else 0 end) FROM tablename group by type
显示结果:
type vender pcs
电脑 A 1
电脑 A 1
光盘 B 2
光盘 A 2
手机 B 3
手机 C 323、说明:初始化表table1
TRUNCATE TABLE table1
24、说明:选择从10到15的记录
select top 5 * from (select top 15 * from table order by id asc) table_别名 order by id desc
随机选择数据库记录的方法(使用Randomize函数,通过SQL语句实现)
对存储在数据库中的数据来说,随机数特性能给出上面的效果,但它们可能太慢了些。你不能要求ASP“找个随机数”然后打印出来。实际上常见的解决方案是建立如下所示的循环:
Randomize
RNumber = Int(Rnd499) +1
While Not objRec.EOF
If objRec(“ID”) = RNumber THEN
… 这里是执行脚本 …
end if
objRec.MoveNext
Wend
这很容易理解。首先,你取出1到500范围之内的一个随机数(假设500就是数据库内记录的总数)。然后,你遍历每一记录来测试ID 的值、检查其是否匹配RNumber。满足条件的话就执行由THEN 关键字开始的那一块代码。假如你的RNumber 等于495,那么要循环一遍数据库花的时间可就长了。虽然500这个数字看起来大了些,但相比更为稳固的企业解决方案这还是个小型数据库了,后者通常在一个数据库内就包含了成千上万条记录。这时候不就死定了?
采用SQL,你就可以很快地找出准确的记录并且打开一个只包含该记录的recordset,如下所示:
Randomize
RNumber = Int(Rnd499) + 1
SQL = "SELECT * FROM Customers WHERE ID = " & RNumber
set objRec = ObjConn.Execute(SQL)
Response.WriteRNumber & " = " & objRec(“ID”) & " " & objRec(“c_email”)
不必写出RNumber 和ID,你只需要检查匹配情况即可。只要你对以上代码的工作满意,你自可按需操作“随机”记录。Recordset没有包含其他内容,因此你很快就能找到你需要的记录这样就大大降低了处理时间。
再谈随机数
现在你下定决心要榨干Random 函数的最后一滴油,那么你可能会一次取出多条随机记录或者想采用一定随机范围内的记录。把上面的标准Random 示例扩展一下就可以用SQL应对上面两种情况了。
为了取出几条随机选择的记录并存放在同一recordset内,你可以存储三个随机数,然后查询数据库获得匹配这些数字的记录:
SQL = "SELECT * FROM Customers WHERE ID = " & RNumber & " OR ID = " & RNumber2 & " OR ID = " & RNumber3
假如你想选出10条记录(也许是每次页面装载时的10条链接的列表),你可以用BETWEEN 或者数学等式选出第一条记录和适当数量的递增记录。这一操作可以通过好几种方式来完成,但是 SELECT 语句只显示一种可能(这里的ID 是自动生成的号码):
SQL = "SELECT * FROM Customers WHERE ID BETWEEN " & RNumber & " AND " & RNumber & “+ 9”
注意:以上代码的执行目的不是检查数据库内是否有9条并发记录。
随机读取若干条记录,测试过
Access语法:SELECT top 10 * From 表名 ORDER BY Rnd(id)
Sql server:select top n * from 表名 order by newid()
mysql select * From 表名 Order By rand() Limit n
Access左连接语法(最近开发要用左连接,Access帮助什么都没有,网上没有Access的SQL说明,只有自己测试, 现在记下以备后查)
语法 select table1.fd1,table1,fd2,table2.fd2 From table1 left join table2 on table1.fd1,table2.fd1 where …
使用SQL语句 用…代替过长的字符串显示
语法:
SQL数据库:select case when len(field)>10 then left(field,10)+’…’ else field end as news_name,news_id from tablename
Access数据库:SELECT iif(len(field)>2,left(field,2)+’…’,field) FROM tablename;
Conn.Execute说明
Execute方法
该方法用于执行SQL语句。根据SQL语句执行后是否返回记录集,该方法的使用格式分为以下两种:
1.执行SQL查询语句时,将返回查询得到的记录集。用法为:
Set 对象变量名=连接对象.Execute(“SQL 查询语言”)
Execute方法调用后,会自动创建记录集对象,并将查询结果存储在该记录对象中,通过Set方法,将记录集赋给指定的对象保存,以后对象变量就代表了该记录集对象。
2.执行SQL的操作性语言时,没有记录集的返回。此时用法为:
连接对象.Execute “SQL 操作性语句” [, RecordAffected][, Option]
·RecordAffected 为可选项,此出可放置一个变量,SQL语句执行后,所生效的记录数会自动保存到该变量中。通过访问该变量,就可知道SQL语句队多少条记录进行了操作。
·Option 可选项,该参数的取值通常为adCMDText,它用于告诉ADO,应该将Execute方法之后的第一个字符解释为命令文本。通过指定该参数,可使执行更高效。
·BeginTrans、RollbackTrans、CommitTrans方法
这三个方法是连接对象提供的用于事务处理的方法。BeginTrans用于开始一个事物;RollbackTrans用于回滚事务;CommitTrans用于提交所有的事务处理结果,即确认事务的处理。
事务处理可以将一组操作视为一个整体,只有全部语句都成功执行后,事务处理才算成功;若其中有一个语句执行失败,则整个处理就算失败,并恢复到处里前的状态。
BeginTrans和CommitTrans用于标记事务的开始和结束,在这两个之间的语句,就是作为事务处理的语句。判断事务处理是否成功,可通过连接对象的Error集合来实现,若Error集合的成员个数不为0,则说明有错误发生,事务处理失败。Error集合中的每一个Error对象,代表一个错误信息。
SQL语句大全精要
2006/10/26 13:46
DELETE语句
DELETE语句:用于创建一个删除查询,可从列在 FROM 子句之中的一个或多个表中删除记录,且该子句满足 WHERE 子句中的条件,可以使用DELETE删除多个记录。
语法:DELETE [table.*] FROM table WHERE criteria
语法:DELETE * FROM table WHERE criteria=’查询的字’
说明:table参数用于指定从其中删除记录的表的名称。
criteria参数为一个表达式,用于指定哪些记录应该被删除的表达式。
可以使用 Execute 方法与一个 DROP 语句从数据库中放弃整个表。不过,若用这种方法删除表,将会失去表的结构。不同的是当使用 DELETE,只有数据会被删除;表的结构以及表的所有属性仍然保留,例如字段属性及索引。
UPDATE
有关UPDATE,急!!!!!!!!!!!
在ORACLE数据库中
表 A ( ID ,FIRSTNAME,LASTNAME )
表 B( ID,LASTNAME)
表 A 中原来ID,FIRSTNAME两个字段的数据是完整的
表 B中原来ID,LASTNAME两个字段的数据是完整的
现在要把表 B中的LASTNAME字段的相应的数据填入到A表中LASTNAME相应的位置。两个表中的ID字段是相互关联的。
先谢谢了!!!
update a set a.lastname=(select b.lastname from b where a.id=b.id)
掌握SQL四条最基本的数据操作语句:Insert,Select,Update和Delete。
练掌握SQL是数据库用户的宝贵财富。在本文中,我们将引导你掌握四条最基本的数据操作语句—SQL的核心功能—来依次介绍比较操作符、选择断言以及三值逻辑。当你完成这些学习后,显然你已经开始算是精通SQL了。
在我们开始之前,先使用CREATE TABLE语句来创建一个表(如图1所示)。DDL语句对数据库对象如表、列和视进行定义。它们并不对表中的行进行处理,这是因为DDL语句并不处理数据库中实际的数据。这些工作由另一类SQL语句—数据操作语言(DML)语句进行处理。
SQL中有四种基本的DML操作:INSERT,SELECT,UPDATE和DELETE。由于这是大多数SQL用户经常用到的,我们有必要在此对它们进行一一说明。在图1中我们给出了一个名为EMPLOYEES的表。其中的每一行对应一个特定的雇员记录。请熟悉这张表,我们在后面的例子中将要用到它。The Execute method executes a specified query, SQL statement, stored procedure, or provider-specific text.
Execute的作用是:执行一个查询语句、陈述语句、程序或技术提供对象[provider]的详细文本。The results are stored in a new Recordset object if it is a row-returning query. A closed Recordset object will be returned if it is not a row-returning query.
如果返回行[row-returning]查询语句,那么结果将被存储在一个新的记录对象中;如果它不是一个返回行[row-returning]查询语句,那么它将返回一个关闭的记录对象。Note: The returned Recordset is always a read-only, forward-only Recordset!
注意:返回的Recordset是一个只读的、只向前兼容的Recordset。Tip: To create a Recordset with more functionality, first create a Recordset object. Set the desired properties, and then use the Recordset object’s Open method to execute the query.
提示:在第一次创建Recordset对象时,需要将它创建为一个更具功能性的Recordset对象。设置一个我们所希望的属性,使用Recordset对象的Open方法去执行查询语句。
Syntax for row-returning
row-returning[返回行]语法
|Set objrs=objconn.Execute(commandtext,ra,options)|
Syntax for non-row-returning
non-row-returning[非返回行]语法
|–Syntax for non-row-returning
non-row-returning[非返回行]语法|
|objconn.Execute commandtext,ra,options|
| Parameter参数 | Description描述 |
|-commandtext-|-Required. The SQL statement, stored procedure, or provider-specific text to execute
必要参数。指定需要执行的SQL语句,现存的程序或技术提供对象[provider]的详细文本-|
| ra | Optional. Sets how the provider should evaluate the commandtext parameter. Can be one or more CommandTypeEnum or ExecuteOptionEnum values. Default is adCmdUnspecified
可选参数。设置技术提供对象[provider]应该如何评估CommandText属性的功能。它可以是一个或多个CommandTypeEnum 或 ExecuteOptionEnum的值。默认值是adCmdUnspecified |
Example
案例
| <%sql=“SELECT companyname FROM Customers”
Set rs=conn.Execute(sql)
%> |
转自 -
SQL语句大全(文档).rar
2020-08-25 15:56:57SQL语句大全(文档).rar -
史上超强最常用SQL语句大全
2021-01-27 11:13:31史上超强最常用SQL语句大全,) 1)DDL--数据定义语言 用来定义数据库对象:数据库,表,列等。关键字:create, drop,alter 等 2) DML--数据操作语言 用来对数据库中表的数据进行增删改。关键字:insert, delete, ...史上超强最常用SQL语句大全DDL(Data Definition Language)数据定义语言
DML(Data Manipulation Language)数据操作语言
DQL(Data Query Language)数据查询语言
DCL(Data Control Language)数据控制语言
创作不易,如果本篇博客对您有一定的帮助,大家记得留言+点赞哦。
DDL(Data Definition Language)数据定义语言
一、操作库
-- 创建库 create database db1; -- 创建库是否存在,不存在则创建 create database if not exists db1; -- 查看所有数据库 show databases; -- 查看某个数据库的定义信息 show create database db1; -- 修改数据库字符信息 alter database db1 character set utf8; -- 删除数据库 drop database db1;
二、操作表
--创建表 create table student( id int, name varchar(32), age int , score double(4,1), birthday date, insert_time timestamp ); -- 查看表结构 desc 表名; -- 查看创建表的SQL语句 show create table 表名; -- 修改表名 alter table 表名 rename to 新的表名; -- 添加一列 alter table 表名 add 列名 数据类型; -- 删除列 alter table 表名 drop 列名; -- 删除表 drop table 表名; drop table if exists 表名 ;
DML(Data Manipulation Language)数据操作语言
一、增加 insert into
-- 写全所有列名 insert into 表名(列名1,列名2,...列名n) values(值1,值2,...值n); -- 不写列名(所有列全部添加) insert into 表名 values(值1,值2,...值n); -- 插入部分数据 insert into 表名(列名1,列名2) values(值1,值2);
二、删除 delete
-- 删除表中数据 delete from 表名 where 列名 = 值; -- 删除表中所有数据 delete from 表名; -- 删除表中所有数据(高效 先删除表,然后再创建一张一样的表。) truncate table 表名;
三、修改 update
-- 不带条件的修改(会修改所有行) update 表名 set 列名 = 值; -- 带条件的修改 update 表名 set 列名 = 值 where 列名=值;
DQL(Data Query Language)数据查询语言
关于查询语句有很多,这里基础的不再介绍。主要介绍排序查询、聚合函数、模糊查询、分组查询、分页查询、内连接、外连接、子查询
一、基础关键字
BETWEEN...AND (在什么之间)和 IN( 集合)
-- 查询年龄大于等于20 小于等于30 SELECT * FROM student WHERE age >= 20 && age <=30; SELECT * FROM student WHERE age >= 20 AND age <=30; SELECT * FROM student WHERE age BETWEEN 20 AND 30; -- 查询年龄22岁,18岁,25岁的信息 SELECT * FROM student WHERE age = 22 OR age = 18 OR age = 25 SELECT * FROM student WHERE age IN (22,18,25);
is null(不为null值) 与 like(模糊查询)、distinct(去除重复值)
-- 查询英语成绩不为null SELECT * FROM student WHERE english IS NOT NULL; _:单个任意字符 %:多个任意字符 -- 查询姓马的有哪些? like SELECT * FROM student WHERE NAME LIKE '马%'; -- 查询姓名第二个字是化的人 SELECT * FROM student WHERE NAME LIKE "_化%"; -- 查询姓名是3个字的人 SELECT * FROM student WHERE NAME LIKE '___'; -- 查询姓名中包含德的人 SELECT * FROM student WHERE NAME LIKE '%德%'; -- 关键词 DISTINCT 用于返回唯一不同的值。 -- 语法:SELECT DISTINCT 列名称 FROM 表名称 SELECT DISTINCT NAME FROM student ;
二、排序查询 order by
语法:order by 子句
order by 排序字段1 排序方式1 , 排序字段2 排序方式2...
注意:
如果有多个排序条件,则当前边的条件值一样时,才会判断第二条件。-- 例子 SELECT * FROM person ORDER BY math; --默认升序 SELECT * FROM person ORDER BY math desc; --降序
三、 聚合函数:将一列数据作为一个整体,进行纵向的计算。
1.count:计算个数
2.max:计算最大值
3.min:计算最小值
4.sum:计算和
5.avg:计算平均数
四、 分组查询 grout by
语法:group by 分组字段;
注意:分组之后查询的字段:分组字段、聚合函数
-- 按照性别分组。分别查询男、女同学的平均分 SELECT sex , AVG(math) FROM student GROUP BY sex; -- 按照性别分组。分别查询男、女同学的平均分,人数 SELECT sex , AVG(math),COUNT(id) FROM student GROUP BY sex; -- 按照性别分组。分别查询男、女同学的平均分,人数 要求:分数低于70分的人,不参与分组 SELECT sex , AVG(math),COUNT(id) FROM student WHERE math > 70 GROUP BY sex; -- 按照性别分组。分别查询男、女同学的平均分,人数 要求:分数低于70分的人,不参与分组,分组之后。人数要大于2个人 SELECT sex , AVG(math),COUNT(id) FROM student WHERE math > 70 GROUP BY sex HAVING COUNT(id) > 2; SELECT sex , AVG(math),COUNT(id) 人数 FROM student WHERE math > 70 GROUP BY sex HAVING 人数 > 2;
五、 分页查询
1. 语法:limit 开始的索引,每页查询的条数;
2. 公式:开始的索引 = (当前的页码 - 1) * 每页显示的条数
3. limit 是一个MySQL"方言"-- 每页显示3条记录 SELECT * FROM student LIMIT 0,3; -- 第1页 SELECT * FROM student LIMIT 3,3; -- 第2页 SELECT * FROM student LIMIT 6,3; -- 第3页
六、内连接查询:
1. 从哪些表中查询数据
2.条件是什么
3. 查询哪些字段
1.隐式内连接:使用where条件消除无用数据
-- 查询员工表的名称,性别。部门表的名称 SELECT emp.name,emp.gender,dept.name FROM emp,dept WHERE emp.`dept_id` = dept.`id`; SELECT t1.name, -- 员工表的姓名 t1.gender,-- 员工表的性别 t2.name -- 部门表的名称 FROM emp t1, dept t2 WHERE t1.`dept_id` = t2.`id`;
2.显式内连接
-- 语法: select 字段列表 from 表名1 [inner] join 表名2 on 条件 -- 例如: SELECT * FROM emp INNER JOIN dept ON emp.`dept_id` = dept.`id`; SELECT * FROM emp JOIN dept ON emp.`dept_id` = dept.`id`;
七、外连接查询
1.左外连接 -- 查询的是左表所有数据以及其交集部分。
-- 语法:select 字段列表 from 表1 left [outer] join 表2 on 条件; -- 例子: -- 查询所有员工信息,如果员工有部门,则查询部门名称,没有部门,则不显示部门名称 SELECT t1.*,t2.`name` FROM emp t1 LEFT JOIN dept t2 ON t1.`dept_id` = t2.`id`;
2.右外连接 -- 查询的是右表所有数据以及其交集部分。
-- 语法: select 字段列表 from 表1 right [outer] join 表2 on 条件; -- 例子: SELECT * FROM dept t2 RIGHT JOIN emp t1 ON t1.`dept_id` = t2.`id`;
八、子查询:查询中嵌套查询
-- 查询工资最高的员工信息 -- 1 查询最高的工资是多少 9000 SELECT MAX(salary) FROM emp; -- 2 查询员工信息,并且工资等于9000的 SELECT * FROM emp WHERE emp.`salary` = 9000; -- 一条sql就完成这个操作。这就是子查询 SELECT * FROM emp WHERE emp.`salary` = (SELECT MAX(salary) FROM emp);
1.子查询的结果是单行单列的
子查询可以作为条件,使用运算符去判断。 运算符: > >= < <= =
-- 查询员工工资小于平均工资的人 SELECT * FROM emp WHERE emp.salary < (SELECT AVG(salary) FROM emp);
2. 子查询的结果是多行单列的:
子查询可以作为条件,使用运算符in来判断
-- 查询'财务部'和'市场部'所有的员工信息 SELECT id FROM dept WHERE NAME = '财务部' OR NAME = '市场部'; SELECT * FROM emp WHERE dept_id = 3 OR dept_id = 2; -- 子查询 SELECT * FROM emp WHERE dept_id IN (SELECT id FROM dept WHERE NAME = '财务部' OR NAME = '市场部');
3. 子查询的结果是多行多列的:
子查询可以作为一张虚拟表参与查询
-- 查询员工入职日期是2011-11-11日之后的员工信息和部门信息 -- 子查询 SELECT * FROM dept t1 ,(SELECT * FROM emp WHERE emp.`join_date` > '2011-11-11') t2 WHERE t1.id = t2.dept_id; -- 普通内连接 SELECT * FROM emp t1,dept t2 WHERE t1.`dept_id` = t2.`id` AND t1.`join_date` > '2011-11-11'
DCL(Data Control Language)数据控制语言
管理用户
添加用户
语法:CREATE USER '用户名'@'主机名' IDENTIFIED BY '密码';
删除用户
语法:DROP USER '用户名'@'主机名';
权限管理
查询权限
-- 查询权限 SHOW GRANTS FOR '用户名'@'主机名'; SHOW GRANTS FOR 'lisi'@'%';
授予权限
-- 授予权限 grant 权限列表 on 数据库名.表名 to '用户名'@'主机名'; -- 给张三用户授予所有权限,在任意数据库任意表上 GRANT ALL ON *.* TO 'zhangsan'@'localhost';
撤销权限
-- 撤销权限: revoke 权限列表 on 数据库名.表名 from '用户名'@'主机名'; REVOKE UPDATE ON db3.`account` FROM 'lisi'@'%';
创作不易,如果本篇博客对您有一定的帮助,大家记得留言+点赞哦。
-
VC++ SQL语句嵌套查询实例
2021-03-15 14:45:16VC++ SQL语句嵌套查询实例,嵌套的SQL 语句可以执行比较复杂的数据库操作,本源码介绍在INSERT 语句中嵌套使用SELECT语句。测试前请通过控制面板注册Access 数据源students,编译并运行Debug下的exe程序,如上图所示... -
Oracle数据库常用Sql语句大全
2021-07-19 21:02:10sqlserver中可以用top n 的方法,oracle中用 rownum,但如果只用 rownum会随机取数据,如果想按一定顺序取前几条数据 则可这样写: select * from (select列 from 表 where 条件 order by列 desc) where rownum<&... -
Oracle 常用SQL语句大全(精)
2022-04-21 14:00:00导入指定表 imp demo/demo@orcl file=d:\backup2.dmp tables=(teachers,students) 还原到远程服务器 imp 用户名/密码@远程的IP:端口/实例 file=存放的位置:\文件名称.dmp full=y 二、Oracle表操作 1、创建表 ... -
50个常用sql语句实例
2013-11-10 17:05:4850个常用sql语句实例 -
Mybatis基于注解形式的sql语句生成实例代码
2020-08-29 10:56:14主要介绍了 Mybatis基于注解形式的sql语句生成实例代码,需要的朋友可以参考下 -
asp执行带参数的sql语句实例
2020-10-25 13:52:42主要介绍了asp执行带参数的sql语句实例,参数化SQL语句可以有效的防止SQL注入漏洞,需要的朋友可以参考下 -
C#中实现一次执行多条带GO的sql语句实例
2020-09-03 07:46:53主要介绍了C#中实现一次执行多条带GO的sql语句,以实例形式较为详细的分析了C#执行sql语句的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下 -
sql语句大全免费教程下载
2015-04-30 08:43:40sql语句大全免费教程下载,各种sql基础语句教程,对每个语句有详细的介绍、格式说明和例子,方便学习 -
SQL语句大全【经典教程】.pdf
2013-05-08 11:45:13SQL语句大全【经典教程】适合初学者,很有用。 -
PHP实现的构造sql语句类实例
2020-10-22 21:08:42主要介绍了PHP实现的构造sql语句类,结合实例形式分析了PHP针对常用SQL语句的动态构造与生成技巧,需要的朋友可以参考下 -
Java使用Statement接口执行SQL语句操作实例分析
2020-08-27 05:42:44主要介绍了Java使用Statement接口执行SQL语句操作,结合实例形式详细分析了Java使用Statement接口针对mysql数据库进行连接与执行SQL语句增删改查等相关操作技巧与注意事项,需要的朋友可以参考下 -
SQL语句实例及常用语句总结
2012-03-26 11:08:25SERVER SQL实例应用以及sql语法总结,有需要留存! -
Oracle_SQL语句大全教程
2012-08-07 06:56:35Oracle_SQL语句大全教程 -
动态组合SQL语句方式实现批量更新的实例
2020-10-27 15:03:55动态组合SQL语句方式实现批量更新的实例,需要的朋友可以参考一下 -
MySQL SQL查询语句大全集锦(经典珍藏)
2017-10-12 14:04:26MySQL SQL查询语句大全集锦(经典珍藏),可以每天练习的 -
经典SQL语句大全,SQL语句实例
2011-08-26 16:06:29SQL语句基础,常用的SQL语句构造方法 -
PHP使用mysqli同时执行多条sql查询语句的实例
2020-10-17 06:42:34今天小编就为大家分享一篇关于PHP使用mysqli同时执行多条sql查询语句的实例,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧