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