主頁 > 資料庫 > 選讀SQL經典實體筆記03_DML和元資料

選讀SQL經典實體筆記03_DML和元資料

2023-07-09 08:00:22 資料庫

1. 復制資料到另一個表

1.1.  sql

 insert into dept_east (deptno,dname,loc)
 select deptno,dname,loc
   from dept
  where loc in ( 'NEW YORK','BOSTON' )

2. 復制表定義

2.1. 復制表結構,而不復制資料

2.2. MySQL

2.3. PostgreSQL

2.4. Oracle

2.5. sql

create table dept_2
 as
 select *
   from dept
  where 1 = 0

2.6. SQL Server

2.6.1.  sql

select *
   into dept_2
   from dept
  where 1 = 0

2.7. DB2

2.7.1. create table dept_2 like dept

3. 洗掉違反參照完整性的記錄

3.1. 從表里洗掉一些記錄,因為在另一個表里不存在與這些記錄相匹配的資料

3.2. 洗掉其實就是查詢,最重要的步驟是要寫出正確的WHERE子句條件,以找出要洗掉哪些記錄

3.3. sql

delete from emp
 where not exists (
   select * from dept
    where dept.deptno = emp.deptno
)

4. 洗掉重復記錄

4.1. sql

create table dupes (id integer, name varchar(10))
insert into dupes values (1, 'NAPOLEON')
insert into dupes values (2, 'DYNAMITE')
insert into dupes values (3, 'DYNAMITE')
insert into dupes values (4, 'SHE SELLS')
insert into dupes values (5, 'SEA SHELLS')
insert into dupes values (6, 'SEA SHELLS')
insert into dupes values (7, 'SEA SHELLS')
select * from dupes order by 1

4.2. 如果要洗掉重復記錄,首先要明確兩行資料在什么條件下才會被認為是“重復的記錄”

4.2.1. sql

select min(id)
  from dupes
 group by name

4.2.2.   sql

delete from dupes
   where id not in ( select min(id)
                       from dupes
                      group by name )

5. 洗掉被其他表參照的記錄

5.1. sql

create table dept_accidents
( deptno         integer,
  accident_name varchar(20) )
insert into dept_accidents values (10,'BROKEN FOOT')
insert into dept_accidents values (10,'FLESH WOUND')
insert into dept_accidents values (20,'FIRE')
insert into dept_accidents values (20,'FIRE')
insert into dept_accidents values (20,'FLOOD')
insert into dept_accidents values (30,'BRUISED GLUTE')
select * from dept_accidents

5.2. 識別哪些部門發生過3次以上事故

5.2.1. sql

select deptno
  from dept_accidents
 group by deptno
having count(*) >= 3

5.3. 洗掉在上述部門作業的員工

5.3.1.  sql

delete from emp
  where deptno in ( select deptno
                      from dept_accidents
                     group by deptno
                    having count(*) >= 3 )

6. 元資料查詢

6.1. SMEAGOL 模式

7. 列舉模式中的表

7.1. MySQL

7.2. PostgreSQL

7.3. SQL Server

7.4. 資訊模式

7.4.1. information schema,這是按照ISO SQL 標準定義的一組視圖

7.4.2.  sql

select table_name
   from information_schema.tables
  where table_schema = 'SMEAGOL'

7.5. Oracle

7.5.1. sql

select table_name
  from all_tables
 where owner = 'SMEAGOL'

7.6. DB2

7.6.1.  sql

select tabname
   from syscat.tables
  where tabschema = 'SMEAGOL'

8. 列舉欄位

8.1. MySQL

8.2. PostgreSQL

8.3. SQL Server

8.4. 資訊模式

8.4.1.  sql

select column_name, data_type, ordinal_position
   from information_schema.columns
  where table_schema = 'SMEAGOL'
    and table_name   = 'EMP'

8.5. Oracle

8.5.1.   sql

select column_name, data_type, column_id
    from all_tab_columns
   where owner      = 'SMEAGOL'
     and table_name = 'EMP'

8.6. DB2

8.6.1.  sql

select colname, typename, colno
   from syscat.columns
  where tabname   = 'EMP'
    and tabschema = 'SMEAGOL'

9. 列舉索引列

9.1. MySQL

9.1.1. show index from emp

9.2. PostgreSQL

9.2.1.   sql

select a.tablename,a.indexname,b.column_name
    from pg_catalog.pg_indexes a,
         information_schema.columns b
   where a.schemaname = 'SMEAGOL'
     and a.tablename  = b.table_name

9.3. Oracle

9.3.1. sql

