如何把删除数据库所有表中的很多表的数据删除

数据库问题:多个表中合并去掉重复项(转)
两个表合并起来,去掉某行相同的项,正好把多表查询系统复习一下:
多表查询 (也叫连接查询,此处为基于两个表的连接查询)如果一个查询需要对多个表进行操作就称为连接查询,连接查询的结果集或结果称为表之间的连接.连接查询实际上是通过各个表之间共同列的关联性来查询数据的,它是关系查询最主要的特征.select 表1.字段名1,表2.字段名2,...from 表1,表2where 连接条件SQL-92标准所定义的FROM子句的连接语法格式为:FROM 表名 join_type 表名 [ON (连接条件)]连接操作中的ON (连接条件) 子句指出连接条件,它由被连接表中的列和比较运算符、逻辑运算符等构成。连接查询分类:1.自连接查询,对同一个表进行连接操作2.内连接查询,&又分为:自然连接、等值连接、不等值连接三种&3.外连接查询,&又分为:左外连接、右外连接、全外连接三种&4.交叉连接查询,也作无条件查询。5.联合查询
----------------------------一。自连接查询: 一个表自己与自己建立连接称为自连接或自身连接。&&&& 进行自连接就如同两个分开的表一样,可以把一个表的某一行与同一表中的另一行连接起来。例:表sclass中有三个字段,选学课程编号cno、学号sno、成绩degree查询选学&101&课程的成绩高于&9505201&号学生成绩的所有学生记录,并按成绩从高到低排列。select x.* from sclass x,sclass yo=''101'' and x.degree&y.degree and y.sno=''9505201'' o=''101''order by x.degree desc----------------------------二。内连接(INNER JOIN):内连接是最常用的一种连接方式,它只返回两个数据集合之间匹配关系的那些行.将位于两个互相交叉的数据集合中重叠部分以内的那些数据行连接起来.内连接(INNER JOIN)使用比较运算符进行表间某(些)列数据的比较操作,并列出这些表中与连接条件相匹配的数据行。根据所使用的比较方式不同,内连接查询操作列出与连接条件匹配的数据行,它使用比较运算符比较被连接列的列值。语法:select 字段名列表 from 表名 [inner] join 表名 on 连接条件 [where 条件表达式]例:select 学生表.学号,学生表.姓名,学生表.班级代号,成绩表.课程代号,成绩表.课程成绩from 学生表 INNER JOIN 成绩表on 学生表.学号=成绩表.学号where 学生表.班级代号=''200201''select x.sno,x.o,y.degree from student xINNER join sclass y on x.sno=y.sno where x.sclass=''95文秘1''&&&& 内连接分三种:&&&& 1、等值连接:所谓等值连接,是指表之间通过&等于&关系连接起来,产生一个临时表,然后对该临时表进行处理后生成最终结果。其查询结果中列出被连接表中的所有列,包括其中的重复列。(1)查询所有学生的sno,cname,degree列:SELECT x.ame,x.degreeFROM score x,course yo(2)查询&95033&班所选课程的平均分:o,avg(y.degree) as &平均分&FROM student x,score yWHERE x.class=''95033'' and x.sno=y.sno group o(3)查询所有学生的student,score表信息:select x.*,y.* from student x,score y where x.sno=y.sno用等值连接列出authors和publishers表中位于同一城市的作者和出版社:SELECT * FROM authors AS a INNER JOIN publishers AS p ON a.city=p.city&&&& 2、不等值连接:是指表之间的连接关系不是&等于&,而是关系。这些运算符包括&、&=、&=、&、!&、!&和&&。(1)查询所有学生的sno,cno,rank列:select sno,cno,rankfrom score,gradewhere degree between low and upp order by rank(2)select x.sno,x.o,y.degreefrom student x,score ywhere x.sno!=y.sno&&&& 3、自然连接:在等值连接中消除重复列就是自然连接。(1)select x.sno,x.o,y.degreefrom student x,scorewhere x.sno=y.sno用自然连接,在选择列表中删除authors 和publishers 表中重复列(city和state):SELECT a.*?p.pub_id?p.pub_name?p.countryFROM authors AS a INNER JOIN publishers AS p ON a.city=p.city
----------------------------三。外连接(OUTER JOIN):与内连接不同的是,外连接不只列出与连接条件相匹配的行,而是列出左表(左外连接时)、右表(右外连接时)或两个表(全外连接时)中所有符合搜索条件的数据行。外连接是对内连接的扩充,除了将两个数据集合中重叠部分以内的那些数据行连接起来之外,还可以根据要求返回左侧或右侧数据集合中非匹配的数据或全部的数据.即 左外连接(LEFT OUTER JOIN);&& 右外连接(RIGHT OUTER JOIN);全部连接(FULL OUTER JOIN).外连接返回的结果集中的一些数据看起来和内连接返回的数据完全一样,但有一些数据也与内连接返回的数据不同,这些数据行的某些部分是来自于表中的数据,另一部分是NULL值,产生这些NULL值的原因是因为另一表中不包含与指定表相匹配的数据项内连接时,返回查询结果集合中的仅是符合查询条件( WHERE 搜索条件或 HAVING 条件)和连接条件的行。而采用外连接时,它返回到查询结果集合中的不仅包含符合连接条件的行,而且还包括左表(左外连接时)、右表(右外连接时)或两个边接表(全外连接)中的所有数据行。注: 外连接强以使不满足条件的记录也出现在结果集中。外连接语法:Select 字段名列表 from 表名 Left|Right|Full [Outer] join 表名 ON 连接条件&&&& 外连接分为:&&&& 1。左外连接(LEFT OUTER JOIN或LEFT JOIN):在结果表中包含第一个表中满足条件的所有记录。如果是在连接条件上匹配的记录,则第二个表返回相应值,否则第二个表返回空值。select 学生表.学号,学生表.姓名,成绩表.课程代号,成绩表.课程成绩from 学生表 left outer join 成绩表on 学生表.学号=成绩表.学号&&&& 2。右外连接(RIGHT OUTER JOIN或RIGHT JOIN):在结果表中包含第二个表中满足条件的所有记录。如果是在连接条件上匹配的记录,则第一个表返回相应值,否则第一个表返回空值。select 学生表.学号,学生表.姓名,成绩表.课程代号,成绩表.课程成绩from 学生表 right outer join 成绩表on 学生表.学号=成绩表.学号&&&& 3。全外连接(FULL OUTER JOIN或FULL JOIN):&&在结果表中包含两个表中满足条件的所有记录。如果是在连接条件上匹配的元组,则另一个表返回相应值,否则另一个表返回空值。select 学生表.学号,学生表.姓名,成绩表.课程代号,成绩表.课程成绩from 学生表 full outer join 成绩表on 学生表.学号=成绩表.学号例子:SELECT a.*,b.* FROM student as a left JOIN sclass as bON a.sno=b.sno and a.sno=''9502101''goSELECT a.*,b.* FROM student as a right JOIN sclass as bON a.sno=b.sno and a.sno=''9502101''goSELECT a.*,b.* FROM student as a full JOIN sclass as bON a.sno=b.snogo----------------------------四。交叉连接:交叉连接不使用任何连接条件来限制结果集合,将各表的记录以&笛卡尔&积的方式组合起来,是分别使用两个数据源中的行以所有可能的方式进行组合,即数据集中的每一行都要与另一表每一行组成一个新的行.
例如:一表中有三条记录,另一表有4条记录,交叉连接后,结果集合将由12条记录组成.交叉连接(CROSS JOIN)没有WHERE 子句,它返回被连接的两个表所有数据行的笛卡尔积,返回到结果集合中的数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。例,titles表中有6类图书,而publishers表中有8家出版社,则下列交叉连接检索到的记录数将等于6*8=48行。select * from student,sclassSELECT * FROM student a CROSS JOIN sclass ORDER BY a.sno----------------------------五。联合查询UNION运算符可以将两个或两个以上上SELECT语句的查询结果集合合并成一个结果集合显示,即执行联合查询。
UNION的语法格式为:select_statementUNION [ALL] selectstatement[UNION [ALL] selectstatement][&n]其中selectstatement为待联合的SELECT查询语句。ALL选项表示将所有行合并到结果集合中。不指定该项时,被联合查询结果集合中的重复行将只保留一行。联合查询时,查询结果的列标题为第一个查询语句的列标题。因此,要定义列标题必须在第一个查询语句中定义。要对联合查询结果排序时,也必须使用第一查询语句中的列名、列标题或者列序号。在使用UNION 运算符时,应保证每个联合查询语句的选择列表中有相同数量的表达式,并且每个查询选择表达式应具有相同的数据类型,或是可以自动将它们转换为相同的数据类型。在自动转换时,对于数值类型,系统将低精度的数据类型转换为高精度的数据类型。在包括多个查询的UNION语句中,其执行顺序是自左至右,使用括号可以改变这一执行顺序。
例如:查询1 UNION (查询2 UNION 查询3)select topicbody,posttime from bbs_topicunion allselect replybody,posttime from bbs_reply----------------------------六。复杂查询
---复合连接select a.学号,a.姓名,b.课程代号,b.课程成绩,c.课程名称,d.教师代号from 学生表 a,成绩表 b,课程表 c,教学表 dwhere (a.学号=b.学号)&&& and (b.课程代号=c.课程代号)&&& and(c.课程代号=d.课程代号)三个表以上的连接SELECT dbo.kb.xq, dbo.kbk.kcmc, dbo.kbk.lbdh, dbo.kbk.jsmc, dbo.kb.jse, dbo.bj.bj,&&&&&&& dbo.kb.jc, 2 AS num, dbo.kb.zc,&&&&&&& CASE dbo.kb.ds WHEN ''单'' THEN ''1'' WHEN ''双'' THEN ''2'' WHEN '' '' THEN ''0'' END AS ds,&&&&&&&& dbo.kb.zc1, dbo.kb.zc2FROM dbo.kb INNER JOIN&&&&&&& dbo.bj ON dbo.kb.bh = dbo.bj.bh INNER JOIN&&&&&&& dbo.kbk ON dbo.kb.xq = dbo.kbk.xq AND dbo.kb.bh = dbo.kbk.bh AND&&&&&&& dbo.kb.kcdm = dbo.kbk.kcdmWHERE (dbo.kb.jc = 1) OR&&&&&&& (dbo.kb.jc = 3) OR&&&&&&& (dbo.kb.jc = 5) OR&&&&&& (dbo.kb.jc = 7) OR&&&&&& (dbo.kb.jc = 9) OR&&&&&& (dbo.kb.jc = 11)
----------------------------总结:无论哪种连接都不能对text、ntext和image数据类型列进行直接连接,但可以对这三种列进行间接连接。例如:SELECT p1.pub_id?p2.pub_id?p1.pr_infoFROM pub_info AS p1 INNER JOIN pub_info AS p2ON DATALENGTH(p1.pr_info)=DATALENGTH(p2.pr_info)
看了上面这么多的方法,其实要解决两个表中重复数据的问题,转换个思路便可以很容易解决,把其中一个表中与另一表中重复的数据删除即可,用删除语句加条件,看来解决问题的办法是很多的,选择比努力更重要。
请各位遵纪守法并注意语言文明PHPMYADMIN使用技巧:如何快速批量删除Mysql数据库中的数据表 - 无忧主机
自始至终,以提供稳定、高性能的美国、香港免备案php虚拟主机产品为己任,以用户极高满意为生存价值,以产品的可靠性为生命线,以网络零中断为终身奋斗目标
一个mysql数据库中,是可以同时安装几个网站程序的,在使用中,我们只需要用不同的数据库表前缀来区分就可以了。但随着我们不断调试,那么数据库中的表,就会一天天的多起来,如一个一个的删除就很麻烦、很辛苦。那么,我们接下来就来一起了解下,如何将mysql数据库中的表快速删除的一个方法。无忧主机()小编这里有两个小技巧,可以帮助您实现这个操作。详细操作:
一、使用phpmyadmin工具批量删除mysql数据库表
使用phpmyadmin数据库管理工具进行删除,这是一个传统的方法,在任何中,你都可以操作。下面是操作过程介绍:
1、登录phpmyadmin。选择你的mysql数据库名进入——点击结构——选择您要删除的数据表——“选中项”中选择删除,执行删除表操作。如下图:
二、使用php脚本完成批量删除
无忧主机()小编从网上找了一段php代码,也可以帮我们快速实现删除。如果你对phpmyadmin工具“敏感”,可以使用下面的方式来实现快速删除mysql数据库表。 在下面的代码复制到记事本后,配置过程中你要注意几个问题:
1、 正确配置你mysql数据库信息。这个你可以直接咨询你的空间商就可以获得啦。
2、 正确设置要删除的数据库表前缀,这个非常重要,填写错误,将操作错误。请你务必确认你的数据库表前缀哦,数据库表前缀你可以在phpmyadmin中查询到。一般都是xx_开头的。 设置好后,将这段代码另存为.php文件(如51php.php)然后上传到您空间的网站根目录(public_html)。上传完毕,直接用域名/51php.php,就可以删除了。 代码如下:
//设置数据库连接信息。数据库服务器地址,数据库用户名,数据密码
mysql_connect('localhost','数据库用户名','数据库密码');
//设置查询的数据库名称
mysql_select_db('数据库名称');
$rs=mysql_query('show tables');
while($arr=mysql_fetch_array($rs))
//设置要批量删除的数据库表前缀,如:51php
$TF=strpos($arr[0],'51php_');
if($TF===0){
$FT=mysql_query(&drop table $arr[0]&);
echo &$arr[0] 删除成功!&br&&;
以上两种方法都可批量删除数据表,特别提醒一下,数据是无价的,操作数据表的时候一定要先做好备份。免得误删除数据是无法恢复的。如果您不会备份,麻烦您参考:
纯Linux环境下高端免备案【香港独立IP地址】,仅仅只需199元一年起。商务中国域名核心代理直销50元注册国际顶级域名。
本文地址:/mysql/7443.html
喜欢本文或觉得本文对您有帮助,请分享给您的朋友 ^_^
无忧主机资质:(十二年旗舰品牌)
相关技术帮助文档
技术帮助文档分类&&完oracle上亿表海量数据进行大批量数据删除有什么好的解决方案?oracle 上亿表数据进行 大批量数据删除,有什么好的解决方案吗? 程序一直超时5个牛币所有回答列表(4)1. 这种任务都要做离线计算。2. 分批,保证每个事务删除的数据不超过500个比如你要删除的条件是 a ='xx';那么你就while(true){&List ids =&select id from table where a='xx' limit 500;&if(ids.isempty()){& &&& }&delete from table where id in (ids);}最佳答案&LV4按我的经验来讲,肯定是你程序在执行删除操作时,oracle服务端有connection timeout导致删除超时失败。可以把海量的数据分批删除,比如1亿分成4个2500w,直到你的删除不超时为止。另外像这种操作在业务上会很少,我还是建议你到服务器命令行直接truncate或drop或delete吧之前在别的项目过一个千万级别的,有一个表也是上亿的。总的来说两种方案。1、离线操作:rename表,然后新建一个表,把表数据导入到新表中,删除原表。2、在线操作,最好就是nologing模式,把业务数据分成片进行操作,不然就是连接超时。&不管是哪种操作记得最终给自己留下统计分析的时间,回收表空间。不然数据是完成了,等应用程序启动后,系统奇慢无比。可以先备份表结构在drop表,在恢复表结构这样是最快的。truncate其次是truncate表,这样的速度比delete速度快很多,但是不能恢复数据的,这样删除是没有记录日志的。&等完等等完等等完等等等等最热搜索问答话题编程语言基础Web开发数据库开发客户端开发脚本工具游戏开发服务器软硬件开源组件类库相关问答等等等完等完等等等等完完最近浏览暂无贡献等级暂无贡献等级暂无贡献等级暂无贡献等级暂无贡献等级暂无贡献等级暂无贡献等级扫描二维码关注最代码为好友"/>扫描二维码关注最代码为好友sql server 2000 删除一张大表提示日志已满,还有数据库文件在的磁盘没有空间了,该怎么处理 - Sql Server当前位置:& &&&sql server 2000 删除一张大表提示日志已满,还有数sql server 2000 删除一张大表提示日志已满,还有数据库文件在的磁盘没有空间了,该怎么处理&&网友分享于:&&浏览:138次sql server 2000 删除一张大表提示日志已满,还有数据库文件在的磁盘没有空间了,该怎么办?我的问题是: &
数据库所在的磁盘没空间了,显示剩余空间0字节。我想删除数据库中一些表,释放一些空间(这些表比较大,一张表在1G左右),但是在企业管理器中删除表时,提示数据库日志已满,无法删除。我查看了*_log.ldf文件,只有几百k,但*.mdf文件有95G左右。这应该是磁盘没空间导致数据库操作时产生的事务日志没地方存而导致的,但是我不删除表,磁盘就不可能有空间,没有空间我就不能进行删除表的数据库操作,表就不能删除,表不能删除磁盘就没空间......。这样下去这数据库就没法变小了。现在我想删除一些表,腾出一些空间来,该怎么办?请高手赐教。------解决方案--------------------SQL code
--给数据库减肥
--最好备份日志,以后可通过日志恢复数据。。。
以下为日志处理方法
一般不建议做第4,6两步
第4步不安全,有可能损坏数据库或丢失数据
第6步如果日志达到上限,则以后的数据库处理会失败,在清理日志后才能恢复.
--下面的所有库名都指你要处理的数据库的库名
1.清空日志
DUMP TRANSACTION 库名 WITH NO_LOG
2.截断事务日志:
BACKUP LOG 库名 WITH NO_LOG
3.收缩数据库文件(如果不压缩,数据库的文件不会减小
企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件
--选择日志文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了
--选择数据文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了
也可以用SQL语句来完成
--收缩数据库
DBCC SHRINKDATABASE(库名)
--收缩指定数据文件,1是文件号,可以通过这个语句查询到:select * from sysfiles
DBCC SHRINKFILE(1)
4.为了最大化的缩小日志文件(如果是sql 7.0,这步只能在查询分析器中进行)
a.分离数据库:
企业管理器--服务器--数据库--右键--分离数据库
b.在我的电脑中删除LOG文件
c.附加数据库:
企业管理器--服务器--数据库--右键--附加数据库
此法将生成新的LOG,大小只有500多K
或用代码:
下面的示例分离 pubs,然后将 pubs 中的一个文件附加到当前服务器。
EXEC sp_detach_db @dbname = '库名'
b.删除日志文件
EXEC sp_attach_single_file_db @dbname = '库名',
@physname = 'c:\Program Files\Microsoft SQL Server\MSSQL\Data\库名.mdf'
5.为了以后能自动收缩,做如下设置:
企业管理器--服务器--右键数据库--属性--选项--选择&自动收缩&
--SQL语句设置方式:
EXEC sp_dboption '库名', 'autoshrink', 'TRUE'
6.如果想以后不让它日志增长得太大
企业管理器--服务器--右键数据库--属性--事务日志
--将文件增长限制为xM(x是你允许的最大数据文件大小)
--SQL语句的设置方式:
alter database 库名 modify file(name=逻辑文件名,maxsize=20)
------解决方案--------------------http://blog.csdn.net/sdhdy/archive//4143746.aspx楼主可以参考一下这个:
------解决方案--------------------1,数据库所在磁盘是否还有足够数据库以后增长的剩余空间?2,其他硬盘是否有空闲空间?3,增加数据库文件,在文件组里,数据库文件放在空闲硬盘上.4,日志也要拿出来,方法很多
------解决方案--------------------lz可以在另外一个有剩余空间的磁盘上在添加一个日志文件。待删除数据收缩完数据库后再移除这个日志文件。有几点要注意1.不产生日志是不可能的。2.即使可以truncate tale,收缩操作,也会产生大量日志的。3.既然是对外服务的数据库,应该有个监控机制,硬盘空间不足要有报警提醒。下面是移除log的一个例子http://www./Microsoft/Development/MS-SQL-Server/Q_.html
------解决方案--------------------1.使用SQL收缩一下数据库2.将大表数据转移到别的存储器3.truncate 大表;4.将大表要用的数据导回;
12345678910
12345678910
12345678910 上一篇:下一篇:文章评论相关解决方案 12345678910 Copyright & &&版权所有SQL中delete删除多表数据的进一步认识
SQL中delete删除多表数据的进一步认识
前些时间已经谈过delete的删除多表数据的问题了。不过认识的不是太深刻,
今天进一步查证了一些资料,终于对DELETE删除多表数据有了进一步的了解。
1、delete from t1 where 条件
2、delete t1 from t1 where 条件
3、delete t1 from t1,t2 where 条件
4、delete t1,t2 from t1,t2 where 条件
前3者是可行的,第4者不可行。
也就是简单用delete语句无法进行多表删除数据操作,不过可以建立级联删除,
在两个表之间建立级联删除关系,则可以实现删除一个表的数据时,同时删除
另一个表中相关的数据。
(window.slotbydup=window.slotbydup || []).push({
id: '2467140',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467141',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467143',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467148',
container: s,
size: '1000,90',
display: 'inlay-fix'}

我要回帖

更多关于 oracle数据库删除表 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信