Просто забавная задачка на SQL: дана табличка с единственным полем (тип INT), содержащее числа от 1 до (допустим) 100. Требуется одним SQL-запросом вывести все простые числа из этой таблицы. Решение приведено для MySQL. Адаптировать его для других СУБД - без проблем.
Скрипт,создающий и заполняющий таблицу:
DROP TABLE IF EXISTS pnum; CREATE TABLE pnum ( num int(11) NOT NULL ) ENGINE=HEAP;
DROP PROCEDURE IF EXISTS InsertNumbers;
DELIMITER |
CREATE PROCEDURE InsertNumbers(IN LMT INT) BEGIN DECLARE CNT INT; SET CNT = 1; WHILE CNT <= LMT DO INSERT INTO pnum VALUES (CNT); SET CNT = CNT + 1; END WHILE; END;
DELIMITER ;
CALL InsertNumbers(100);
|
Запрос, выводящий все простые числа:
SELECT p1.num FROM pnum p1 WHERE NOT EXISTS (SELECT p2.num FROM pnum p2 WHERE p2.num < p1.num AND p2.num > 1 AND p1.num % p2.num = 0);
|
Комментариев нет:
Отправить комментарий