SQL을 사용하여 작업 설정

不言
풀어 주다: 2018-06-04 10:48:55
원래의
2214명이 탐색했습니다.

이 기사에서는 특정 참조 값이 있는 집합 연산에 대한 SQL 사용을 주로 소개합니다. 이제 모든 사람과 공유합니다. 도움이 필요한 친구들이 참조할 수 있습니다

1. 테이블과 테이블을 비교하세요


두 테이블의 차이점을 직접 물어보세요

drop table if exists tbl_a;create table tbl_a(
key1 varchar(10),
col_1 int4,
col_2 int4,
col_3 int4
);insert into tbl_a values('A', 2, 3, 4);
insert into tbl_a values('B', 0, 7, 9);
insert into tbl_a values('c', 5, 1, 6);
drop table if exists tbl_b;create table tbl_b(
key1 varchar(10),
col_1 int4,
col_2 int4,
col_3 int4
);
insert into tbl_b values('A', 2, 3, 4);
insert into tbl_b values('B', 0, 7, 9);
insert into tbl_b values('c', 5, 1, 6);-- ## 如果union a b 行数一致则两张表相等 select count(1) row_cnt  from ( select * 
           from tbl_A           union 
          select *            from tbl_b
        ) tmp
;
로그인 후 복사

2. 차이 집합을 사용하여 관계형 나누기 연산을 구현합니다

테이블 만들기

(select * from tbl_a except
 select * from tbl_b) union all
 (select * from tbl_b  except
  select * from tbl_a);
로그인 후 복사
drop table if exists skills;create table skills(
skill varchar(10)
);insert into skills values('oracle');
insert into skills values('unix');insert into skills values('java');drop table if exists empskills;create table empskills(
emp varchar(10),
skill varchar(10)
);insert into empskills values('相田','oracle');
insert into empskills values('相田','unix');
insert into empskills values('相田','java');
insert into empskills values('相田','c#');
insert into empskills values('神奇','oracle');
insert into empskills values('神奇','unix');
insert into empskills values('神奇','java');
insert into empskills values('平井','oracle');
insert into empskills values('平井','unix');
insert into empskills values('平井','PHP');
insert into empskills values('平井','Perl');
insert into empskills values('平井','C++');
insert into empskills values('若田部','Perl');
insert into empskills values('度来','oracle');
로그인 후 복사

3. 동일한 하위 집합 찾기

--把除法变成减法select distinct emp  from empskills es1 where not exists
        (select skill from skills
         expect         select skill from empskills es2          where es1.emp = es2.emp);
로그인 후 복사

아이디어: 두 공급업체 모두 동일한 유형의 부품을 취급합니다(단순히 부품 열에 따라 연결). 두 공급업체의 부품 유형 수가 동일합니다(즉, 일대일 매핑이 있음)(개수 제한)

drop table if exists supparts;create table supparts(
sup varchar(10),
part varchar(10)
);insert into supparts values('A', '螺丝');
insert into supparts values('A', '螺母');
insert into supparts values('A', '管子');
insert into supparts values('B', '螺丝');
insert into supparts values('B', '管子');
insert into supparts values('C', '螺丝');
insert into supparts values('C', '螺母');
insert into supparts values('C', '管子');
insert into supparts values('D', '螺丝');
insert into supparts values('D', '管子');
insert into supparts values('E','保险丝');
insert into supparts values('E', '螺母');
insert into supparts values('E', '管子');
insert into supparts values('F','保险丝');
로그인 후 복사

4. 중복 행 삭제

select a.sup s1, b.sup s2  from supparts a, supparts b where a.sup < b.sup                       -- 生成供应商的全部组合 
   and a.part = b.part                     -- 条件1:经营同种类型的零件 
 group by a.sup, b.suphaving count(*) = (select count(1)         -- 条件2:经营的零件的数量种类相同 a = 中间数                     from supparts c                    where c.sup = a.sup)   and count(*) = (select count(1)         -- 条件2:经营的零件的数量种类相同 b = 中间数                     from supparts d                    where d.sup = b.sup)
;
로그인 후 복사

Exercise

drop table if exists products;create table products(
rowid int4,
name1 varchar(10),
price int4
);insert into products values(1,&#39;苹果&#39;,50);insert into products values(2,&#39;橘子&#39;,100);
insert into products values(3,&#39;橘子&#39;,100);insert into products values(4,&#39;橘子&#39;,100);
insert into products values(5,&#39;香蕉&#39;,80);-- 删除重行高效SQL语句(1):通过EXCEPT求补集delete from productswhere rowid  in (select rowid           -- 全部rowid                   from products 
                 except                 -- 减去                 select max(rowid)      -- 要留下的rowid                   from products                  group by name1, price
                  );-- 删除重行高效SQL语句(2):通过not indelete from products where rowid not in (select max(rowid)                      from products                     group by name1, price
                    );
로그인 후 복사

대부분의 내용 "SQL Advanced Textbook"에서 나온 것이므로 메모해 두세요. 연습문제의 일부 코드는 원본입니다.

위 내용은 SQL을 사용하여 작업 설정의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 이슈
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