SQL - How can I get the name of a specific column - mysql

I want to get the name of a specific column. I only found the function to get ALL column names:
select Column_name
from Information_schema.columns
where Table_name like 'table name'
Is it possible to select a specific column?
For example if I have a table with 10 columns, I want to get the column "firstname".

Yes it is:
select Column_name
from Information_schema.columns
where Table_name = 'table name'
and COLUMN_NAME = '<your column name>'

Related

Get Table Name, Column Name, Data Type & Character Maximum Lenght mySQL

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!

How can I select one column from an SQL query with the "SHOW" keyword?

How can I select one column from this SQL query:
SHOW KEYS FROM table WHERE Key_name = 'PRIMARY'
like this:
SELECT name FROM table WHERE id = 1
This code worked for me
SELECT k.column_name
FROM information_schema.table_constraints t
JOIN information_schema.key_column_usage k
USING(constraint_name,table_schema,table_name)
WHERE t.constraint_type='PRIMARY KEY'
AND t.table_schema='YOURDATABASE'
AND t.table_name='YOURTABLE';
If your goal is to fetch the column name of primary keys, you can use this query which gets the information from the information_schema.statistics table. You can filter the information by schema / table name as well.
SELECT column_name
FROM information_schema.statistics
WHERE table_schema='schema_name'
AND table_name = 'table_name'
AND index_name='PRIMARY'
ORDER BY seq_in_index;

Get the different column names on two tables MySQL

I have two tables with almost identical column names :
Here's a sample table
I want to get the columns names highlighted in red.
Any idea?
Try this:
SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = 'your_schema' AND
TABLE_NAME = 'table2' AND
COLUMN_NAME NOT IN (
SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = 'your_schema' AND
TABLE_NAME = 'table1');
The above query returns the column names of table2 not present in table1.
Demo here

How to identify a column with name exist in all tables?

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

find columns in all database

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