I have selected all tables using this query
SELECT TABLE_SCHEMA from information_schema.tables
I want to copy the result of this query to another table info in its column table_names
I want to do this in 1 query. Is this possible?
Thank you in advance :)
Maybe this,but not tested
INSERT INTO info (table_names) SELECT TABLE_SCHEMA FROM information_schema.tables
INSERT INTO Info
SELECT TABLE_SCHEMA from information_schema.tables
select * from Info
But SELECT TABLE_SCHEMA from information_schema.tables
will return dbo, etc, schema names, if you want to get table names use
select name from sys.tables
so use
INSERT INTO Info
SELECT name
FROM sys.tables
See http://www.blackwasp.co.uk/SQLSelectInsert.aspx for example for insert into with select, there're many other samples.
Related
I have a database in MySQL called "Test Database" and I want to create a query to get all database's columns with the following characteristics:
First column - Table name
Second column - Column name
Third column - Type
Forth column - Maximum length
I used the following queries separately to get what i want:
Get Table Name:
Select Table_Name from INFORMATION_SCHEMA.Tables
Get Columns Name:
Select Column_Name from INFORMATION_SCHEMA.Columns
Get Column Type:
Select Data_Type from INFORMATION_SCHEMA.Columns
Get Columns Size:
Select Character_Maximum_Length from INFORMATION_SCHEMA.Columns
But I did not manage to merge this into one query to get the below result:
Any help will be greatly appreciated!
You can put more than one column in a SELECT statement..
Select Table_Name, Column_Name, Data_Type, Character_Maximum_Length
from INFORMATION_SCHEMA.Columns
Use AS if you want to rename the columns you see (SELECT table_name AS "Table Name" .... I'd recommend not putting spaces in them though
If that is the entire table, then you could simplify your query easily as:
SELECT * FROM INFORMATION_SCHEMA.Columns
this will get all columns that you need.
If you want to be more specific you could try this variant:
SELECT Table_Name AS TableName, Column_Name as ColumnName, Data_Type as
DataType, Character_Maximum_Length as Character_Maximum_Length FROM
INFORMATION_SCHEMA.Columns
I hope this will help you!
i want to query a database which has huge tables for the columns with specific name
ex: fetch all the tables which has column name like 'name'
Thanks.
Try
SELECT table_name -- you might want to add DISTINCT if you use pattern matching with LIKE
FROM INFORMATION_SCHEMA.COLUMNS
WHERE table_schema = SCHEMA()
AND column_name = 'name' -- or column_name LIKE '%name%'
Here is SQLFiddle demo
If I have a database some_database with multiples tables like:
table_one
table_two
table_three
where
table_one has CPV_one
table_two has CPV_two
table_three has CPV_three
I need to find all tables that have a column like '%CPV%'
This can be done by sql query? I want to avoid check all tables one by one.
You can query information_schema to get a list of each table in your database with a matching column name:
SELECT
TABLE_NAME, COLUMN_NAME
FROM
information_schema.COLUMNS
WHERE
TABLE_SCHEMA = 'SOME_DATABASE'
AND COLUMN_NAME LIKE '%CPV%'
EDIT (selecting only the TABLE_NAME column)
As pointed out in a comment, if you want to select only the name of the table (without the list of columns that match), you should also use the DISTINCT keyword - otherwise a duplicate row will be returned for the same table for each column that matches:
SELECT
DISTINCT TABLE_NAME
FROM
information_schema.COLUMNS
WHERE
TABLE_SCHEMA = 'SOME_DATABASE'
AND COLUMN_NAME LIKE '%CPV%'
SELECT DISTINCT TABLE_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME LIKE '%CPV%'
AND TABLE_SCHEMA='YourDatabase';
How about querying the MySQL information_schema?
SELECT TABLE_NAME
FROM information_schema.COLUMNS
WHERE COLUMN_NAME LIKE '%CPV%'
Here you have the code to get the table names with the needed condition:
SELECT DISTINCT TABLE_NAME
FROM information_schema.Columns
WHERE COLUMN_NAME LIKE '%CPV%';
For more details on the INFORMATION SCHEMA take a look here
And for COLUMNS table here
How do I create a query that prints all records from all tables using SQL*Plus?
I can retrieve all tables using this:
select object_name from all_objects
where owner='me' and object_type='TABLE'
SELECT column_name
FROM user_tab_cols
WHERE table_name in (SELECT table_name FROM dba_tables)
If I want to return only the result of one field from the result set of a SHOW TABLE STATUS command, for example "Auto_increment", what would the query look like?
SELECT AUTO_INCREMENT FROM information_schema.TABLES
WHERE TABLE_SCHEMA = 'db1' AND TABLE_NAME = 'table1'
http://dev.mysql.com/doc/refman/5.0/en/tables-table.html
http://dev.mysql.com/doc/refman/5.0/en/information-schema.html