web-dev-qa-db-ja.com

「テーブルの表示」MySQLクエリからデータを選択します

MySQLでshow tablesから選択できますか?

SELECT * FROM (SHOW TABLES) AS `my_tables`

これらの線に沿ったものは、上記は機能しません(少なくとも5.0.51aでは)。

52
BioTronic

SELECT * FROM INFORMATION_SCHEMA.TABLES

http://dev.mysql.com/doc/refman/5.0/en/tables-table.html を参照してください

42
Andrew

他の人が言及したように、INFORMATION_SCHEMAから選択しない限り、私が知っていることではありません。

ただし、SHOWコマンドは非常に柔軟です(例:

SHOW tables like '%s%'
20
Lucas Oman

カウントする:

SELECT COUNT(*) as total FROM (SELECT TABLE_NAME as tab, TABLES.* FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='database_name' GROUP BY tab) tables;

リストするには:

SELECT TABLE_NAME as table, TABLES.* FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='database_name' GROUP BY table;
11
Ivan Ferrer

あなたは思っているよりも近いかもしれません— SHOW TABLESはすでにSELECTのように振る舞います:

$pdo = new PDO("mysql:Host=$Host;dbname=$dbname",$user,$pass);
foreach ($pdo->query("SHOW TABLES") as $row) {
    print "Table $row[Tables_in_$dbname]\n";
}
4
Bob Stein

INFORMATION_SCHEMA.Tablesのクエリを検討しましたか?のように

SELECT ic.Table_Name,
    ic.Column_Name,
    ic.data_Type,
    IFNULL(Character_Maximum_Length,'') AS `Max`,
    ic.Numeric_precision as `Precision`,
    ic.numeric_scale as Scale,
    ic.Character_Maximum_Length as VarCharSize,
    ic.is_nullable as Nulls, 
    ic.ordinal_position as OrdinalPos, 
    ic.column_default as ColDefault, 
    ku.ordinal_position as PK,
    kcu.constraint_name,
    kcu.ordinal_position,
    tc.constraint_type
FROM INFORMATION_SCHEMA.COLUMNS ic
    left outer join INFORMATION_SCHEMA.key_column_usage ku
        on ku.table_name = ic.table_name
        and ku.column_name = ic.column_name
    left outer join information_schema.key_column_usage kcu
        on kcu.column_name = ic.column_name
        and kcu.table_name = ic.table_name
    left outer join information_schema.table_constraints tc
        on kcu.constraint_name = tc.constraint_name
order by ic.table_name, ic.ordinal_position;
4
BigJim

例のようにSHOWステートメントをサブクエリ内に配置することはできません。サブクエリに入れることができる唯一のステートメントはSELECTです。

他の回答が述べているように、SELECTを使用してINFORMATION_SCHEMAに直接クエリを実行し、その方法ではるかに柔軟性を高めることができます。

MySQLのSHOWステートメントは、内部的にはINFORMATION_SCHEMAテーブルに対する単なるクエリです。

ユーザー@physicalattractionは、このコメントを他のほとんどの回答に投稿しています。

これにより、OPが意図したテーブルの内容ではなく、テーブルに関する(メタ)情報が得られます。 –フィジカルアトラクション

それどころか、OPの質問はnotすべてのテーブルのデータを選択したいと言っています。彼らは、テーブル名のリストであるSHOW TABLESの結果から選択したいと言っています。

OPがすべてのテーブルからすべてのデータを選択したい場合、答えは「いいえ」です。1つのクエリでそれを行うことはできません。各クエリは、テーブルに明示的に名前を付ける必要があります。テーブル名を変数にしたり、同じクエリの別の部分の結果にすることはできません。また、特定のクエリ結果のすべての行には同じ列が必要です。

したがって、すべてのテーブルからすべてのデータを選択する唯一の方法は、SHOW TABLESを実行し、その結果で指定された各テーブルに対して別のクエリを実行することです。

4
Bill Karwin

ストアドプロシージャを作成してテーブル名をカーソルに置き、テーブル名をループしてデータを表示できます。

ストアドプロシージャの開始: http://www.mysqltutorial.org/getting-started-with-mysql-stored-procedures.aspx

カーソルの作成: http://www.mysqltutorial.org/mysql-cursor/

例えば、

CREATE PROCEDURE `ShowFromTables`()
BEGIN

DECLARE v_finished INTEGER DEFAULT 0;
DECLARE c_table varchar(100) DEFAULT "";

DECLARE table_cursor CURSOR FOR 
SELECT table_name FROM information_schema.tables WHERE table_name like 'wp_1%';

DECLARE CONTINUE HANDLER 
    FOR NOT FOUND SET v_finished = 1;

OPEN table_cursor;

get_data: LOOP

FETCH table_cursor INTO c_table;

IF v_finished = 1 THEN 
LEAVE get_data;
END IF;

SET @s=CONCAT("SELECT * FROM ",c_table,";");

PREPARE stmt FROM @s;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

END LOOP get_data;

CLOSE table_cursor;

END

次に、ストアドプロシージャを呼び出します。

CALL ShowFromTables();
3
SELECT column_comment FROM information_schema.columns WHERE table_name = 'myTable' AND column_name = 'myColumnName'

これにより、コメントが返されます:myTable.myColumnName

3
Brian

あなたが望むのはMySQLのinformation_schemaビューだと思います: http://dev.mysql.com/doc/refman/5.0/en/tables-table.html

3
Matt Rogish
SELECT * FROM INFORMATION_SCHEMA.TABLES

それは良いスタートになります。詳細については、 INFORMATION_SCHEMA Tables を確認してください。

3
Sören Kuklau

mySql 5.1では、試すことができます

show tables like 'user%';

出力:

mysql> show tables like 'user%';

+----------------------------+

| Tables_in_test (user%) |

+----------------------------+

| user                       |

| user_password              |

+----------------------------+

2 rows in set (0.00 sec)
2
MT467

はい、table_schemaからのSELECTはシステム管理に非常に役立ちます。サーバー、データベース、テーブルなどがたくさんある場合は、要素を削除または更新する必要がある場合があります。たとえば、「wp_old _...」というプレフィックス名を持つすべてのテーブルを削除するクエリを作成するには、次のようにします。

SELECT concat('DROP TABLE ', table_name, ';') FROM INFORMATION_SCHEMA.TABLES
WHERE table_schema = '*name_of_your_database*'
AND table_name LIKE 'wp_old_%';
2
Srdjan

ステートメントの一部としてSELECT * FROMを使用する理由がわかりません。

12.5.5.30。SHOW TABLES構文

1
Derek B. Bell