복붙노트

[SQL] MySQL의 쿼리은 "테이블"에서 데이터를 선택합니다

SQL

MySQL의 쿼리은 "테이블"에서 데이터를 선택합니다

그것은 MySQL은 쇼 테이블에서 선택 할 수 있습니까?

SELECT * FROM (SHOW TABLES) AS `my_tables`

(적어도 5.0.51a에) 작업을하지 않는 이상하지만이 라인을 따라 뭔가.

해결법

  1. ==============================

    1.난 당신이 INFORMATION_SCHEMA.TABLES SELECT * FROM을 원한다고 생각

    난 당신이 INFORMATION_SCHEMA.TABLES SELECT * FROM을 원한다고 생각

    http://dev.mysql.com/doc/refman/5.0/en/tables-table.html 참조

  2. ==============================

    2.당신은 INFORMATION_SCHEMA에서 선택하지 않는 다른 언급이 나는, 알고하지 않는 것이.

    당신은 INFORMATION_SCHEMA에서 선택하지 않는 다른 언급이 나는, 알고하지 않는 것이.

    그러나, SHOW 명령은 매우 유연합니다, 예컨대 :

    SHOW tables like '%s%'
    
  3. ==============================

    3.계산하기:

    계산하기:

    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;
    
  4. ==============================

    4.

    SELECT * FROM INFORMATION_SCHEMA.TABLES
    

    즉 좋은 시작해야한다. 자세한 내용은 INFORMATION_SCHEMA 테이블을 확인합니다.

  5. ==============================

    5.당신은 INFORMATION_SCHEMA.TABLES 쿼리로 봤어? 마찬가지로

    당신은 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;
    
  6. ==============================

    6.당신은 당신이 생각하는 것보다 가까이있을 수 있습니다 - 쇼 테이블 이미 많은 SELECT처럼 동작 :

    당신은 당신이 생각하는 것보다 가까이있을 수 있습니다 - 쇼 테이블 이미 많은 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";
    }
    
  7. ==============================

    7.당신은 당신의 예에서와 같이 하위 쿼리 내부 SHOW 문을 넣을 수 없습니다. 하위 쿼리에 갈 수있는 유일한 문은 SELECT입니다.

    당신은 당신의 예에서와 같이 하위 쿼리 내부 SHOW 문을 넣을 수 없습니다. 하위 쿼리에 갈 수있는 유일한 문은 SELECT입니다.

    다른 답변이 언급 한 것처럼, 직접 SELECT와 INFORMATION_SCHEMA를 조회 방법 것이 더 많은 유연성을 얻을 수 있습니다.

    MySQL의의 SHOW 문은 내부적으로 INFORMATION_SCHEMA 테이블에 대해 단지 쿼리입니다.

    사용자 @physicalattraction는 대부분의 다른 답변에서이 댓글을 올렸습니다 :

    반대로, 영업 이익의 질문은 모든 테이블에서 데이터를 선택하려는 말을하지 않습니다. 그들은 테이블 이름의 단지 목록입니다 쇼 테이블의 결과에서 선택하고 싶은 말은.

    영업 이익은 모든 테이블에서 모든 데이터를 선택하려는 않는 경우, 대답은 당신이 하나 개의 쿼리와 함께 할 수없는, 아니 없다. 각 쿼리는 명시 적으로 테이블의 이름을 지정해야합니다. 당신은 테이블 이름 변수 또는 동일한 쿼리의 다른 부분의 결과가 될 수 없습니다. 또한, 주어진 질의 결과의 모든 행은 동일한 열이 있어야합니다.

    유일한 방법은 모든 테이블에서 모든 데이터를 선택 그래서 쇼 테이블을 실행하고 그 결과에 이름이 각 테이블에 대해 다른 쿼리를 실행합니다.

  8. ==============================

    8.나는 당신이 원하는 것은 MySQL의의 INFORMATION_SCHEMA보기 (들) 생각 : http://dev.mysql.com/doc/refman/5.0/en/tables-table.html

    나는 당신이 원하는 것은 MySQL의의 INFORMATION_SCHEMA보기 (들) 생각 : http://dev.mysql.com/doc/refman/5.0/en/tables-table.html

  9. ==============================

    9.

    SELECT column_comment FROM information_schema.columns WHERE table_name = 'myTable' AND column_name = 'myColumnName'
    

    이에 코멘트를 반환합니다 myTable.myColumnName를

  10. ==============================

    10.당신은 저장 프로 시저를 생성하고 데이터를 표시하는 테이블의 이름을 통해 다음, 커서에서 루프를 테이블 이름을 넣을 수 있습니다.

    당신은 저장 프로 시저를 생성하고 데이터를 표시하는 테이블의 이름을 통해 다음, 커서에서 루프를 테이블 이름을 넣을 수 있습니다.

    저장 프로 시저 시작하기 : 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();
    
  11. ==============================

    11.예, TABLE_SCHEMA에서 SELECT는 시스템 관리에 매우 유용 할 수 있습니다. 당신은 서버의 많은 경우, 데이터베이스는 테이블 ... 때때로 당신은 DROP 또는 요소의 UPDATE 무리 할 필요가있다. 예를 들어 DROP 접 두부 이름 "wp_old _..."모든 테이블에 대한 쿼리를 만들 수 있습니다 :

    예, TABLE_SCHEMA에서 SELECT는 시스템 관리에 매우 유용 할 수 있습니다. 당신은 서버의 많은 경우, 데이터베이스는 테이블 ... 때때로 당신은 DROP 또는 요소의 UPDATE 무리 할 필요가있다. 예를 들어 DROP 접 두부 이름 "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_%';
    
  12. ==============================

    12.MySQL은 5.1 당신은 시도 할 수 있습니다

    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)
    
  13. ==============================

    13.당신은 명령문의 일부로로부터 SELECT *를 사용하려는 이유를 이해하지 않습니다.

    당신은 명령문의 일부로로부터 SELECT *를 사용하려는 이유를 이해하지 않습니다.

    12.5.5.30. 쇼 테이블 구문

  14. from https://stackoverflow.com/questions/64894/select-data-from-show-tables-mysql-query by cc-by-sa and MIT license