select table_name, index_name, column_name, column_position
  from sys.all_ind_columns
 where table_name  = 'EMP'
   and table_owner = 'SMEAGOL'

9.4. SQL Server

9.4.1.   sql

select a.name table_name,
         b.name index_name,
          d.name column_name,
          c.index_column_id
     from sys.tables a,
          sys.indexes b,
          sys.index_columns c,
          sys.columns d.
   where a.object_id = b.object_id
    and b.object_id = c.object_id
    and b.index_id  = c.index_id
    and c.object_id = d.object_id
   and c.column_id = d.column_id
    and a.name      = 'EMP'

9.5. DB2

9.5.1.   sql

select a.tabname, b.indname, b.colname, b.colseq
    from syscat.indexes a,
         syscat.indexcoluse b
   where a.tabname   = 'EMP'
     and a.tabschema = 'SMEAGOL'
     and a.indschema = b.indschema
     and a.indname   = b.indname

10. 列舉約束

10.1. MySQL

10.2. PostgreSQL

10.3. SQL Server

10.4. 資訊模式

10.4.1.   sql

select a.table_name,
          a.constraint_name,
          b.column_name,
          a.constraint_type
     from information_schema.table_constraints a,
          information_schema.key_column_usage b
    where a.table_name      = 'EMP'
      and a.table_schem     = 'SMEAGOL'
      and a.table_name      = b.table_name
     and a.table_schema    = b.table_schema
     and a.constraint_name = b.constraint_name

10.5. Oracle

10.5.1.   sql

select a.table_name,
          a.constraint_name,
         b.column_name,
          a.constraint_type
     from all_constraints a,
          all_cons_columns b
    where a.table_name      = 'EMP'
      and a.owner           = 'SMEAGOL'
      and a.table_name      = b.table_name
     and a.owner           = b.owner
     and a.constraint_name = b.constraint_name

10.6. DB2

10.6.1.   sql

select a.tabname, a.constname, b.colname, a.type
    from syscat.tabconst a,
         syscat.columns b
   where a.tabname   = 'EMP'
     and a.tabschema = 'SMEAGOL'
     and a.tabname   = b.tabname
     and a.tabschema = b.tabschema

11. 列舉非索引外鍵

11.1. 如果通過外鍵實作父子關系,那么為子表里對應的列加上索引有助于減少鎖

11.2. 子表和父表常用外鍵列做連接查詢,因而加上索引有助于提升查詢性能

11.3. MySQL

11.3.1. 針對特定的表執行SHOW INDEX命令,并比較其輸出結果與INFORMATION_SCHEMA.KEY_COLUMN_USAGE.COLUMN_NAME的異同

11.3.2. 如果KEY_COLUMN_USAGE里有對應的COLUMN_NAME,但是SHOW INDEX輸出的結果里卻沒有,那么就說明該列沒有索引

11.4. PostgreSQL

11.4.1.   sql

select fkeys.table_name,
          fkeys.constraint_name,
          fkeys.column_name,
          ind_cols.indexname
     from (
   select a.constraint_schema,
          a.table_name,
          a.constraint_name,
          a.column_name
    from information_schema.key_column_usage a,
         information_schema.referential_constraints b
   where a.constraint_name    = b.constraint_name
     and a.constraint_schema  = b.constraint_schema
     and a.constraint_schema  = 'SMEAGOL'
     and a.table_name         = 'EMP'
         ) fkeys
         left join
         (
  select a.schemaname, a.tablename, a.indexname, b.column_name
    from pg_catalog.pg_indexes a,
         information_schema.columns b
   where a.tablename  = b.table_name
     and a.schemaname = b.table_schema
         ) ind_cols
      on (    fkeys.constraint_schema = ind_cols.schemaname
          and fkeys.table_name        = ind_cols.tablename
          and fkeys.column_name       = ind_cols.column_name )
   where ind_cols.indexname is null

11.5. Oracle

11.5.1.   sql

select a.table_name,
          a.constraint_name,
          a.column_name,
          c.index_name
     from all_cons_columns a,
          all_constraints b,
          all_ind_columns c
    where a.table_name       = 'EMP'
      and a.owner            = 'SMEAGOL'
     and b.constraint_type  = 'R'
     and a.owner            = b.owner
     and a.table_name       = b.table_name
     and a.constraint_name  = b.constraint_name
     and a.owner            = c.table_owner  (+)
     and a.table_name       = c.table_name   (+)
   and a.column_name      = c.column_name  (+)
     and c.index_name       is null

11.6. SQL Server

11.6.1.   sql

