暇で無事家でSQLを書きます

2425 ワード

--                       
SELECT sname FROM s
WHERE sex = ' ' AND (1 <= (
	SELECT COUNT(*) FROM sc, c
	WHERE s.sn = sc.sn AND sc.cn = c.cn AND c.teacher = '   '));

--                  
SELECT DISTINCT cn, cname 
FROM c
WHERE c.cn NOT IN (
	SELECT DISTINCT sc.cn
	FROM s, sc
	WHERE s.sname = '   ' AND s.sn = sc.sn);

--               
SELECT sn, sname
FROM s
WHERE NOT EXISTS (
	SELECT *
	FROM c
	WHERE NOT EXISTS (SELECT *
		FROM sc
		WHERE sc.sn = s.sn AND sc.cn = c.cn));

--                    
--             
SELECT cn, cname
FROM c
WHERE NOT EXISTS (
	SELECT * 
	FROM s
	WHERE NOT EXISTS(
		SELECT *
		FROM sc
		WHERE s.sn = sc.sn AND sc.cn = c.cn
	)
);

--                  
SELECT sn, sname
FROM s
WHERE EXISTS (
	SELECT * FROM sc WHERE s.sn = sc.sn AND EXISTS (
		SELECT * FROM c WHERE sc.cn = c.cn AND c.teacher = '   '
	)
);

--                5 
UPDATE sc
SET grade = grade + 5
WHERE sc.grade < (
	SELECT AVG(grade) 
	FROM sc
	WHERE EXISTS (
		SELECT *
		FROM s
		WHERE sc.sn = s.sn AND s.sex = ' '
	));

--                 
SELECT *
FROM c
WHERE EXISTS (
	SELECT *
	FROM s
	WHERE c.cn IN (
		SELECT sc.cn 
		FROM sc
		WHERE s.sn = sc.sn)
);

 
CREATE TABLE c
(
  cn integer NOT NULL,
  cname character varying,
  teacher character varying,
  CONSTRAINT pk_cn PRIMARY KEY (cn)
)

CREATE TABLE s
(
  sn integer NOT NULL,
  sname character varying,
  age integer,
  sex character varying,
  CONSTRAINT pk_sn PRIMARY KEY (sn)
)

CREATE TABLE sc
(
  sn integer NOT NULL,
  cn integer NOT NULL,
  grade integer,
  CONSTRAINT pk_sn_cn PRIMARY KEY (sn, cn),
  CONSTRAINT fk_cn FOREIGN KEY (cn)
      REFERENCES c (cn) MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE NO ACTION,
  CONSTRAINT fk_sn FOREIGN KEY (sn)
      REFERENCES s (sn) MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE NO ACTION
)