みたいなSELECT * except column foo FROM ...
ものは存在しません。ただし、冗長な列を排除する自然結合を使用できます。RDBMS について言及していないので、MySQL マニュアルからの説明を次に示します。ただし、自然結合は標準 SQL です。
NATURAL 結合または USING 結合の列は、以前とは異なる場合があります。具体的には、冗長な出力列が表示されなくなり、SELECT * 展開の列の順序が以前と異なる場合があります。
次の一連のステートメントを検討してください。
CREATE TABLE t1 (i INT, j INT);
CREATE TABLE t2 (k INT, j INT);
INSERT INTO t1 VALUES(1,1);
INSERT INTO t2 VALUES(1,1);
SELECT * FROM t1 NATURAL JOIN t2;
SELECT * FROM t1 JOIN t2 USING (j);
以前は、ステートメントは次の出力を生成していました。
+------+------+------+------+
| i | j | k | j |
+------+------+------+------+
| 1 | 1 | 1 | 1 |
+------+------+------+------+
+------+------+------+------+
| i | j | k | j |
+------+------+------+------+
| 1 | 1 | 1 | 1 |
+------+------+------+------+
最初の SELECT ステートメントでは、列 j が両方のテーブルに表示されるため、結合列になるため、標準 SQL によれば、出力に 2 回ではなく 1 回だけ表示されます。同様に、2 番目の SELECT ステートメントでは、列 j が USING 句で指定されており、出力に 2 回ではなく 1 回だけ表示されます。ただし、どちらの場合も、冗長な列は削除されません。また、列の順序は標準 SQL に従って正しくありません。
これで、ステートメントは次の出力を生成します。
+------+------+------+
| j | i | k |
+------+------+------+
| 1 | 1 | 1 |
+------+------+------+
+------+------+------+
| j | i | k |
+------+------+------+
| 1 | 1 | 1 |
+------+------+------+
冗長な列が削除され、列の順序が標準 SQL に従って正しい