select fkeys.table_name,
          fkeys.constraint_name,
          fkeys.column_name,
          ind_cols.index_name
     from (
   select a.object_id,
          d.column_id,
          a.name table_name,
          b.name constraint_name,
         d.name column_name
    from sys.tables a
         join
         sys.foreign_keys b
      on (   a.name      = 'EMP'
         and a.object_id = b.parent_object_id
         )
         join
         sys.foreign_key_columns c
         on ( b.object_id = c.constraint_object_id )
            join
            sys.columns d
         on (   c.constraint_column_id = d.column_id
         and a.object_id               = d.object_id
         )
         ) fkeys
         left join
         (
  select a.name index_name,
         b.object_id,
         b.column_id
    from sys.indexes a,
         sys.index_columns b
   where a.index_id = b.index_id
          ) ind_cols
      on (     fkeys.object_id = ind_cols.object_id
          and fkeys.column_id = ind_cols.column_id )
   where ind_cols.index_name is null

11.7. DB2

11.7.1.   sql

select fkeys.tabname,
          fkeys.constname,
          fkeys.colname,
          ind_cols.indname
     from (
   select a.tabschema, a.tabname, a.constname, b.colname
     from syscat.tabconst a,
          syscat.keycoluse b
    where a.tabname   = 'EMP'
     and a.tabschema = 'SMEAGOL'
     and a.type      = 'F'
     and a.tabname   = b.tabname     and a.tabschema = b.tabschema
         ) fkeys
         left join
         (
  select a.tabschema,
         a.tabname,
         a.indname,
         b.colname
    from syscat.indexes a,
         syscat.indexcoluse b
   where a.indschema = b.indschema
     and a.indname   = b.indname
         ) ind_cols
      on (     fkeys.tabschema = ind_cols.tabschema
           and fkeys.tabname   = ind_cols.tabname
          and fkeys.colname   = ind_cols.colname )
   where ind_cols.indname is null

12. 用SQL生成SQL

12.1. 使用字串拼接SQL 陳述句,通過查詢某些表來獲取需要填入的資料(例如資料庫物件名稱)

12.2. Oracle示例

12.2.1. /* 生成SQL以計算各個表的行數 */

select 'select count(*) from '||table_name||';' cnts
  from user_tables;
CNTS
--------------------------------------
select count(*) from ANT;
select count(*) from BONUS;
select count(*) from DEMO1;
select count(*) from DEMO2;
select count(*) from DEPT;
select count(*) from DUMMY;

12.2.2.  /* 禁用所有表的外鍵約束 */

select 'alter table '||table_name||
        ' disable constraint '||constraint_name||';' cons
   from user_constraints
  where constraint_type = 'R';
CONS
--------------------------------------------------------
alter table ANT disable constraint ANT_FK;
alter table BONUS disable constraint BONUS_FK;
alter table DEMO1 disable constraint DEMO1_FK;
alter table DEMO2 disable constraint DEMO2_FK;
alter table DEPT disable constraint DEPT_FK;
alter table DUMMY disable constraint DUMMY_FK;

12.2.3.  /* 根據EMP表的某些列生成插入腳本 */

select 'insert into emp(empno,ename,hiredate) '||chr(10)||
       'values( '||empno||','||''''||ename
       ||''',to_date('||''''||hiredate||''') );' inserts
 from emp
where deptno = 10;
INSERTS
---------------------------------------------------------------
insert into emp(empno,ename,hiredate)
values( 7782,'CLARK',to_date('09-JUN-1981 00:00:00') );
insert into emp(empno,ename,hiredate)
values( 7839,'KING',to_date('17-NOV-1981 00:00:00') );
insert into emp(empno,ename,hiredate)
values( 7934,'MILLER',to_date('23-JAN-1982 00:00:00') );

轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/556864.html

標籤:其他

上一篇:資料庫系統概論—恢復與并發

下一篇:返回列表

