第一篇:数据库语句大全
sp_helpdb----------查本服务器中所有数据库 可跟库名 例:sp_helpdb 库名
------------------------------sp_databases-------------查看本服务器中可用的数据库------sp_helpfile-------------------查看当前工作着的数据库----------------------------sp_helpfilegroup---------------查看当前工作着的组的信息。可加参数,跟组名 例:sp_helpdb 库名
--sp_renamedb-----------改数据库名 例:sp_renamedb 旧库名,新库名
--select groupname from sysfilegroups where status=24---------查看文件组 =8是查只读文件组 =16是查默认文件组 =24是查即只读又默认-------------sp_dboption----------修改数据库选项值 例:sp_dboption 库名 选项 值
值决定真假 一般用:true/faule 或off/on表示
选项一般常用为:use only(数据库拥有者)single user(单一用户)read only(只读)------------dbcc shrinkdatabase---------收缩数据库 例:dbcc shrinkdatabase(库名,10)收缩库,剩余空间保留10%,后面如果不加notruncate,则释放空间操作系统,加truncateonly,归还空间给操作系统,但忽略所给的百分比数值。--------dbcc shrinkfile---------收缩文件 用法与ddcc shrinkdatabase相同。
--------alter database---------------修改数据库
用法:这是起始句,告诉要做的是修改数据库,然后再接要做什么工作。每次只做一项工作 alter database 库名
add file 文件名....to filegroup 文件组名
----------------增加库文件,格式与建库时括号里指定大小时的格式一样 add log file 文件名-------------增加日志文件 remove file 文件名---------删除库内的文件
add filegroup 文件组名-----------增加一个文件组 modify file 文件名-------------修改文件属性
modify filegroup 组名------------修改文件组属性-------------drop database--------------删除数据库
例:drop database 库名1,库名2---------可同时删除两个库----------create table 表名(列名 类型, 列名 类型)-------------------建立表
------select * from 表名---------查询表结构
------select @@dbts----------查询最后一次操作------insert into 表名(列名,列名)values(变量,变量.....)------------向表中插入数据
如省略列名,则必须把每列的变量填全,不可缺少。可以省略 into------sp_addtype 自定义类型名 系统类型名-------用户自定义类型------sp_droptype 自定义类型名-----------删除自定义类型 如有数据库正在使用该自定义类型,则不能删除------alter table---------修改表结构 用法: alter table 表名
alter column 列名 类型---------修改列的类型 drop column 列名--------删除列
add(column)列名--------增加列,实际用时不加 column---sp_help-------------查看数据库中对象信息 用法: sp_help 表名---------------查表的信息 或 sp_help 库名--------------查库信息
后面可以跟库名或者表名,是查数据库或者表的信息---sp_spaceused--------查看对象占用的空间信息 用法: sp_spaceused----------查当前库占用空间信息 或 sp_spaceused 表名----------查指定表占用空间信息
后面可以加表名查看表占空间信息。如不加,则查看当前数据库。----sp_depends------------查看对象的相关性 用法: sp_depends 表名-----------后面加表名----sp_rename---------------重新命名
用法: sp_rename 旧表名,新表名---------改表名
或 sp_rename '表名.旧列名','新列名' 'column'-------修改列名------create index--------------创建索引
用法: create index 索引名 on 表名(列名)------创建索引 或: create unique clustered index 索引名 on 表名(列名)------创建簇集唯一索引 unique是建唯一索引 clustered是建簇集索引---非簇集索引用:nonclustered--------select top---------查表中前几行
用法: select top 3 * from 表名-------查表中前三行
或: select top 10 percent * from 表名-------显示表中前10%数据------------加入percent是百分比的意思。只以大于的最小整数,无小数--------select 列名,列名,列名 from 表名-------显示表中特定的列--------select *,列名 from 表名----------查询表中所有,后面再加一列--------select distinct----------查询不重复数据 distinct用于去掉重复数据 用法: select distinct * from 表名---------查表中不重复数据
或: select distinct * into 新表名 from 旧表名------查旧表中不重复数据同时生成新表-----------------------select 列名+列名 from 表名-------允许有计算式出现,显示无列名的计算结果 如想加列名,则: select 列名+列名 as 新列名 from 表名-----------select 年龄,联系电话,cast(年龄 as varchar(2))+联系电话 from 表名--------把整型数据年龄转化为字符型与字符型数据联系电话相加--------------ctrl+o(字母O)--------清空数据。空值与别的数据运算结果为空--------------select 原始列名 别名 from 表名 select 原始列名 as 别名 from 表名 select 别名=原始列名 from 表名
--------指定别名的三种方法。非法符号可''或[]引起来,不得直接使用。--------------select * from 表名
where 年龄 between 20 and 30---------显示年龄在20到30之间的人-------between是从条件一到条件二之间的限制---------select * from 表名
where 年龄 in(20,21,22)---------显示年龄为20、21、22的人--------in是限制在这些条件内的,是显示一个取值范围---------select * from 表名
where 联系电话 like '[1-3]%'--------查电话是1-3开头的人--------like是像这些条件的语句,能用通配符:%、_、[]、[^]--------意思分别代表:所有字符、一个字符、一位上可取值、一位上不可取值--------select * from 表名 where 姓名 like '[e[]%' or 姓名 like '%e]' escape 'e'------------显示以‘[’开头或以‘]’结尾的所有数据,中间有不显示----------escape ''是指定通配符
---------------order by---------给数据排序 用法: select * from 表名
order by 年龄-----------排序显示年龄。默认为升序(asc)要降序必须加desc----------select distinct top 3 from 表名
order by 年龄 desc--------显示最大的三种年龄-----------select * from 表名
where 年龄 in(select distinct top 3 年龄 from 表名 order by 年龄)order by 年龄-----------显示年龄最小的所有人,并排序-----------select 姓名, case when MCSE成绩 >=80 and MCSE成绩<=100 then '考的不错' when MCSE成绩 >=60 and MCSE成绩<80 then '考的一般' when MCSE成绩 >=0 and MCSE成绩<60 then '不及格' when MCSE成绩 is null then '这小子没考试' else '异常数据' end MCSE成绩 from 表名
-----------判断语句 null是空值的意思,不能用等号连接,只能用is-----------case到end为一列里的判断,case在这里是取值,结果用于输出,不显示原值---------------select 列名1, case 列名2 when 1 then '男生' when 0 then '女生' else '未知' end from 表名
--------这里case取列名,是用于这一列每项取值比较,在这里列名2用的是bit型数据-----------select * into 库1.表1 from 库2.表2-----------把库2中表2移到库1中
----------数据维护三个命令: insert---------向表中插入数据 update---------修改表中的数据 delete---------删除表中的数据
----------insert into 表名-----------(into可有可无)(列1,列2,列3,列4)-----------表的原始列,用括号括起来 values----------有这条命令只能插入一条数据(数1,数2,数3,数4)----------插入的数值
---------可以省略原始列清单,但必须把所有列都赋值----------insert into 表1(列1,列2,列3,列4)select * from 表2 where sex=1----------将表2中sex列等于1的数据信息插入表1中-----------update 表名 set 姓名='丁一' where 姓名='李一'----------把表中姓名叫李一的改为丁一。------------where后面跟定位的列与值
-----------update 表名 set 学号=14, 姓名=陈强
where 学号=1------------把学号为1的同学改为学号14,姓名陈强---------update 表名
set 学号=年龄+7, 姓名='陈一强', 年龄=29 where 学号=14
-------把学号为14的同学资料改为年龄加七赋给学号姓名改为陈一强,年龄改为29-------如果没用where定位,则修改全部值
----------delete 表名
where 学号>30---------把学号大于30的资料删除
--------如不指定条件,则删表内所有数据。这是记录日志文件的操作--truncate table 表名
-------清空表。不记录日志文件的操作。
------create view 图名-------------新建视图 用法: create view 图名 as select 列名 from 表名----------------syscomments------------这个表存着视图代码的信息----------------alter view 图名 with encryption as
select 列名 from 表名-----------用with encyption语句给视图原代码加密-------------不可恢复,除非保留源代码
----------------sp_helptext 图名-----------查看视图源代码
---------------select text from syscomments where id =(select id from sysobjects where name ='图名')---------查视图的代码
---------------create view 图名 as select * from 源图名------------基于源图创建新视图---------------create view 图名 as select 列1 as 新列1,列2 新列2,列3=新列3---------起别名的三种方法 from 表名-----------在新视图中为列起别名,则所见的是新起的别名---------------sp_depends 表名-----------查该表的相关性,有多少表、图与之相关。-----------------create view 图名 select * from 表名 where 年龄<20 with check option---------强制插入数据符合年龄小于20的条件,加在where后面-----------是约束insert和update语句的
-----------------select 男公民.姓名,女公民.姓名 from 男公民,女公民 where 男公民.配偶编号=女公民.编号
------------查结婚男女。较原始的语法,后被下列语法取代 或: select 男公民.姓名,女公民.姓名
from 男公民 join 女公民 on 男公民.配偶编号=女公民.编号-------新的形式,在join之前省略了inner语句。
--可用左连接(*=或left outer join)右连接(=*或right outer join)全连接(full outer)----where不能做全连接,但可以做连接的约束 select * from 男公民
where 配偶编号 in(select 编号 from 女公民)--------嵌套查询,查配偶编号在女公民表中编号列中出现过的-----------------select distinct 客户表.*
from(select * from 订单表 where 订单年份=2004)as d,客户表 where d.客户号=客户表.客户号
-----子查询放在from身后,也可以放在where身后--------------select(select 子查询语句)from 表名
-------这种格式要求子查询查出的必须是唯一的数据--------------select a.员工编号,a.员工姓名,b.员工姓名 as 领导姓名 from 员工表 as a,员工表 as b where a.部门领导编号=b.员工编号
select a.员工编号,a.员工姓名,b.员工姓名 as 领导姓名
from 员工表 as a join 员工表 as b on a.部门领导编号=b.员工编号
select a.员工编号,a.员工姓名,(select 员工姓名 from 员工表 as b where a.部门领导编号=b.员工编号)as 领导姓名 from 员工表 as a---------三种查询员工领导的方法
------如果里面总经理领导编号是这空的,这种查询方法不显示空值。如要显示,则用左连接---------------sp_tables-----------查当前数据库中的所有表
----------------select * from 男公民
union------------联合。自动升序排序,并去掉重复语句 select * from 女公民
-----查询结果是男公民和女公民表的总集。如果不去掉重复的,则用 union all-----如果要降序排,则要在最后一个select语句后面加上order by 列名 desc-----用union查询时,结果集内列数必须相同,并且数据类型必须相互兼容-----多表联合查询加order by时,后面必须跟第一个结果集的列名----------------select top 2 成绩 from 表
order by 成绩 desc---------查前两种最好成绩
-----------------select top 2 with ties 成绩 from 表
order by 成绩 desc---------查前两种最好成绩所有人的信息-----------------select top 1 a.成绩
from(select distinct top 3 成绩 from 表 order by 成绩 desc)as a order by 成绩---------嵌套查询,查考成绩第三名的值-----------------select max(SQL成绩),min(MCSE成绩)from 表-----查SQL最高分和MCSE最低分
-----常用的函数:max(最大),min(最小),sum(总和),avg(平均值)-----count(*)统计表内数据的行数。count(列名)统计表内列里非空值的行数-----------------select count(*)from 表名--------查表内有多少行数据-----------------select count(列名)from 表名------------查表内列中有多少行非空数据-----------------select min(成绩),max(成绩),sum(成绩),avg(成绩),count(*),count(成绩)from 表名--------返回显示数据只有一行。中间不能加列名,如想加,可以在后面加列。-----------------group by---------分组统计,后面跟的是列名
---------上面select检索多少原始列,后面group by就要跟多少原始列 例: select 性别,avg(年龄)from 表名
group by 性别-------统计性别的平均年龄
-----------------select 年龄,avg(年龄)from 表名 where 年龄<23 group by 年龄-------查年龄小于23岁的各年龄段平均年龄-------或也可用如下方法:
select 年龄,avg(年龄)from 表名 group by 年龄
having<23-------having是统计之后的条件,where是统计之前的条件--------having是做为group by的子句出现的,不能单独使用----------------select 年龄,avg(年龄)from 表名 where 年龄<23 group by all 年龄-------显示所有年龄,但只统计年龄小于23的,大于23的显示空值----------------select 品牌,颜色,sum(价格),avg(价格)from 汽车表 group by 品牌,颜色
with cube-------多维统计,按不同品牌不同颜色统计,也是group by的子句--------其结果出现把各品牌统计一下,最后再统计所有品牌、所有颜色的总统计----------------select 品牌,颜色,sum(价格),avg(价格)from 汽车表 group by 品牌,颜色
with rollup------只按第一列统计,也是group by的子句---------即统计品牌各颜色和所有品牌所有颜色的总统计----------------select 品牌,颜色,价格 from 汽车表
compute sum(价格),avg(价格)----------出现两个结果集------------查原始列,另外统计所有的总和与平均值
-----------------select 品牌,sum(价格),avg(价格)from 汽车表
group by 品牌------只对汽车品牌进行统计。进行分组的列不一定用来统计----------------select 品牌,颜色,价格 from 汽车表 order by 品牌
compute sum(价格),avg(价格)by 品牌
--------按品牌分组统计。分别显示品牌各款,然后再显示函数计算值----------------exists--------存在。相当于一个判断开关。说对了执行,说错了放弃 用法: select * form 表名
where exists(select * from 表名 where 性别='男')------如果存在性别为男的,执行查询。如果不存在,则不执行命令。---------------数据完整性:1.实体完整性----用unique(唯一)或主键控制,数据不能重复
2.值域完整性----用check控制。控制的是列中不能有非法数据
3.引用完整性----一列的取值完全依赖于前一列时,用这个。
4.用户自定义完整性
----------------create table 表名
(列1 int primary key,--------设置列级主键,紧跟在设置列的后面。列2 int)-----------------create table 表名(列1 int, 列2 int, primary key(列1))--------设置表级主键,放在建表语句的最后面。-----------------create table 表名
(列1 int constraint pk_表 primary key, 列2 int)
--------把列1设为主键,并且起名叫:pk_表。constraint是命名的命令
第二篇:数据库经典语句(新)
创建数据库
创建之前判断该数据库是否存在 if exists(select * from sysdatabases where name='databaseName')drop database databaseName go Create DATABASE database-name 删除数据库
drop database dbname 备份sql server
---创建 备份数据的 device
USE master
EXEC sp_addumpdevice 'disk', 'testBack', 'c:mssql7backupMyNwind_1.dat'
---开始 备份
BACKUP DATABASE pubs TO testBack 创建新表
create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..)
根据已有的表创建新表:
A:go
use 原数据库名
go
select * into 目的数据库名.dbo.目的表名 from 原表名(使用旧表创建新表)
B:create table tab_new as select col1,col2„ from tab_old definition only 创建序列
create sequence SIMON_SEQUENCE minvalue 1--最小值
maxvalue ***999999999999 最大值 start with 1 开始值
increment by 1 每次加几 cache 20;删除新表
drop table tabname 增加一个列
Alter table tabname add column col type
注:列增加后将不能删除。DB2中列加上后数据类型也不能改变,唯一能改变的是增加varchar类型的长度。添加主键
Alter table tabname add primary key(col)
说明:删除主键: Alter table tabname drop primary key(col)创建索引
create [unique] index idxname on tabname(col„.)
删除索引:drop index idxname on tabname
注:索引是不可更改的,想更改必须删除重新建。创建视图
create view viewname as select statement
删除视图:drop view viewname 几个简单的基本的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%’(所有包含‘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[separator] 几个高级查询运算词
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),不消除重复行。
注:使用运算词的几个查询结果行必须是一致的。使用外连接
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:
全外连接:不仅包括符号连接表的匹配行,还包括两个连接表中的所有记录。
编辑本段
判断对象是否存在
判断数据库是否存在
if exists(select * from sys.databases where name = '数据库名')
drop database [数据库名] 判断表是否存在
if not exists(select * from sysobjects where [name] = '表名' and xtype='U')
begin
--这里创建表
end 判断存储过程是否存在
if exists(select * from sysobjects where id = object_id(N'[存储过程名]')and OBJECTPROPERTY(id, N'IsProcedure')= 1)
drop procedure [存储过程名] 判断临时表是否存在
if object_id('tempdb..#临时表名')is not null
drop table #临时表名 判断视图是否存在
--SQL Server 2000
IF EXISTS(SELECT * FROM sysviews WHERE object_id = '[dbo].[视图名]'
--SQL Server 2005
IF EXISTS(SELECT * FROM sys.views WHERE object_id = '[dbo].[视图名]' 判断函数是否存在
if exists(select * from dbo.sysobjects where id = object_id(N'[dbo].[函数名]')and xtype in(N'FN', N'IF', N'TF'))
drop function [dbo].[函数名] 获取用户创建的对象信息
SELECT [name],[id],crdate FROM sysobjects where xtype='U'
/*
xtype 的表示参数类型,通常包括如下这些 C = CHECK 约束 D = 默认值或 DEFAULT 约束 F = FOREIGN KEY 约束 L = 日志 FN = 标量函数 IF = 内嵌表函数 P = 存储过程 PK = PRIMARY KEY 约束(类型是 K)RF = 复制筛选存储过程 S = 系统表 TF = 表函数 TR = 触发器 U = 用户表 UQ = UNIQUE 约束(类型是 K)V = 视图 X = 扩展存储过程 */ 判断列是否存在
if exists(select * from syscolumns where id=object_id('表名')and name='列名')
alter table 表名 drop column 列名 判断列是否自增列
if columnproperty(object_id('table'),'col','IsIdentity')=1
print '自增列'
else
print '不是自增列' SELECT * FROM sys.columns WHERE object_id=OBJECT_ID('表名')AND is_identity=1 判断表中是否存在索引
if exists(select * from sysindexes where id=object_id('表名')and name='索引名')
print '存在'
else
print '不存在 查看数据库中对象
SELECT * FROM sys.sysobjects WHERE name='对象名' 编辑本段 提升
复制表
(只复制结构,源表名:a 新表名:b)(Access可用)
法一:select * into b from a where 1<>1
法二:select top 0 * into b from a 拷贝表
(拷贝数据,源表名:a 目标表名:b)(Access可用)
insert into b(a, b, c)select d,e,f from b;跨数据库之间表的拷贝
(具体数据使用绝对路径)(Access可用)
insert into b(a, b, c)select d,e,f from b in ‘具体数据库’ where 条件
例子:..from b in '“&Server.MapPath(”.“&”data.mdb“ &”' where..子查询
(表名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)显示文章、提交人和最后回复时间
select a.title,a.username,b.adddate from table a,(select max(adddate)adddate from table where table.title=a.title)b 外连接查询
(表名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 在线视图查询
(表名1:a
select * from(Select a,b,c FROM a)T where t.a > 1;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 in 的使用方法
select * from table1 where a [not] in(‘值1’,’值2’,’值4’,’值6’)
删除主表中已经在副表中没有的信息
两张关联表delete from table1 where not exists(select * from table2 where table1.field1=table2.field1 四表联查问题
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.....日程安排提前五分钟提醒
SQL: select * from 日程安排 where datediff('minute',f开始时间,getdate())>5 一条sql 语句搞定数据库分页
select top 10 b.* from(select top 20 主键字段,排序字段 from 表名 order by 排序字段 desc)a,表名 b where b.主键字段 = a.主键字段 order by a.排序字段 前10条记录
select top 10 * form table1 where 范围 选择排名
选择在每一组b值相同的数据中对应的a最大的记录的所有信息(类似这样的用法可以用于论坛每月排行榜,每月热销产品分析,按科目成绩排名,等等.)
select a,b,c from tablename ta where a=(select max(a)from tablename tb where tb.b=ta.b)派生结果表
包括所有在 TableA 中但不在 TableB和TableC 中的行并消除所有重复行而派生出一个结果表
(select a from tableA except(select a from tableB)except(select a from tableC)随机取出10条数据
select top 10 * from tablename order by newid()随机选择记录
select newid()删除重复记录
Delete from tablename where id not in(select max(id)from tablename group by col1,col2,...)列出数据库里所有的表名
select name from sysobjects where type='U' 列出表里的所有的
select name from syscolumns where id=object_id('TableName')列示排列
列示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 3 初始化表table1
TRUNCATE TABLE table1 选择从10到15的记录
select top 5 * from(select top 15 * from table order by id asc)table_别名 order by id desc 数据类型转换
declare @numid int
declare @id varchar(50)
set @numid=2005
set @id=convert(varchar,@numid)
通过上述语句完成数据类型Int转换成varchar,其他转换类似,可参看convert函数
编辑本段 技巧
1=1,1=2的使用
在SQL语句组合时用的较多
“where 1=1” 是表示选择全部 “where 1=2”全部不选,如:
if @strWhere!=' begin
set @strSQL = 'select count(*)as Total from [' + @tblName + '] where ' + @strWhere
end
else
begin
set @strSQL = 'select count(*)as Total from [' + @tblName + ']'
end
我们可以直接写成
set @strSQL = 'select count(*)as Total from [' + @tblName + '] where 1=1 and '+ @strWhere 收缩数据库
--重建索引
DBCC REINDEX DBCC INDEXDEFRAG--收缩数据和日志 DBCC SHRINKDB DBCC SHRINKFILE 压缩数据库
dbcc shrinkdatabase(dbname)转移数据库给新用户以已存在用户权限
exec sp_change_users_login 'update_one','newname','oldname' go 检查备份集
RESTORE VERIFYONLY from disk='E:dvbbs.bak' 修复数据库
Alter DATABASE [dvbbs] SET SINGLE_USER GO DBCC CHECKDB('dvbbs',repair_allow_data_loss)WITH TABLOCK GO Alter DATABASE [dvbbs] SET MULTI_USER GO 日志清除
SET NOCOUNT ON
DECLARE @LogicalFileName sysname,@MaxMinutes INT,@NewSize INT USE tablename--要操作的数据库名
Select @LogicalFileName = 'tablename_log',--日志文件名 @MaxMinutes = 10,--Limit on time allowed to wrap log.@NewSize = 1--你想设定的日志文件的大小(M)--Setup / initialize DECLARE @OriginalSize int Select @OriginalSize = size
FROM sysfiles
Where name = @LogicalFileName Select 'Original Size of ' + db_name()+ ' LOG is ' + CONVERT(VARCHAR(30),@OriginalSize)+ ' 8K pages or ' + CONVERT(VARCHAR(30),(@OriginalSize*8/1024))+ 'MB' FROM sysfiles Where name = @LogicalFileName Create TABLE DummyTrans(DummyColumn char(8000)not null)DECLARE @Counter INT, @StartTime DATETIME,@TruncLog VARCHAR(255)
Select @StartTime = GETDATE(),@TruncLog = 'BACKUP LOG ' + db_name()+ ' WITH TRUNCATE_ONLY'
DBCC SHRINKFILE(@LogicalFileName, @NewSize)
EXEC(@TruncLog)
--Wrap the log if necessary.WHILE @MaxMinutes > DATEDIFF(mi, @StartTime, GETDATE())--time has not expired
AND @OriginalSize =(Select size FROM sysfiles Where name = @LogicalFileName)
AND(@OriginalSize * 8 /1024)> @NewSize
BEGIN--Outer loop.Select @Counter = 0
WHILE((@Counter < @OriginalSize / 16)AND(@Counter < 50000))
BEGIN--update
Insert DummyTrans VALUES('Fill Log')
Delete DummyTrans
Select @Counter = @Counter + 1
END
EXEC(@TruncLog)END Select 'Final Size of ' + db_name()+ ' LOG is ' + CONVERT(VARCHAR(30),size)+ ' 8K pages or ' + CONVERT(VARCHAR(30),(size*8/1024))+ 'MB' FROM sysfiles Where name = @LogicalFileName Drop TABLE DummyTrans
SET NOCOUNT OFF 更改某个表
exec sp_changeobjectowner 'tablename','dbo' 存储更改全部表
Create PROCEDURE dbo.User_ChangeObjectOwnerBatch @OldOwner as NVARCHAR(128), @NewOwner as NVARCHAR(128)AS DECLARE @Name as NVARCHAR(128)DECLARE @Owner as NVARCHAR(128)DECLARE @OwnerName as NVARCHAR(128)DECLARE curObject CURSOR FOR select 'Name' = name, 'Owner' = user_name(uid)from sysobjects where user_name(uid)=@OldOwner order by name OPEN curObject FETCH NEXT FROM curObject INTO @Name, @Owner WHILE(@@FETCH_STATUS=0)BEGIN if @Owner=@OldOwner begin set @OwnerName = @OldOwner + '.' + rtrim(@Name)exec sp_changeobjectowner @OwnerName, @NewOwner end--select @name,@NewOwner,@OldOwner FETCH NEXT FROM curObject INTO @Name, @Owner END
close curObject
deallocate curObject
GO SQL SERVER中直接循环写入数据
declare @i int
set @i=1
while @i<30
begin
insert into test(userid)values(@i)
set @i=@i+1 end
--语 句 功 能--数据操作
SELECT--从数据库表中检索数据行和列 INSERT--向数据库表添加新数据行 DELETE--从数据库表中删除数据行 UPDATE--更新数据库表中的数据--数据定义
CREATE TABLE--创建一个数据库表 DROP TABLE--从数据库中删除表 ALTER TABLE--修改数据库表结构 CREATE VIEW--创建一个视图 DROP VIEW--从数据库中删除视图 CREATE INDEX--为数据库表创建一个索引 DROP INDEX--从数据库中删除索引 CREATE PROCEDURE--创建一个存储过程 DROP PROCEDURE--从数据库中删除存储过程 CREATE TRIGGER--创建一个触发器 DROP TRIGGER--从数据库中删除触发器 CREATE SCHEMA--向数据库添加一个新模式 DROP SCHEMA--从数据库中删除一个模式 CREATE DOMAIN--创建一个数据值域 ALTER DOMAIN--改变域定义
DROP DOMAIN--从数据库中删除一个域--数据控制
GRANT--授予用户访问权限 DENY--拒绝用户访问 REVOKE--解除用户访问权限--事务控制
COMMIT--结束当前事务 ROLLBACK--中止当前事务
SET TRANSACTION--定义当前事务数据访问特征--程序化SQL DECLARE--为查询设定游标 EXPLAN--为查询描述数据访问计划 OPEN--检索查询结果打开一个游标 FETCH--检索一行查询结果 CLOSE--关闭游标
PREPARE--为动态执行准备SQL 语句 EXECUTE--动态地执行SQL 语句 DESCRIBE--描述准备好的查询---局部变量
declare @id char(10)--set @id = '10010001' select @id = '10010001'---全局变量---必须以开头--IF ELSE declare @x int @y int @z int select @x = 1 @y = 2 @z=3 if @x > @y print 'x > y'--打印字符串'x > y' else if @y > @z print 'y > z' else print 'z > y'--CASE use pangu update employee set e_wage = case when job_level = ’1’ then e_wage*1.08 when job_level = ’2’ then e_wage*1.07 when job_level = ’3’ then e_wage*1.06 else e_wage*1.05 end--WHILE CONTINUE BREAK declare @x int @y int @c int select @x = 1 @y=1 while @x < 3 begin print @x--打印变量x 的值 while @y < 3 begin select @c = 100*@x + @y print @c--打印变量c 的值 select @y = @y + 1 end select @x = @x + 1 select @y = 1 end--WAITFOR--例 等待1 小时2 分零3 秒后才执行SELECT 语句 waitfor delay ’01:02:03’ select * from employee--例 等到晚上11 点零8 分后才执行SELECT 语句 waitfor time ’23:08:00’ select * from employee ***SELECT*** select *(列名)from table_name(表名)where column_name operator value ex:(宿主)select * from stock_information where stockid = str(nid)stockname = 'str_name' stockname like '% find this %'
stockname like '[a-zA-Z]%'---------([]指定值的范围)stockname like '[^F-M]%'---------(^排除指定范围)---------只能在使用like关键字的where子句中使用通配符)or stockpath = 'stock_path' or stocknumber < 1000 and stockindex = 24 not stocksex = 'man' stocknumber between 20 and 100 stocknumber in(10,20,30)order by stockid desc(asc)---------排序,desc-降序,asc-升序 order by 1,2---------by列号
stockname =(select stockname from stock_information where stockid = 4)---------子查询
---------除非能确保内层select只返回一个行的值,---------否则应在外层where子句中用一个in限定符
select distinct column_name form table_name---------distinct指定检索独有的列值,不重复
select stocknumber ,“stocknumber + 10” = stocknumber + 10 from table_name select stockname , “stocknumber” = count(*)from table_name group by stockname---------group by 将表按行分组,指定列中有相同的值 having count(*)= 2---------having选定指定的组 select *
from table1, table2
where table1.id *= table2.id--------左外部连接,table1中有的而table2中没有得以null表示
table1.id =* table2.id--------右外部连接
select stockname from table1 union [all]-----union合并查询结果集,all-保留重复行 select stockname from table2 ***insert*** insert into table_name(Stock_name,Stock_number)value(“xxx”,“xxxx”)value(select Stockname , Stocknumber from Stock_table2)---value为select语句
***update*** update table_name set Stockname = “xxx” [where Stockid = 3] Stockname = default Stockname = null Stocknumber = Stockname + 4 ***delete*** delete from table_name where Stockid = 3 truncate table_name-----------删除表中所有行,仍保持表的完整性 drop table table_name---------------完全删除表 ***alter table***---修改数据库表结构
alter table database.owner.table_name add column_name char(2)null.....sp_help table_name----显示表已有特征
create table table_name(name char(20), age smallint, lname varchar(30))insert into table_name select.........-----实现删除列的方法(创建新表)alter table table_name drop constraint Stockname_default----删除Stockname的default约束
***function(/*常用函数*/)***----统计函数----AVG--求平均值 COUNT--统计数目 MAX--求最大值 MIN--求最小值 SUM--求和--AVG use pangu select avg(e_wage)as dept_avgWage from employee group by dept_id--MAX--求工资最高的员工姓名 use pangu select e_name from employee where e_wage =(select max(e_wage)from employee)--STDEV()--STDEV()函数返回表达式中所有数据的标准差--STDEVP()--STDEVP()函数返回总体标准差--VAR()--VAR()函数返回表达式中所有值的统计变异数--VARP()--VARP()函数返回总体变异数----算术函数----/***三角函数***/ SIN(float_expression)--返回以弧度表示的角的正弦 COS(float_expression)--返回以弧度表示的角的余弦 TAN(float_expression)--返回以弧度表示的角的正切 COT(float_expression)--返回以弧度表示的角的余切 /***反三角函数***/ ASIN(float_expression)--返回正弦是FLOAT 值的以弧度表示的角 ACOS(float_expression)--返回余弦是FLOAT 值的以弧度表示的角 ATAN(float_expression)--返回正切是FLOAT 值的以弧度表示的角 ATAN2(float_expression1,float_expression2)
--返回正切是float_expression1 /float_expres-sion2的以弧度表示的角 DEGREES(numeric_expression)--把弧度转换为角度返回与表达式相同的数据类型可为--INTEGER/MONEY/REAL/FLOAT 类型
RADIANS(numeric_expression)--把角度转换为弧度返回与表达式相同的数据类型可为--INTEGER/MONEY/REAL/FLOAT 类型 EXP(float_expression)--返回表达式的指数值 LOG(float_expression)--返回表达式的自然对数值
LOG10(float_expression)--返回表达式的以10 为底的对数值 SQRT(float_expression)--返回表达式的平方根 /***取近似值函数***/ CEILING(numeric_expression)--返回>=表达式的最小整数返回的数据类型与表达式相同可为
--INTEGER/MONEY/REAL/FLOAT 类型
FLOOR(numeric_expression)--返回<=表达式的最小整数返回的数据类型与表达式相同可为
--INTEGER/MONEY/REAL/FLOAT 类型
ROUND(numeric_expression)--返回以integer_expression 为精度的四舍五入值返回的数据
--类型与表达式相同可为INTEGER/MONEY/REAL/FLOAT 类型
ABS(numeric_expression)--返回表达式的绝对值返回的数据类型与表达式相同可为
--INTEGER/MONEY/REAL/FLOAT 类型
SIGN(numeric_expression)--测试参数的正负号返回0 零值1 正数或-1 负数返回的数据类型
--与表达式相同可为INTEGER/MONEY/REAL/FLOAT 类型 PI()--返回值为π 即3.14***936 RAND([integer_expression])--用任选的[integer_expression]做种子值得出0-1 间的随机浮点数
----字符串函数----ASCII()--函数返回字符表达式最左端字符的ASCII 码值 CHAR()--函数用于将ASCII 码转换为字符
--如果没有输入0 ~ 255 之间的ASCII 码值CHAR 函数会返回一个NULL 值 LOWER()--函数把字符串全部转换为小写 UPPER()--函数把字符串全部转换为大写 STR()--函数把数值型数据转换为字符型数据 LTRIM()--函数把字符串头部的空格去掉 RTRIM()--函数把字符串尾部的空格去掉
LEFT(),RIGHT(),SUBSTRING()--函数返回部分字符串
CHARINDEX(),PATINDEX()--函数返回字符串中某个指定的子串出现的开始位置 SOUNDEX()--函数返回一个四位字符码
--SOUNDEX函数可用来查找声音相似的字符串但SOUNDEX函数对数字和汉字均只返回0 值
DIFFERENCE()--函数返回由SOUNDEX 函数返回的两个字符表达式的值的差异--0 两个SOUNDEX 函数返回值的第一个字符不同--1 两个SOUNDEX 函数返回值的第一个字符相同--2 两个SOUNDEX 函数返回值的第一二个字符相同--3 两个SOUNDEX 函数返回值的第一二三个字符相同--4 两个SOUNDEX 函数返回值完全相同
QUOTENAME()--函数返回被特定字符括起来的字符串 /*select quotename('abc', '{')quotename('abc')运行结果如下
---{ {abc} [abc]*/ REPLICATE()--函数返回一个重复character_expression 指定次数的字符串 /*select replicate('abc', 3)replicate('abc',-2)运行结果如下
----------------------abcabcabc NULL*/ REVERSE()--函数将指定的字符串的字符排列顺序颠倒 REPLACE()--函数返回被替换了指定子串的字符串 /*select replace('abc123g', '123', 'def')运行结果如下
----------------------abcdefg*/ SPACE()--函数返回一个有指定长度的空白字符串 STUFF()--函数用另一子串替换字符串指定位置长度的子串----数据类型转换函数----CAST()函数语法如下
CAST()(
CONVERT()(
------------------------------------------199 Jan 15 2000----日期函数----DAY()--函数返回date_expression 中的日期值 MONTH()--函数返回date_expression 中的月份值 YEAR()--函数返回date_expression 中的年份值 DATEADD(
--函数返回指定日期date 加上指定的额外日期间隔number 产生的新日期 DATEDIFF(
DATENAME(
COALESCE()--函数返回众多表达式中第一个非NULL 表达式的值
COL_LENGTH(<'table_name'>, <'column_name'>)--函数返回表中指定字段的长度值
COL_NAME(,
IDENTITY(
/*select identity(int, 1, 1)as column_name into newtable from oldtable*/ ISDATE()--函数判断所给定的表达式是否为合理日期
ISNULL(
ISNUMERIC()--函数判断所给定的表达式是否为合理的数值 NEWID()--函数返回一个UNIQUEIDENTIFIER 类型的数值 NULLIF(
以上是本人收藏的,作者我也不记得了。
第三篇:数据库语句
一、基础
1、说明:创建数据库
Create DATABASE database-name
2、说明:删除数据库
drop database dbname
3、说明:备份sql server
---创建备份数据的 device
USE master
EXEC sp_addumpdevice „disk„, „testBack„, „c:mssql7backupMyNwind_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:
全外连接:不仅包括符号连接表的匹配行,还包括两个连接表中的所有记录。
二、提升
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 3
23、说明:初始化表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
三、技巧 1、1=1,1=2的使用,在SQL语句组合时用的较多
“where 1=1” 是表示选择全部 “where 1=2”全部不选,如:
if @strWhere!=„
begin
set @strSQL = „select count(*)as Total from [„ + @tblName + „] where „ + @strWhere
end
else
begin
set @strSQL = „select count(*)as Total from [„ + @tblName + „]„
end
我们可以直接写成
set @strSQL = „select count(*)as Total from [„ + @tblName + „] where 1=1 安定 „+ @strWhere
2、收缩数据库
--重建索引
DBCC REINDEX
DBCC INDEXDEFRAG
--收缩数据和日志
DBCC SHRINKDB
DBCC SHRINKFILE
3、压缩数据库
dbcc shrinkdatabase(dbname)
4、转移数据库给新用户以已存在用户权限
exec sp_change_users_login „update_one„,„newname„,„oldname„
go
5、检查备份集
RESTORE VERIFYONLY from disk=„E:dvbbs.bak„
6、修复数据库
Alter DATABASE [dvbbs] SET SINGLE_USER GO DBCC CHECKDB(„dvbbs„,repair_allow_data_loss)WITH TABLOCK GO Alter DATABASE [dvbbs] SET MULTI_USER GO
7、日志清除 SET NOCOUNT ON DECLARE @LogicalFileName sysname, @MaxMinutes INT, @NewSize INT USE tablename--要操作的数据库名
Select @LogicalFileName = „tablename_log„,--日志文件名 @MaxMinutes = 10,--Limit on time allowed to wrap log.@NewSize = 1--你想设定的日志文件的大小(M)--Setup / initialize DECLARE @OriginalSize int Select @OriginalSize = size FROM sysfiles Where name = @LogicalFileName
Select „Original Size of „ + db_name()+ „ LOG is „ +
CONVERT(VARCHAR(30),@OriginalSize)+ „ 8K pages or „ +
CONVERT(VARCHAR(30),(@OriginalSize*8/1024))+ „MB„
FROM sysfiles
Where name = @LogicalFileName
Create TABLE DummyTrans
(DummyColumn char(8000)not null)
DECLARE @Counter INT,@StartTime DATETIME,@TruncLog VARCHAR(255)
Select @StartTime = GETDATE(),@TruncLog = „BACKUP LOG „ + db_name()+ „ WITH TRUNCATE_ONLY„
DBCC SHRINKFILE(@LogicalFileName, @NewSize)
EXEC(@TruncLog)
--Wrap the log if necessary.WHILE @MaxMinutes > DATEDIFF(mi, @StartTime, GETDATE())--time has not expired
AND @OriginalSize =(Select size FROM sysfiles Where name = @LogicalFileName)
AND(@OriginalSize * 8 /1024)> @NewSize
BEGIN--Outer loop.Select @Counter = 0
WHILE((@Counter < @OriginalSize / 16)AND(@Counter < 50000))
BEGIN--update
Insert DummyTrans VALUES(„Fill Log„)Delete DummyTrans Select @Counter = @Counter + 1 END EXEC(@TruncLog)END Select „Final Size of „ + db_name()+ „ LOG is „ + CONVERT(VARCHAR(30),size)+ „ 8K pages or „ + CONVERT(VARCHAR(30),(size*8/1024))+ „MB„ FROM sysfiles Where name = @LogicalFileName Drop TABLE DummyTrans SET NOCOUNT OFF
8、说明:更改某个表
exec sp_changeobjectowner „tablename„,„dbo„
9、存储更改全部表
Create PROCEDURE dbo.User_ChangeObjectOwnerBatch @OldOwner as NVARCHAR(128), @NewOwner as NVARCHAR(128)AS DECLARE @Name as NVARCHAR(128)DECLARE @Owner as NVARCHAR(128)
DECLARE @OwnerName as NVARCHAR(128)DECLARE curObject CURSOR FOR select „Name„ = name, „Owner„ = user_name(uid)from sysobjects where user_name(uid)=@OldOwner order by name OPEN curObject FETCH NEXT FROM curObject INTO @Name, @Owner WHILE(@@FETCH_STATUS=0)BEGIN if @Owner=@OldOwner begin set @OwnerName = @OldOwner + „.„ + rtrim(@Name)exec sp_changeobjectowner @OwnerName, @NewOwner end--select @name,@NewOwner,@OldOwner FETCH NEXT FROM curObject INTO @Name, @Owner END close curObject deallocate curObject GO
10、SQL SERVER中直接循环写入数据 declare @i int set @i=1 while @i<30 begin insert into test(userid)values(@i)set @i=@i+1 end
第四篇:mysql数据库常用语句
mysql数据库常用语句
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:mssql7backupMyNwind_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 电脑
A 光盘
B 光盘
A 手机
B 手机
C
23、说明:初始化表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(Rnd*499)+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(Rnd*499)+ 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对象,代表一 个错误信息。
第五篇:数据库语句总结
实验四
1、建立数据库
createdatabaseTSJY on(name=TSJY, filename='E:TSJY.mdf', size=10MB, maxsize=100MB, filegrowth=1MB)logon(name='TSJY_log', filename='E:TSJYT.ldf', size=5MB, maxsize=50MB, filegrowth=1MB);
2、建表
useS_T createtableStudent(Snochar(11)notnullprimarykey, Snamechar(8)notnull, Ssexchar(2)notnull, SageTinyintnotnull, Sdeptchar(10)notnull check(Ccredit >=1 and Ccredit <=6)(学分取1-6的整数)check(Grade >=1 and Grade <=100)(成绩在0-100之间));
3、将course表的cpno的长度改为3 altertableCoursealtercolumncpnochar(3)
4、给student表中的ssex列的增加默认约束,默认值为“男”
altertableStudentaddconstraintdf_Student_Ssex default'男'forSsex;
5、为course表增加一列teacher,char(8)altertableCourseaddteacherchar(8);
6、删除course表的teacher列
altertableCoursedropcolumnteacher;
7、插入数据
insertintoS(SNO,SNAME,STATUS,CITY)values('S1','精益','20','天津'),('S2','盛锡','10','北京'),('S3','东方红','30','北京'),('S4','丰泰盛','20','天津'),('S5','为民','50','上海');
8、为S表设一个主键
altertableSaddprimarykey(SNO);
9、为S表增加一个唯一索引s_sno createuniqueindexs_snoonS(SNO);为SPJ表增加索引spj_sno_pno_jno,要求索引列sno用降序,pno、jno用升序
createindexspj_sno_pno_jnoonSPJ(SNOdesc,pno,jno);为HISD的Doctor表按医生ID(dID)升序建立唯一索引
createuniqueindex Dindex on Doctor(dID)
为HISD的Doctor表按医生ID(dID)降序建立唯一索引
createuniqueindex Dindex on Doctor(dID desc)
10、为SPJ表加外键约束(若建表时已经建立外键,可以先删除某个已有外键,重新建立
altertableSPJaddconstraintFK_SNOforeignkey(SNO)referencesS(SNO);altertableSPJaddconstraintFK_PNOforeignkey(PNO)referencesP(PNO);altertableSPJaddconstraintFK_JNOforeignkey(JNO)referencesJ(JNO);
11、为SPJ表增加列qty的检查约束,要求qty>0 altertableSPJaddconstraintCK_SPJ_qtycheck(qty>0);
12、删除SPJ表的检查约束CK_SPJ_qty altertableSPJdropconstraintCK_SPJ_qty
13、查询全体学生的学号与姓名
select Sno,Sname FROM Student
14、查询全体学生的基本信息
select * FROM Student
15、查询全体学生的姓名、出生年份及所在系
uses_t SELECTSname,year(getdate())-sagebirthyear,sdept FROMstudent
16、查询选修了课程的学生学号。(掌握distinct的用法)
SELECTdistinctSnoFROMSC
17、查询年龄在18-20岁间的06级的学生姓名及学号
SELECTSname,SnoFROMstudentWHERESageBETWEEN 18 AND 20 ANDSNOlike'2006%'
18、查询信息系(IS)、数学系(MA)和计算机科学系(CS)学生的姓名和性别
SELECT Sname,Ssex
FROM Student WHERE Sdept IN('IS','MA','CS');
19、查找所有姓李的学生的信息
SELECT*FROMstudentwhereSnamelike'李%' 20、查找所有已选修但没有成绩的学生学号。
selectSno fromSC whereGradeisnull
21、对所有已选课的学生按学号进行升序排列,同时要求每个学生按成绩降序排列。(掌握order by的用法)
selectSno,Grade fromSC orderbySno,Gradedesc
22、统计每门课程的选课人数。(掌握group by用法)
selectcourse.Cname,COUNT(sc.Cno)as人数
fromcourse,SC wherecourse.Cno=SC.Cno groupbyCname
23、统计重名的学生姓名及人数。
selectSname,COUNT(*)as人数 fromstudent groupbySname havingCOUNT(*)>1
24、统计男生与女生的人数。
selectssex,COUNT(sno)cnt fromstudent groupbyssex
25、查询“计算机系”年龄最大的学生的基本信息。
select* fromstudenta whereSage=(selectMAX(Sage)fromstudentb whereSdept='计算机系')
实验五
26、打出所有供应商的姓名和所在城市。
useSPJ selectSNAME,CITY froms
27、找出所有零件的名称及重量。
useSPJ selectPNAME,WEIGHT fromp
28、统计每个供应商供应的各种零件数量。
selectPNAME,COUNT(PNAME)cnt fromP,SPJ whereP.PNO=SPJ.PNO groupbyPNAME
29、求供应工程J1零件的供应商号码SNO。
useSPJ selectdistinctsno fromspj wherejno='j1' 30、求供应工程J1零件P1的的供应商号码SNO。
useSPJ selectdistinctsno fromspj wherejno='j1'andpno='p1' 实验六
31、求所在的城市为直辖市的供应商的名称。
selectSnamefromswherecityin('北京','天津','重庆','上海')
32、求供应红色零件的供应商号,零件号和数量。
selectSNO,PNO,QTYFROMSPJ wherePnoIN(SELECTpnoFROMp whereColor='红')
33、没有使用天津供应商生产的红色零件的工程号JNO。
selectdistinctJNOfromSPJwhereJNOnotin(selectJNOfromSPJ,P,SwhereSPJ.PNO=P.PNO
andSPJ.SNO=S.SNOandP.COLOR='红'andS.CITY='天津')
34、求供应数量超过300的供应信息,包括供应商名,零件名,项目名和供应数量。
selectSNAME,PNAME,JNAME,QTYfromSPJ,S,P,J whereS.SNO=SPJ.SNOandP.PNO=SPJ.PNO
andJ.JNO=SPJ.JNOandQTY>300
35、至少使用了供应商S1所供应的全部零件的工程号JNO。
selectPNOfromSPJwhereSNO='S1';selectJNOfromSPJwhere(PNO='P1'andSNO='S1')intersectselectJNOfromSPJwhere(PNO='P2'andSNO='S1')
36、找出使用供应商S1所提供零件的工程号码。
selectdistinctJNOfromSPJwhereSNO='S1'
37、找出工程项目J2使用的各种零件的名称及其重量。
selectPNAME,WEIGHTfromP,SPJ whereSPJ.PNO=P.PNOandJNO='J2'
38、找出上海厂商供应的所有零件号码。
selectPNOfromS,SPJwhereS.SNO=SPJ.SNO andS.CITY='上海'groupbyPNO
39、找出使用上海产的零件的工程名称。
selectJNOfromS,SPJ whereS.SNO=SPJ.SNOandS.CITY='上海' groupbyJNO
40、找出没有使用天津产的零件的工程号码。
selectJNOfromSPJwhereSPJ.JNOnotin(selectJNOfromS,SPJwhereS.SNO=SPJ.SNOands.CITY='天津')
41、查询‘IS’系学生的学号、所选课程名称及该门课程的成绩。
selectSC.Sno,Cname,GradefromSC,Course,student wherestudent.Sno=SC.SnoandCourse.Cno=SC.CnoandSdept='数学系'
42、查询‘CS’系成绩不及格的学生姓名。
selectdistinctSnamefromStudent,SC wherestudent.Sno=SC.SnoandGrade<60 andSdept='计算机系'
43、查询每一门的课程的间接先修课程。
selectfirst.Cno,second.Cpno fromCoursefirst,Coursesecond wherefirst.Cpno=second.Cno
44、查询所有的学生的选课情况,要求没有选课的情况也能在结果显示出来。
selectStudent.*,sc.CnoFROMStudentLEFTJoinSCon SC.Sno=Student.Sno
45、查询每个学生超过他选修课程平均成绩的课程号,课程名称及成绩。
selectx.Cno,Cname,Grade
fromSCx,Coursewherex.Cno=Course.CnoandGrade>(selectAVG(Grade)fromSCywherex.Sno=y.Sno)
46、查询‘IS’系的学生以及‘数据库系统原理’成绩在70~80之间的学生。
selectSnamefromStudent,Course,SC
whereStudent.Sno=SC.SnoandCourse.Cno=SC.Cno andCourse.Cname='数据库系统原理'andGradebetween'70'and'80' andSdept='数学系'
47、用两种方法实现:选修了001课程和002课程的学生学号。
方法一:selectSnofromSCwhereCno='1'intersect selectSnofromSCwhereCno='2' 方法二:selectSnofromSCwhereCno='2'andSnoin(selectSnofromSCwhereCno='1')
48、查询至少选修了学生001课程和002课程的学生学号。
selectdistinctSnofromSCAwherenotexists(select*fromSCBwhere(Cno='1'orCno='2')andnotexists(select*fromSCCwhereC.Sno=A.Sno andC.Sno=B.Sno))实验七
49、建一新表,并将所有学生的学生的学号、平均成绩增加到其中。
createtableavgrade(snochar(11)primarykeynotnull, avgranumeric(3,1))insertintoavgrade(sno,avgra)selectsno,avg(Grade)fromSCgroupbySno 50、假设所有的学生都选了‘008‘课程,如何将记录插入选修表中。
insertintoSC(sno,cno)selectsno,'008' fromstudent
51、将所有CS系的成绩不及格学生的成绩加5分。
updateSC setgrade=grade+5 where'计算机系'=(selectsdept fromstudent,sc
wherestudent.Sno=sc.Snoandgrade<60)
52、删除选了‘数据库’数据库的学生的选课记录。
delete fromSC wherecno=(selectcnofromcoursewhereCname='数据库')
53、删除所有的学生记录。
delete
fromstudent
54、把全部红色零件的颜色改成蓝色。
updatep setcolor='蓝' wherecolor='红'
55、由S5供给J4的零件P6改为由S3供应。
updatespj setsno='s3' wheresno='s5'andjno='j4'andpno='p6'
56、从供应商关系中删除供应商号是S2的记录,并从供应情况关系中删除相应的记录。
deletefroms wheresno='s2' deletefromSPJ wheresno='s2'
57、请将(S2,J6,P4,200)插入供应情况关系。
insertintospj(sno,pno,jno,qty)values('s2','j6','p4','200')
实验八
58、为“图书”的“分类号”建立一个索引ts_flh。
createindexts_flhontushu(fenleihao)
59、为“借阅”表建立一唯一索引jycx,要求按“借书证号”升序,“借书日期”降序。
createindexjycxonjieyue(cardID,jdatedesc)
60、为“管理员”表建立一检查约束,要求“基本工资”在(100,10000)之间。
altertableadministratoraddconstraintCK_administrator_gongzi
check(gongzibetween 100 and 10000)
61、建立“借阅”与“图书”及“读者”表之间的参照关系。(增加借阅表的外键约束)
altertablejieyueaddconstraintFK_IDforeign key(ID)referencestushu(ID)altertablejieyueaddconstraintFK_cardIDforeign key(cardID)referencesduzhe(cardID)
62、查询出“图书”数据库中作者姓“刘”的所有图书。SELECT*FROMtushuwherewriterlike'刘%'
63、查询出“图书”数据库中高等教育出版社出版的、单价低于25元的所有种类的图书。
select*fromtushuwhereaddress='高等教育出版社'andprice<25 64、求出“读者”数据库中的总人数。
selectCOUNT(*)fromduzhe 65、求出“图书”数据库中的所有图书的最高价、最低价和平均价。
selectMAX(price)as最高价,MIN(price)as最低价,AVG(price)as平均价fromtushu 66、求出“借阅”库中借书证号为“112”的所借图书的册数。
selectcardID,COUNT(*)as册数fromjieyuewherecardID='112'groupbycardID 67、按分类号降序显示“图书”库中各种图书的分类号、书名合作者。
selectfenleihao,bookname,writerfromtushuorderbyfenleihaodesc 68、按单价升序显示“图书”库中的高等教育出版社出版的所有图书。
select*fromtushuwhereaddress='高等教育出版社'orderbyprice
69、按单价升序显示出“图书”库中由清华大学出版社和电子工业出版社出版的所有图书。
select*fromtushuwhere(address='高等教育出版社'oraddress='电子工业出版社')orderbyprice 70、按书名和作者分组统计出“图书”库中每种图书的数量。
selectbookname,writer,COUNT(*)as数量fromtushugroupbybookname,writer 71、统计出“图书”数据库中15至25元之间的图书数量。
selectcount(*)as数量fromtushuwherepricebetween 15 and 25 72、查询出“图书”数据库中书名中含有“应用基础”字串的所有图书。
select*fromtushuwherebooknamelike'应用基础%' 73、分组统计出“借阅”数据库中每一种借书证号所借图书的册数。
selectcardID,COUNT(*)as册数fromjieyuegroupbycardID 74、按单位分组统计出“读者”数据库中每个单位的人数。
selectdanwei,COUNT(*)as人数fromduzhegroupbydanwei
75、分组统计出1997年底以前借阅不低于2本图书的借书证号和数量。
selectcardID,COUNT(*)as人数fromjieyuewherejdate<'1997-12-31' groupbycardIDhavingcount(*)>=2 76、联接查询“借阅”库和“图书”,得到借阅每一本书的信息。
select*fromtushu,jieyuewheretushu.ID=jieyue.ID
77、联接查询“借阅”库和“读者”库,得到每一个以借阅者的借书证号、姓名、单位。
selectduzhe.cardID,name,danweifromduzhe,jieyuewhereduzhe0..cardID=jieyue.cardID
78、联接查询“借阅”、“读者”、“图书”三个库,得到每一本所借图书的读者的借书证号、姓名、单位、书名。
selectduzhe.cardID,name,danwei,booknamefromduzhe,jieyue,tushu
whereduzhe.cardID=jieyue.cardIDandtushu.ID=jieyue.ID 79、从“图书”数据库中(通过对“借阅”库的嵌套)查询出所有被借图书的信息。
select*fromtushuwhereIDin(selectIDfromjieyue)80、按单位分组统计出被借图书的数量。
selectdanwei,COUNT(*)as数量fromduzhe,jieyuewhereduzhe.cardID=jieyue.cardIDgroupbydanwei 81、按单位分组统计出借阅图书的人数。
selectdanwei,COUNT(*)as人数fromduzhewherecardIDin(selectdistinctcardIDfromjieyue)groupbydanwei 82、从读者库中查询出每个借阅图书的读者的情况。
select*fromduzhewherecardIDin(selectdistinctcardIDfromjieyue)83、查询‘管理员’表中职称为教授或副教授,并且在1950年(含该年)以后出生的所有职工记录。
select*fromadministratorwherezhicheng='教授'orzhicheng='副教授'andbirth<=1950 84、查询‘管理员’表中基本工资在250到380元之间的职工记录。
select*fromadministratorwheregongzibetween 250 and 380 85、将基本工资小于500的管理员,工资加上100元。
updateadministratorsetgongzi=gongzi+100 wheregongzi<500
86、列出藏书在十本以上的图书(书名、作者、出版社)。
selectbookname,writer,addressfromtushuwherecangshuliang>10
87、“数据库系统原理教程,王珊编,清华大学出版社,1998年出版”还有几本?
selectkucunfromtushuwherebookname='数据库系统'andwriter='王瑞'andaddress='清华大学出版社' 实验九
88、请为三建工程项目建立一个供应情况的视图,包括供应商代码(SNO)、零件代码(PNO)、供应数量(QTY)。针对该视图完成下列查询:
CREATEVIEWVSPASSELECTSNO,PNO,QTYFROMSPJ,JWHERESPJ.JNO=J.JNOANDJ.JNAME='三建'
89、找出三建工程项目使用的各种零件代码及其数量。
SELECTPNO,sum(QTY)FROMVSPgroupbyPNO 90、找出供应商S1的供应情况。
SELECTdistinct*FROMVSPWHERESNO='S1' 91、建立信息系学生的视图(用with check option子句),并向该视图中插入类似以下的语句:
insert into is_student1(sno,sname,sage)values(‘20051100101’,‘王一’,20)
是否合理?如何更改?
createviewIS_student as selectsno,sname,sagefromstudent wheresdept='IS' withcheckoption 不合理(sno,sname,sage)不用
92、建立信息系选修了001号课程的学生的视图。
createviewIS_S1 as selectstudent.sno,sname,gradefromstudent,sc wheresdept='IS'andstudent.sno=sc.snoandcno='1' 93、在第(2)题创建的视图的基础上建立信息系选修了1号课程且成绩在90分以上的学生的视图。
createviewIS_S2 as
selectstudent.sno,sname,gradefromstudent,sc wheresdept='IS'andstudent.sno=sc.snoandcno='2'andGrade>=90 94、试图删除“选修”表(SC表),看看第(2)题与第(3)题建立的视图是否存在。
deletefromSC 不存在