- Как получить список и описание всех колонок в таблице Microsoft SQL Server?
- Получаем список колонок таблицы с помощью представления информационной схемы
- Получаем список столбцов таблицы с помощью системного представления sys.columns
- Получаем список колонок таблицы с помощью системной процедуры sp_columns
- Оператор SELECT в SQL
- SQL — Оператор SELECT
- Синтаксис оператора SELECT
Как получить список и описание всех колонок в таблице Microsoft SQL Server?
В данной заметке будет рассмотрено несколько способов получения информации о столбцах таблицы в базе данных Microsoft SQL Server, например, мы научимся получать список колонок таблицы, включая их тип данных, с помощью SQL запроса.
Начну с того, что если Вам нужно просто визуально посмотреть, какие колонки или какой тип данных у той или иной колонке в таблице, то Вы для этого можете использовать графический функционал SQL Server Management Studio, а именно «Обозреватель объектов». Например, для того чтобы посмотреть информацию о столбцах таблицы, необходимо плюсиком открыть соответствующий контейнер.
Но если Вам необходимо выгрузить эту информацию или обработать ее в SQL инструкции, то в этом случае необходимо обращаться к системным объектам SQL Server с помощью языка SQL, как и к каким именно объектам обращаться мы сейчас и рассмотрим.
Примечание! Все примеры ниже мы будем рассматривать в Microsoft SQL Server 2016 Express. В базе данных создана тестовая таблица TestTable, она имеет всего три столбца.
Получаем список колонок таблицы с помощью представления информационной схемы
В Microsoft SQL Server существует специальная схема — INFORMATION_SCHEMA, которая содержит метаданные для всех объектов базы данных. В данной схеме есть представление COLUMNS, с помощью которого и можно получить информацию о колонках таблицы. Также в ней есть и другие полезные представления, о которых мы разговаривали в статье — «Представления информационной схемы Microsoft SQL Server».
А теперь допустим, нам нужно получить информацию о столбцах в таблице, например, имя столбца, тип данных и возможность принятия значения NULL, для этого мы напишем следующий запрос, в котором обратимся к представлению COLUMNS информационной схемы.
Получаем список столбцов таблицы с помощью системного представления sys.columns
Также информацию о колонках таблицы можно получить с помощью системного представления sys.columns, но только в этом случае для получения точно такого же результата, как был выше, необходимо будет объединять несколько системных представлений, а именно sys.tables, sys.columns и sys.types, так как в представлении sys.columns есть только идентификаторы нужных нам данных.
Получаем список колонок таблицы с помощью системной процедуры sp_columns
В SQL Server существует специальная системная процедура sp_columns, которая как раз и предназначена для получения информации о колонках таблицы.
Какой из рассмотренных выше способов Вам подойдет и окажется удобней решать Вам, а у меня на этом все, удачи!
Заметка! Новичкам рекомендую посмотреть мой видеокурс по T-SQL для начинающих, с помощью него Вы «с нуля» научитесь работать с SQL и программировать на T-SQL.
Источник
Оператор SELECT в SQL
категория Базы данных | |
дата | 17.07.2009 |
автор | ikkko |
голосов | 30 |
[Disclaimer: Данная статья была переведена в рамках «Конкурса на лучший перевод статьи» на сервисе Quizful. Ссылка на оригинал находится внизу страницы.]
SQL — Оператор SELECT
Название SQL (Structured Query Language – язык структурированных запросов) отражает тот факт, что запросы являются наиболее часто используемым элементом SQL. Запрос – это оператор, который посылает команду Системе Управления Базой Данных (СУБД) произвести манипуляцию или отобразить определенную информацию. Все запросы по выборке данных в SQL конструируются с помощью оператора SELECT. Он позволяет выполнять довольно сложные проверки и обработку данных.
Запрос может выводить данные из определенного столбца или изо всех столбцов таблицы. Чтобы создать простейших SELECT запрос, необходимо указать имя столбца и название таблицы.
Синтаксис оператора SELECT
SELECT Ключевое слово, которое сообщает базе данных о том, что оператор является запросом. Все запросы начинаются с этого слова, за ним следует пробел.
Column_list Список столбцов таблицы, которые выбираются запросом. Столбцы, не указанные в операторе, не будут включены в результат. Если необходимо вывести данные всех столбцов, можно использовать сокращенную запись. Звездочка (*) означает полный список столбцов.
FROM table_name Ключевое слово, которое должно присутствовать в каждом запросе. После него через пробел указывается имя таблицы, являющейся источником данных.
Код в скобках является не обязательным в операторе SELECT. Он необходим для более точного определения запроса.
Также необходимо сказать, что SQL код является регистронезависимым. Это означает, что запись SELECT можно написать как select. СУБД не отличит эти две записи, однако советуют все операторы SQL писать прописными буквами, чтобы его легко можно было отличить от другого кода.
Примеры рассмотрим на таблице Salespeople (продавцы) из классического учебника по SQL Мартина Грабера.
Вот MySQL код для создания тестовой таблицы:
Таблица выглядит так:
snum | sname | city | comm |
---|---|---|---|
1001 | Peel | London | 0,12 |
1002 | Serres | San Jose | 0,13 |
1003 | Axelrod | New York | 0,1 |
1004 | Motika | London | 0,11 |
1007 | Rifkin | Barcelona | 0,15 |
Столбцы таблицы Salespeople:
snum | Номер продавца |
sname | Имя продавца |
city | Город |
comm | Коммисионные продавца, в десятичной форме |
Пример использования оператора SELECT
1. Необходимо вывести список продавцов, и отобразить их имена (sname)
sname |
---|
Peel |
Serres |
Axelrod |
Motika |
Rifkin |
В данном запросе, после оператора SELECT идет имя столбца, которое необходимо отобразить. После ключевого слова FROM указывается имя таблицы.
2. Необходимо вывести список продавцов, и отобразить их имена и город (sname и city)
sname | city |
---|---|
Peel | London |
Serres | San Jose |
Axelrod | New York |
Motika | London |
Rifkin | Barcelona |
Здесь после оператора SELECT перечисляются столбцы, которые необходимо вывести. Имена столбцов пишутся через запятую.
3. Необходимо вывести всю таблицу
Для этого можно использовать разный синтаксис написания запросов. Перечисляем каждый столбец после оператора SELECT:
Или можно добиться того же результата, используя сокращенную запись:
Результат:
snum | sname | city | comm |
---|---|---|---|
1001 | Peel | London | 0,12 |
1002 | Serres | San Jose | 0,13 |
1003 | Axelrod | New York | 0,1 |
1004 | Motika | London | 0,11 |
1007 | Rifkin | Barcelona | 0,15 |
Также хочется дать небольшой совет. Для удобства отладки запросов, некоторые люди пишут перечень столбцов, которые необходимо вывести, в отдельной строке. Это облегчает комментирование кода. Для комментирования кода в SQL используется такой синтаксис — /* закомментированный код */ .Пример:
Так будут выведены 4 столбца, однако при такой записи можно легко закомментировать ненужный столбец. Например так:
Теперь столбец snum выводиться не будет, потому что он закомментирован. Очень быстро и удобно. Как писать SQL код, решать конечно Вам, но знать такие вещи иногда бывает полезно.
Использование выражений (expressions) в операторе SELECT
Многие СУБД предоставляют специальные возможности по обработке результатов запроса. Набор таких средств в разных СУБД различен, однако существуют некоторые стандартные возможности, такие как выражения. Например может потребоваться выполнить простые математические операции над данными, чтобы представить их в более удобном виде, или вставить дополнительный текст в результат запроса. SQL позволяет размещать среди выбранных столбцов скалярные выражения и константы, которые могут дополнять или замещать столбцы в предложениях SELECT. Рассмотрим пример.
4. Необходимо вывести комиссионные (comm) продавцов в виде процентов, а не десятичных чисел
snum | sname | city | comm |
---|---|---|---|
1001 | Peel | London | 12 |
1002 | Serres | San Jose | 13 |
1003 | Axelrod | New York | 10 |
1004 | Motika | London | 11 |
1007 | Rifkin | Barcelona | 15 |
В последнем столбце все полученные данные умножаются на 100, и выводятся в виде процентов.
Этот столбец не имеет названия, потому что не содержит измененные данные и поэтому именуется по усмотрению СУБД (например MySQL именует столбец comm * 100, в примерах М.Граббера столбец имеет имя 4, т.е его номер).
В таких случаях удобно использовать именование столбцов. Например можно назвать последний столбец percent. Для этого после имени столбца необходимо указать ключевое слово AS и затем имя столбца в результирующей страницы.
Результат:
snum | sname | city | percent |
---|---|---|---|
1001 | Peel | London | 12 |
1002 | Serres | San Jose | 13 |
1003 | Axelrod | New York | 10 |
1004 | Motika | London | 11 |
1007 | Rifkin | Barcelona | 15 |
В результате запроса последний столбец именуется строкой ‘percent’, что облегчает понимание.
Так как выводится число в виде процентов, то неплохо бы обозначить это в результате. На помощь приходит возможность SQL добавлять текст в результат. Выглядит это так:
Результат:
snum | sname | city | percent | % |
---|---|---|---|---|
1001 | Peel | London | 12 | % |
1002 | Serres | San Jose | 13 | % |
1003 | Axelrod | New York | 10 | % |
1004 | Motika | London | 11 | % |
1007 | Rifkin | Barcelona | 15 | % |
Видно, что после вывода строки из БД, появился новый столбец, заполненный знаком процента (%).
Если Вас не устраивает вывод данных и дополняющего текста в разных столбцах , то можно использовать специальные функции Вашей СУБД, для объединения в один столбец.
В MySQL для этого используется функция CONCAT. Вот ее определение из справочника:
CONCAT(str1,str2. )
Возвращает строку, являющуюся результатом конкатенации аргументов. Если хотя бы один из аргументов равен NULL, возвращается NULL. Может принимать более 2 аргументов. Числовой аргумент преобразуется в эквивалентную строковую форму.
Пример: Результат:
snum | sname | city | persent |
---|---|---|---|
1001 | Peel | London | 12.000% |
1002 | Serres | San Jose | 13.000% |
1003 | Axelrod | New York | 10.000% |
1004 | Motika | London | 11.000% |
1007 | Rifkin | Barcelona | 15.000% |
В данном запросе, функция CONCAT принимает 2 аргумента, это comm * 100 и знак процента (‘%’). После этого с помощью AS мы именуем столбец.
Важно знать, что использование функций ухудшает быстродействие. Это не единственный минус, но очень важный. Поэтому если можно обойтись стандартным кодом SQL, лучше не использовать функции. О них стоит вспоминать только в крайних случаях.
Исключение избыточных данных
Часто бывает необходимым исключить повторяющиеся значения из результатов запроса. Для этого используется ключевое слово DISTINCT. Противоположный эффект дает применение слова ALL, которое используется по умолчанию (т.е. его не нужно указывать).
5. Необходимо вывести города (city), где есть продавцы
Запрос без исключений:
Результат:
city |
---|
London |
San Jose |
New York |
London |
Barcelona |
В результате город London повторяется два раза. Ничего страшного, но например если необходимо динамически формировать выпадающий список, то повторяющиеся данные будут очень мешать.
Запрос с исключением избыточных данных:
city |
---|
London |
San Jose |
New York |
Barcelona |
Повторяющиеся значение London исключены из результата, что и требовалось.
Сортировка результата по значениям столбцом
Оператор SELECT выводит данные в произвольной последовательности. Для сортировки результата по определенному столбцу, в SQL используется оператор ORDER BY (т.е. упорядочить по….). Этот оператор позволяет изменить порядок вывода данных. ORDER BY упорядочивает результат запроса в соответствии со значениями одного или нескольких столбцов, выбранных в предложении SELECT. При этом для каждого столбца можно задать сортировку по возрастанию – ascending (ASC) (этот параметр используется по умолчанию) или по убыванию – descending (DESC).
Отсортируем результат по столбцу sname. После оператора ORDER BY указываем по какому столбцу сортировать, затем необходимо указать способ сортировки
Пример – сортировка по возрастанию:
snum | sname | city | comm |
---|---|---|---|
1003 | Axelrod | New York | 0,1 |
1004 | Motika | London | 0,11 |
1001 | Peel | London | 0,12 |
1007 | Rifkin | Barcelona | 0,15 |
1002 | Serres | San Jose | 0,13 |
Пример – сортировка по убыванию:
Результат:
snum | sname | city | comm |
---|---|---|---|
1002 | Serres | San Jose | 0,13 |
1007 | Rifkin | Barcelona | 0,15 |
1001 | Peel | London | 0,12 |
1004 | Motika | London | 0,11 |
1003 | Axelrod | New York | 0,1 |
Пример – сортировка по нескольким столбца:
snum | sname | city |
---|---|---|
1002 | Serres | San Jose |
1007 | Rifkin | Barcelona |
1001 | Peel | London |
1004 | Motika | London |
1003 | Axelrod | New York |
Несколько важных замечаний:
— столбец, по которому происходит сортировка, обязательно должен быть указан в SELECT (можно использовать *)
— оператор ORDER BY всегда пишется в конце запроса
Если Вам понравилась статья, проголосуйте за нее
Голосов: 30 Голосовать
Источник