標籤雲
其他(162269) Python(38272) JavaScript(25528) Java(18293) C(15239) 區塊鏈(8275) C#(7972) AI(7469) 爪哇(7425) MySQL(7292) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5876) 数组(5741) R(5409) Linux(5347) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4614) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2438) ASP.NET(2404) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) HtmlCss(1993) .NET技术(1986) 功能(1967) Web開發(1951) C++(1942) python-3.x(1918) 弹簧靴(1913) xml(1889) PostgreSQL(1882) .NETCore(1863) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • GPU虛擬機創建時間深度優化

    **?桔妹導讀:**GPU虛擬機實體創建速度慢是公有云面臨的普遍問題,由于通常情況下創建虛擬機屬于低頻操作而未引起業界的重視,實際生產中還是存在對GPU實體創建時間有苛刻要求的業務場景。本文將介紹滴滴云在解決該問題時的思路、方法、并展示最終的優化成果。 從公有云服務商那里購買過虛擬主機的資深用戶,一 ......

    uj5u.com 2020-09-10 06:09:13 more
  • 可編程網卡芯片在滴滴云網路的應用實踐

    **?桔妹導讀:**隨著云規模不斷擴大以及業務層面對延遲、帶寬的要求越來越高,采用DPDK 加速網路報文處理的方式在橫向縱向擴展都出現了局限性。可編程芯片成為業界熱點。本文主要講述了可編程網卡芯片在滴滴云網路中的應用實踐,遇到的問題、帶來的收益以及開源社區貢獻。 #1. 資料中心面臨的問題 隨著滴滴 ......

    uj5u.com 2020-09-10 06:10:21 more
  • 滴滴資料通道服務演進之路

    **?桔妹導讀:**滴滴資料通道引擎承載著全公司的資料同步,為下游實時和離線場景提供了必不可少的源資料。隨著任務量的不斷增加,資料通道的整體架構也隨之發生改變。本文介紹了滴滴資料通道的發展歷程,遇到的問題以及今后的規劃。 #1. 背景 資料,對于任何一家互聯網公司來說都是非常重要的資產,公司的大資料 ......

    uj5u.com 2020-09-10 06:11:05 more
  • 滴滴AI Labs斬獲國際機器翻譯大賽中譯英方向世界第三

    **桔妹導讀:**深耕人工智能領域,致力于探索AI讓出行更美好的滴滴AI Labs再次斬獲國際大獎,這次獲獎的專案是什么呢?一起來看看詳細報道吧! 近日,由國際計算語言學協會ACL(The Association for Computational Linguistics)舉辦的世界最具影響力的機器 ......

    uj5u.com 2020-09-10 06:11:29 more
  • MPP (Massively Parallel Processing)大規模并行處理

    1、什么是mpp? MPP (Massively Parallel Processing),即大規模并行處理,在資料庫非共享集群中,每個節點都有獨立的磁盤存盤系統和記憶體系統,業務資料根據資料庫模型和應用特點劃分到各個節點上,每臺資料節點通過專用網路或者商業通用網路互相連接,彼此協同計算,作為整體提供 ......

    uj5u.com 2020-09-10 06:11:41 more
  • 滴滴資料倉庫指標體系建設實踐

    **桔妹導讀:**指標體系是什么?如何使用OSM模型和AARRR模型搭建指標體系?如何統一流程、規范化、工具化管理指標體系?本文會對建設的方法論結合滴滴資料指標體系建設實踐進行解答分析。 #1. 什么是指標體系 ##1.1 指標體系定義 指標體系是將零散單點的具有相互聯系的指標,系統化的組織起來,通 ......

    uj5u.com 2020-09-10 06:12:52 more
  • 單表千萬行資料庫 LIKE 搜索優化手記

    我們經常在資料庫中使用 LIKE 運算子來完成對資料的模糊搜索,LIKE 運算子用于在 WHERE 子句中搜索列中的指定模式。 如果需要查找客戶表中所有姓氏是“張”的資料,可以使用下面的 SQL 陳述句: SELECT * FROM Customer WHERE Name LIKE '張%' 如果需要 ......

    uj5u.com 2020-09-10 06:13:25 more
  • 滴滴Ceph分布式存盤系統優化之鎖優化

    **桔妹導讀:**Ceph是國際知名的開源分布式存盤系統,在工業界和學術界都有著重要的影響。Ceph的架構和演算法設計發表在國際系統領域頂級會議OSDI、SOSP、SC等上。Ceph社區得到Red Hat、SUSE、Intel等大公司的大力支持。Ceph是國際云計算領域應用最廣泛的開源分布式存盤系統, ......

    uj5u.com 2020-09-10 06:14:51 more
  • es~通過ElasticsearchTemplate進行聚合~嵌套聚合

    之前寫過《es~通過ElasticsearchTemplate進行聚合操作》的文章,這一次主要寫一個嵌套的聚合,例如先對sex集合,再對desc聚合,最后再對age求和,共三層嵌套。 Aggregations的部分特性類似于SQL語言中的group by,avg,sum等函式,Aggregation ......

    uj5u.com 2020-09-10 06:14:59 more
  • 爬蟲日志監控 -- Elastc Stack(ELK)部署

    傻瓜式部署,只需替換IP與用戶 導讀: 現ELK四大組件分別為:Elasticsearch(核心)、logstash(處理)、filebeat(采集)、kibana(可視化) 下載均在https://www.elastic.co/cn/downloads/下tar包,各組件版本最好一致,配合fdm會 ......

    uj5u.com 2020-09-10 06:15:05 more
