db2 删除schema中所有表_常用SQL系列之(六):删除方式、数据库、表及索引元信息查询等...
本系統(tǒng)為@牛旦教育IT課堂在微頭條上的內(nèi)容,
為便于查閱,特輯錄于此,都是常用SQL基本用法。。
前兩篇連接:
(一):SQL點(diǎn)滴(查詢篇):數(shù)據(jù)庫(kù)基礎(chǔ)查詢案例實(shí)戰(zhàn)
(二):SQL點(diǎn)滴(排序篇):數(shù)據(jù)常規(guī)排序查詢實(shí)戰(zhàn)示例
(三):常用SQL系列之(三):記錄疊加、匹配、外連接及笛卡爾等
(四):常用SQL系列之:Null值、插入方式、默認(rèn)值及復(fù)制等
(五):常用SQL系列之(五):多表和禁止插入、批量與特殊更新等
(36):從數(shù)據(jù)庫(kù)表中刪除數(shù)據(jù)都有哪些方式 ?
刪除數(shù)據(jù)有主要幾種基本的方式,
其一,刪除表中所有數(shù)據(jù),參考SQL形如:delete from xtable
xtable是數(shù)據(jù)庫(kù)中存在的表名。
其二,刪除表中指定條件記錄,參考SQL形式:delete from xtable where condition
此語(yǔ)句中必須存在的是where 子句,其中condition為條件表達(dá)式(含組合表達(dá)式),比如:
delete from employee where deptno=10(刪除部門為10的員工,刪除數(shù)量?jī)晌凰袧M足條件的員工信息)。
其三,刪除單個(gè)記錄。參考sql形如:delete from Employee where empno =2020
必須指定唯一標(biāo)識(shí)一條記錄的條件。where子句可以為組合條件,以唯一標(biāo)識(shí)一條記錄。
(37):如何刪除違反引用完整性的記錄?
也就是從表中刪除那些引用其它表中不存在的記錄。比如比如員工必是屬于某一部門的,但由于某些原因,導(dǎo)致員工表中有很多記錄不屬于任何存在的部門,要將這些員工刪除。我們可以用not exist或not in來(lái)實(shí)現(xiàn),參考SQL如下:
delete from employee e where not exist (select * from dept d where d.deptno = e.deptno )
或者這樣:
delete from employee where deptno not in (select deptno from dept)
(38):如何數(shù)據(jù)表中刪除重復(fù)記錄?
比如我們創(chuàng)建這樣一個(gè)表:create table item(id integer,name varchar(10));
然后插入如下記錄:
insert into item values(1,'北京');insert into item values(2,'上海');
insert into item values(3,'廣州');insert into item values(4,'廣州');
insert into item values(5,'西安');insert into item values(6,'西安');
insert into item values(7,'西安');
對(duì)于每個(gè)像“西安”這樣重復(fù)的數(shù)據(jù),只保留其中的一個(gè)id,并刪除其余。也不關(guān)心保留的id是5、6或7,反正表中只留一個(gè)“西安”。我們可以用帶有聚集函數(shù)的子查詢,例如min,任意選擇保留的id(本利中保留值最小的id),參考SQL示例如下:
delete from from item where id not in (select min(id) from item group by name)
其實(shí)邏輯就是通過(guò)分組子查詢保留數(shù)據(jù)的單一性,把不在單一性內(nèi)的數(shù)據(jù)刪除。這里的分組也是為了確立“重復(fù)”的概念,以便實(shí)現(xiàn)數(shù)據(jù)的過(guò)濾。
這里僅是簡(jiǎn)單示例,你也可以用max來(lái)試試看。操練一把試試吧。
(39):如何查看數(shù)據(jù)庫(kù)(也常叫數(shù)據(jù)庫(kù)模式或模式)中的表 信息?
也就是查看指定模式/數(shù)據(jù)庫(kù)中已創(chuàng)建的表或視圖的清單 ?
假設(shè)有這樣一個(gè)數(shù)據(jù)庫(kù)MYDB,那么:
1)在Oracle中,這樣來(lái)查SYS.ALL_TABLES,參考如下:
select table_name from all_tables where owner = 'MYDB' ;
2)在DB2中查詢SYSCAT.TABLES,參考SQL語(yǔ)句如下:
select tabname from syscat.tables where tabschema ='MYDB' ;
3)MySQL、PostgreSQL和SQL Server中,查詢INFORMATION_SCHEMA.TABLES,參考如下:
select table_name from information_schema.tables where table_schema = 'MYDB' .
試試查一把看看吧
(40):如何通過(guò)SQL語(yǔ)句查看表結(jié)構(gòu)(列和類型等)?
也就是直接用sql語(yǔ)句列出表的列、數(shù)據(jù)類型以及列在表中的位置等信息。其實(shí)各家廠商提供的數(shù)據(jù)庫(kù)的實(shí)現(xiàn)是不一樣的。比如我們要查看mydb數(shù)據(jù)庫(kù)中employee表的各列、類型以及位置,那么:
1)Oracle中,我們可以查看all_tab_columns表,參考SQL如下:
select column_name,data_type,column_id
from all_tab_columns where owner = 'mydb' and table_name='employee' ;
2) DB2中,通過(guò)查看syscat_columns表來(lái)獲得相關(guān)信息,參考sql如下:
select colname,typename,colno from syscat_columns
where tabname='employee' and tabschema = 'mydb' ;
3)MySQL與PostgreSQL和SQL Server一樣,查看information_schema.columns來(lái)獲得信息,參考SQL如下:
select column_name,data_type,ordinal_position
from information_schema.columns where table_schema = 'mydb' and table_name = 'employee' ;
注意,每個(gè)版本的數(shù)據(jù)庫(kù)都提供了獲得列數(shù)據(jù)的詳細(xì)方法,這里查看了列名稱、類型和位置,其它的信息如長(zhǎng)度、默認(rèn)值、是否可空等都可以查看。偷懶的方式,你可以直接用*(星號(hào))來(lái)查看所有。
數(shù)據(jù)庫(kù)的元信息,在數(shù)據(jù)持久化框架中會(huì)經(jīng)常用到,以便于明確匹配約束和映射等。各類驅(qū)動(dòng)也都提供了相應(yīng)的方法,可根據(jù)需要來(lái)善加利用。
(41):如何查看一個(gè)表的索引列?
也就是查看某一表是否有索引以索引列等信息等。不論何種數(shù)據(jù)庫(kù),這里還是假設(shè)數(shù)據(jù)庫(kù)為mydb,以及employee表。那么:
1)在oracle中,通過(guò)查看系統(tǒng)表sys.all_ind_columns來(lái)確認(rèn),參考語(yǔ)句如下:
select table_name,index_name,column_name,column_position from sys.all_ind_columns
where table_name = 'employee' and table_owner = 'mydb';
2)在DB2中,查看系統(tǒng)表syscat.indexes,參考語(yǔ)句如下:
select a.tabname,b.indname,b.colname,b.colseq from syscat.indexes a,syscat.indexcoluse b
where a.tabname = 'employee'
and a.tabschema = 'mydb'
and a.indschema = b.indschema
and a.indname = b.indname ;
3)在MySQL中,最簡(jiǎn)單,語(yǔ)句示例如下:
show index from employee ;
4)其他數(shù)據(jù)PostgreSQL和SQLServer,自己查查看吧(前者通過(guò)兩個(gè)系統(tǒng)表PG_CATALOG.PG_INDEXES和INFORMATION_SCHEMA.COLUMNS進(jìn)行關(guān)聯(lián)查看,后者通過(guò)4系統(tǒng)表SYS.TABLES,SYS.INDEXES,SYS.INDEX_COLUMNS,SYS.COLUMNS進(jìn)行關(guān)聯(lián)查看),自己動(dòng)手試試吧。
本篇就輯錄到這,點(diǎn)個(gè)贊分享出去吧。
總結(jié)
以上是生活随笔為你收集整理的db2 删除schema中所有表_常用SQL系列之(六):删除方式、数据库、表及索引元信息查询等...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: python创建线程_多种方法实现 py
- 下一篇: python怎么实现输入多行文字_介绍一