最新发布
  • 選讀SQL經典實體筆記03_DML和元資料

    ![](https://img2023.cnblogs.com/blog/3076680/202307/3076680-20230706135746797-1984903730.png) # 1. 復制資料到另一個表 ## 1.1. sql ```sql insert into dept_east ......

    uj5u.com 2023-07-09 08:00:22 more
  • 資料庫系統概論—恢復與并發

    # 資料庫概論系統—系統篇 ## 一、關系查詢處理和查詢優化 ### 1.1關系資料庫的查詢處理 查詢處理可分為四個階段:查詢分析、檢查檢查、查詢優選和查詢執行(其中查詢優化可分為代數和物理優化) ### 1.2關系資料庫系統的查詢優化 查詢優化的優點不僅在于用戶不必考慮如何最好地表達查詢以獲得較高 ......

    uj5u.com 2023-07-09 08:00:05 more
  • 選讀SQL經典實體筆記03_DML和元資料

    ![](https://img2023.cnblogs.com/blog/3076680/202307/3076680-20230706135746797-1984903730.png) # 1. 復制資料到另一個表 ## 1.1. sql ```sql insert into dept_east ......

    uj5u.com 2023-07-09 07:58:54 more
  • 資料庫系統概論—恢復與并發

    # 資料庫概論系統—系統篇 ## 一、關系查詢處理和查詢優化 ### 1.1關系資料庫的查詢處理 查詢處理可分為四個階段:查詢分析、檢查檢查、查詢優選和查詢執行(其中查詢優化可分為代數和物理優化) ### 1.2關系資料庫系統的查詢優化 查詢優化的優點不僅在于用戶不必考慮如何最好地表達查詢以獲得較高 ......

    uj5u.com 2023-07-09 07:57:08 more
  • 選讀SQL經典實體筆記02_多表查詢

    ![](https://img2023.cnblogs.com/blog/3076680/202307/3076680-20230706135034978-826621908.png) # 1. 除非有必要,否則不要用UNION代替UNION ALL # 2. 查找兩個表中相同的行 ## 2.1.  ......

    uj5u.com 2023-07-08 08:13:51 more
  • 社區星力量 | 平等、包容、耐性,這對貢獻小白來說很重要

    ![file](https://img2023.cnblogs.com/other/2685289/202307/2685289-20230707145108418-723743542.png) 截至今天,Apache DolphinScheduler 專案在 GitHub 上的 Star 數已突破 ......

    uj5u.com 2023-07-08 08:13:37 more
  • 選讀SQL經典實體筆記02_多表查詢

    ![](https://img2023.cnblogs.com/blog/3076680/202307/3076680-20230706135034978-826621908.png) # 1. 除非有必要,否則不要用UNION代替UNION ALL # 2. 查找兩個表中相同的行 ## 2.1.  ......

    uj5u.com 2023-07-08 08:12:36 more
  • 社區星力量 | 平等、包容、耐性,這對貢獻小白來說很重要

    ![file](https://img2023.cnblogs.com/other/2685289/202307/2685289-20230707145108418-723743542.png) 截至今天,Apache DolphinScheduler 專案在 GitHub 上的 Star 數已突破 ......

    uj5u.com 2023-07-08 08:12:13 more
  • clickhouse使用入門

    轉載請注明出處(~ ̄▽ ̄)~嚴禁用于商業目的的轉載~ 導語:同學,你也不想你根本不懂ClickHouse,卻趕鴨子上架使用的事情被其他人知道吧? 寫在前面:本文旨在讓原先有一定SQL基礎的人快速簡單了解ClickHouse的(關鍵)概念/特性,側重于使用方面的介紹比較而非原理/實作挖掘。文章算是個人 ......

    uj5u.com 2023-07-07 09:08:33 more
  • 研產供銷資料一體化,解碼汽車集團企業的資料治理之道

    OTA(Over-The-Air,空中下載技術),是汽車使用的一種遠程無線升級技術。車主只要保持聯網的狀態,汽車就可以像手機一樣進行系統升級。OTA升級最大的好處是,不管對車輛進行常規的升級還是大面積出現軟體問題需要修復,都可以通過OTA來解決。 資料顯示,2022年中國乘用車OTA裝配量達到765 ......

    uj5u.com 2023-07-07 09:08:16 more