Образовательный блог — всё для учебы. Простые sql запросы


04.Простейшие SQL-запросы

Типы данных SQL (Как в Pg, как в стандарте)

Строковые типы

Числовые типы данных

Денежные, Символьные, Двоичные типы данных

Логический тип. Перечисления

Простейшие SELECT-запросы

Оператор SELECT (выбрать) языка SQL является самым важным и самым часто используемым оператором. Он предназначен для выборки информации из таблиц базы данных. Упрощенный синтаксис оператора SELECT выглядит следующим образом.

SELECT [ ALL | DISTINCT ] select_item_commalist

FROM table_reference_commalist

[ WHERE conditional_expression ]

[ GROUP BY column_name_commalist ]

[ HAVING conditional_expression ]

[ ORDER BY order_item_commalist ]

В квадратных скобках указаны элементы, которые могут отсутствовать в запросе.

Ключевое слово SELECT сообщает базе данных, что данное предложение является запросом на извлечение информации.

После слова SELECT через запятую перечисляются наименования полей (список атрибутов), содержимое которых запрашивается.

Обязательным ключевым словом в предложении-запросе SELECT является слово FROM (из). За ключевым словом FROM указывается список разделенных запятыми имен таблиц, из ко-торых извлекается информация.

Например, select title, description from film

Любой SQL-запрос должен заканчиваться символом «;» (точка с запятой). Результатом данного запроса будет таблица...

Порядок следования столбцов в этой таблице соответствует порядку полей, указанному в запросе

Если необходимо вывести значения всех, столбцов таблицы, то можно вместо перечисления их имен использовать символ «*» (звездочка).

SELECT * FROM film;

В данном случае результатом выполнения запроса будет вся таблица film.

Еще раз обратим внимание на то, что получаемые в результате SQL-запроса таблицы не в полной мере отвечают определению реляционного отношения. В частности, в них могут оказаться кортежи (строки) с одинаковыми значениями атрибутов.

Например, запрос «список имен актеров», можно записать в следующем виде.

select first_name from actor;

Его результатом будет таблица, в таблице встречаются одинаковые строки. Для исключения из результата SELECT-запроса повторяющихся записей используется ключевое слово DISTINCT (отличный).

Если запрос SELECT извлекает множество полей, то DISTINCT исключает дубликаты строк, в которых значения всех выбранных полей идентичны.

Предыдущий запрос можно записать в следующем виде.

select distinct first_name from actor;

В результате получим таблицу, в которой дубликаты строк исключены.

Ключевое слово ALL (все), в отличие от DISTINCT, оказывает противоположное действие, то есть при его использовании повторяющиеся строки включаются в состав выходных данных. Режим, задаваемый ключевым словом ALL, действует по умолчанию, поэтому в реальных запросах для этих целей оно практически не используется.

Использование в операторе SELECT предложения, определяемого ключевым словом WHERE (где), позволяет задавать выражение условия (предикат), принимающее значение истина или ложь для значений полей строк таблиц, к которым обращается оператор SELECT. Предложение WHERE определяет, какие строки указанных таблиц должны быть выбраны. В таблицу, яв-ляющуюся результатом запроса, включаются только те строки, для которых условие (предикат), указанное в предложении WHERE, принимает значение истина.

Пример: Написать запрос, выполняющий выборку фамилий всех актеров с именем PENELOPE

select last_name from actor

where first_name='PENELOPE';

В задаваемых в предложении WHERE условиях могут использоваться операции сравнения, определяемые операторами = (равно), > (больше), < (меньше), >= (больше или равно), <— (меньше или равно), <> (не равно), а также логические операторы AND, OR И NOT.

Например, запрос для получения названий и описаний фильмов - короткометражек (короче 60 мин), прокат которых стоит меньше 3$ , будет выглядеть таким образом:

select title, description from film

where length < 60 and rental_rate < 3

Результат выполнения этого запроса имеет вид:

rental - прокат

inventory - опись, запасы

store- запас, магазин

staff - персонап

studfiles.net

I. Простые запросы на языке sql

Запрос на языке SQL формируется с использованием оператора Select. Оператор Select используется:

для выборки данных из базы данных;

для получения новых строк в составе оператора Insert;

для обновления информации в составе оператора Update.

В общем случае оператор Select содержит следующие семь спецификаторов, расположенных в операторе в следующем порядке:

Обязательными являются только спецификаторы Select и From. Эти два спецификатора составляют основу каждого запроса к базе данных, поскольку они определяют таблицы, из которых выбираются данные, и столбцы, которые требуется выбрать.

Спецификатор Where добавляется для выборки определенных строк или указания условия соединения. Спецификатор Order by добавляется для изменения порядка получаемых данных. Спецификатор Into temp добавляется для сохранения этих результатов в виде таблицы с целью выполнения последующих запросов. Два дополнительных спецификатора оператора Select - Group by (спецификатор группирования) и Having (спецификатор условия выборки группы) - позволяют выполнять более сложные выборки данных. В следующих упражнениях рассмотрены некоторые аспекты языка (в запросах для наглядности использованы другие обозначения: исходя из смысла данных; при реализациях необходимо использовать настоящие имена полей, см. рис. 9).

У п р а ж н е н и я

1. Выбор всех строк и столбцов таблицы.

Пример

Выдать полную информацию о поставщиках:

Select * from S

Результат: таблица S в полном объеме.

2. Измение порядка следования столбцов.

Пример

Выдать таблицу S в следующем порядке: фамилия, город, рейтинг, номер_поставщика:

Select фамилия, город, рейтинг, номер_поставщика from S

Результат: таблица S в требуемом порядке.

3. Выбор заданных столбцов.

Пример

Выдать номера всех поставляемых деталей:

Select номер_детали from SPJ

Результат: столбец номер_детали таблицы SPJ.

4. Выбор без повторения.

Пример

Выдать номера всех поставляемых деталей, исключая дублирование:

Select distinct номер_детали from SPJ

Результат:

номер_детали

P1

P2

P3

P4

P5

P6

5. Использование в запросах констант и выражений.

Пример

Select номер_детали, "вес в граммах", вес*454 from P

Результат:

P1 вес в граммах=5448

 

---------------------

 

---------------------

 

P6 вес в граммах=8226

6. Выборка подстрок.

Пример

Выдать сокращение фамилий до двух букв и рейтинг поставщика:

Select фамилия[1,2], рейтинг from S

Результат:

Фамилия

Рейтинг

См

20

 

Дж

10

 

Бл

30

 

Кл

20

 

Ад

30

7. Ограничение в выборке.

Пример

Выдать номера всех поставщиков, находящихся в Париже, с рейтингом больше 20:

Select номер_поставщика from S where город="Париж" and рейтинг>20

Результат:

номер_поставщика

 

S3

8. Выборка с упорядочиванием.

Пример

Выдать номера поставщиков, находящихся в Париже в порядке убывания рейтинга:

Select номер_поставщика from S where город="Париж" order by рейтинг desc

Результат:

номер_поставщика

рейтинг

 

S3

30

 

S2

10

9. Упорядочивание по нескольким столбцам.

Пример

Выдать список поставщиков, упорядоченных по городу, в пределах города - по рейтингу.

Select * from S order by 4, 3

Результат:

Hомеp_поставщика

Фамилия

Рейтинг

Гоpод

 

S5

Адамс

30

Атенс

 

S1

Смит

20

Лондон

 

S4

Кларк

20

Лондон

 

S2

Джонс

10

Париж

 

S3

Блейк

30

Париж

10. Фраза between.

Пример.

Выдать информацию о деталях, вес которых лежит в диапазоне от 16 до 19:

Select номер_детали, название, вес from P where вес between 16 and 19

Результат:

номер_детали

название

вес

 

P2

Болт

17

 

P3

Винт

17

 

P6

Блюм

19

11. Фраза in ( not in ).

Пример

Выдать детали, вес которых равен 12, 16 или 17:

Select Номер_детали, Название, Вес from P where Вес in (12, 16, 17)

Результат:

Номер_детали

Название

Вес

 

P1

Гайка

12

 

P2

Болт

17

 

P3

Винт

17

 

P5

Кулачок

12

12. Выбор по шаблону.

Для запросов с поиском по шаблону, основанных на поиске подстрок в полях типа CHARACTER, используются ключевые слова LIKE и MATCHES.

СИМВОЛ

ЗНАЧЕНИЕ

LIKE

 

%

заменяет последовательность символов;

-

заменяет любой одиночный символ;

\

отменяет специальное назначение следующего за ним символа.

MATCHES

 

*

заменяет последовательность символов;

?

заменяет любой одиночный символ;

[]

служит для замены одиночного символа или символа из диапазона;

\

отменяет специальное назначение следующего за ним символа.

Примеры

Выбрать список деталей, начинающихся с буквы "Б":

Select номер_детали, название, вес from P where название like "Б%"

Результат:

номер_детали

название

вес

P5

Болт

12

P6

Блюм

19

Выдать список фамилий поставщиков, начинающихся с букв [В-Н]:

Select фамилия from S where фамилия matches "В-Н"

Результат:

фамилия

Джонс

Блейк

Кларк

Подготовьте запрос и проверьте полученный результат.

studfiles.net

Простые SQL запросы - короткая справка и примеры - Cайт "У Крайнего" . ИТ

Простые SQL запросы

Запросы написаны без экранирующих кавычек, так как у MySQL, MSSQL и PostGree они разные.

Вывод нужны полей

Выводим только указанные поля из указанной таблицы

SELECT name_last, name_first, salary FROM table_name

Вывод всех полей из таблицы

* обозначает все поля

SELECT * FROM table_name

 

Задание псевдонима таблице

Таблице table_name в качестве псевдонима задано t. Выводим всех служащих с окладом свыше 35000

SELECT * FROM table_name AS t WHERE t.salary>35000

Исключение дубликатов

Хотим знать из каких стран поставляют продукцию продавцы

SELECT DISTINCT country FROM vendors

Постановка условия

Выводим поставщиком из России

SELECT * FROM vendors WHERE country="Россия"

Использование логических операторов

Хотим знать из каких стран поставляют продукцию продавцы выводим только предпочитаемых поставщиков из России. Когда используется оператор AND, то должны удовлетворяться оба условия

SELECT * FROM vendors WHERE country="Россия" AND preferred="true"

Использование логических операторов

Хотим видеть только тех животных, которые обитают в Тюменской области или в Московской области. Когда используем оператор OR, то должно удовлетворяться хотя бы одно условие

SELECT * FROM animals WHERE area="Тюменская область" OR area="Московская область"

Использование логических операторов

Выводим животных, обитающих в Тюменской области с весом не менее 7 кг. Когда используется оператор AND NOT должно удовлетворять первое условие и не должно второе

SELECT * FROM animals WHERE area="Тюменская область" AND NOT massa<7

Упорядочивание записей по возрастанию

Выводим животных в порядке увеличения веса: с начала самые легкие, в конце самые тяжелые.

SELECT * FROM animals ORDER BY massa

Упорядочивание записей по убыванию

Выводим животных в порядке уменьшения веса: с начала самые тяжелые, в конце самые легкие.

SELECT * FROM animals ORDER BY massa DESC

Упорядочивание записей по возрастанию

Упорядочить по третьему столбцу (отсчет начинается с 1)

SELECT * FROM animals ORDER BY 3

Вывести ограниченное количество записей

Выводим записи с первой, всего 10 записей. Остальные отсекаются

SELECT * FROM animals LIMIT 0,10

Сложные SQL запросы

Объединение нескольких запросов

SELECT * FROM animals WHERE area="Тюменская область" UNION SELECT * FROM animals WHERE area="Московская область"

Выводим тех животных, которые обитают в Тюменской области, а также тех, которые обитают в Московской области. Оператором UNION можем объединить несколько запросов.

Внимание! Данная структура уже используется редко. Оставлена для поддержания старых версий. Запрос работает гораздо быстрее, чем UNION. Сам запрос для многих может показаться бредовым, но лично мне встречаются такие конструкции довольно часто, поэтому я его и огласил. Сам оператор UNION куда эффективнее используется, чем можно себе представить, но от этого менее трудоемкий он не становится.

SELECT * FROM animals WHERE area="Тюменская область" AND area="Московская область"

Подсчеты значений поля

// Выводим максимальный оклад из таблицы служащих SELECT MAX(salary) FROM employee // Выводим минимальный оклад из таблицы служащих SELECT MIN(salary) FROM employee // Выводим сумма всех окладов SELECT SUM(salary) FROM employee // Выводим среднею сумма всех окладов SELECT AVG(salary) FROM employee // Выводим количество сотрудников имеющих оклад SELECT COUNT(*) FROM employee // Выводим количество сотрудников в 310а кабинете SELECT COUNT(*) FROM employee WHERE office="310а"

Это важные команды. Рекомендуется, где это возможно, использовать для подсчета именно SQL запросы такого рода, так как ни одна среда программирования не сравнится в скорости обработки данных, чем SQL сервер при обработке своих же данных.

Группировка записей

C помощью конструкции ORDER BY можем узнать какая страна занимает самую большую площадь для каждого континента

SELECT continent, MAX(area) FROM country GROUP BY continent

Конструкция IN

Выводим покупателей из России, Болгарии и Китая

SELECT * FROM customer WHERE country IN ("Россия", "Болгария", "Китай")

Конструкция NOT IN

Выводим всех покупателей за исключением тех, кто проживает в России и Китае

SELECT * FROM customer WHERE country NOT IN ("Россия","Кита")

Вывод пустых / не пустых значений

// Выводим те записи, где НЕ введено значение state SELECT * FROM customer WHERE state IS NULL // Выводим те записи, где введено значение state SELECT * FROM customer WHERE state IS NOT NULL

Вывод значений приблизительно соответствующих нужным

Выводим только тех служащих, у которых фамилия начинается на букву А. Знак % означает любые символы

SELECT * FROM employee WHERE name_last LIKE "А%"

Вывод значений приблизительно соответствующих нужным

Например, мы не помним как правильно пишется «Кабанов» или «Кобанов», тогда нужно будет воспользоваться знаком подчеркивания, который означает любой символ

SELECT * FROM employee WHERE name_last LIKE "К_банов"

Диапазон значений

Можем вывести только тех, кто получает от 25000 до 50000 включительно

SELECT * FROM salary BETWEEN 25000 AND 50000

Использование нескольких таблиц

SELECT o.order_no, o.amount_paid, c.company FROM orders AS o, customer AS с WHERE o.custno=c.custno AND c.city="Тюмень"

Выводим номер и сумму заказа из таблицы заказов и компанию сделавшую заказ из таблицы покупателей.

На самом деле, при правильном запроектированной базе данных данного вида запрос является самым частым, поэтому в MySQL был введен специальный оператор, который работает в разы быстрее, чем выше написанный код.

SELECT o.order_no, o.amount_paid, с.company FROM orders AS o LEFT JOIN customer AS с ON (с.custno=o.custno)

Настоятельно рекомендую использовать в своих запросах именно этот код

Вложенные подзапросы

SELECT * FROM employee WHERE salary=(SELECT MAX(salary) FROM employee)

Мы научились выводить максимальное значение, например, можем узнать максимальный оклад у служащих, но куда было бы интереснее узнать, кто тот счастливчик. Именно здесь используется механизм вложенных подзапросов

Внимание! Вложенные подзапросы являются одним из самых узких мест в SQL серверах. Совместно со своей гибкостью и мощностью, они также существенно увеличивают нагрузку на сервер. Что приводит к катастрофическому замедлению работы других пользователей. Очень часты случаи рекурсивных вызовов при вложенных запросах. Поэтому настоятельно рекомендую НЕ использовать вложенные запросы, а разбивать их на более мелкие. Либо использовать вышеописанную комбинацию LEFT JOIN. Помимо этого данного вида запросы являются повышенным очагом нарушения безопасности.. Если все таки вы решили использовать вложенные подзапросы, то проектируйте их очень внимательно и первоначальные запуски сделать на копиях баз.

  • < Назад
  • Вперёд >

krayny.ru

Введение в SQL. Простые SQL-запросы

SQL – это язык, с помощью которого осуществляется совместная работа пользователей в сетях с помощью унифицированных средств общения с базами данных. (в тетрадь) Непроцедурный язык SQL (Structured Query Language) – структурированный язык запросов, ориентирован на операции с данными, представленными в виде логически взаимосвязанных совокупностей таблиц.  4. Выборка данных из базы данных Команда запроса данных

Команда SELECT выбирает информацию из базы данных.

Основной блок запроса:

SELECT [DISTINCT] {*, столбец [псевдоним], групповая_функция}

FROM таблица

[WHERE условие]

[GROUP BY выражение_группирования]

[HAVING условие_группы]

[ORDER BY {Столбец, выражение} [ASC | DESC]];

где

SELECT Список, включающий, по крайней мере, один атрибут (столбец).
DISTINCT Подавляет выборку дубликатов.
* Выбирает все атрибуты (столбцы).
столбец Выбирает заданный атрибут (столбец).
псевдоним Дает выбранным атрибутам (столбцам) другие заголовки.
таблица Указывает таблицу (отношение), содержащую атрибуты (столбцы).
WHERE Ограничивает запрос кортежами (строками), удовлетворяющими заданному условию.
Условие Состоит из имен атрибутов (столбцов), выражений, констант и операторов сравнения.
GROUP BY Разбивает кортежи (строки) на группы.
Выражение_груп-пирования Определяет атрибут (столбец), по значениям которого группируются кортежи (строки).
HAVING Вывод конкретных групп.
Условие_группы Задает условие отбора групп для вывода.
ORDER BY Задает порядок вывода кортежей (строк).
ASC Сортирует кортежи (строки) в порядке возрастания; используется по умолчанию.
DESC Сортирует кортежи (строки) в порядке убывания.
Простой запрос

В простейшей форме команда SELECT должна включать следующее:

SELECT [DISTINCT] {* | столбец [псевдоним]}

FROM таблица;

Предложение SELECT - задает нужные атрибуты (столбцы). Звездочка (*) означает выбор всех столбцов таблицы. Предложение FROM указывает, в какой таблице находятся столбцы, заданные в предложении SELECT.

Пример: Вывод содержимого всех атрибутов и кортежей таблицыSPORTMEN:

SELECT *

FROM SPORTMEN;

Результат:

id

last_name

first_name

age

-------

---------

---------

------------

Выборка заданных столбцов.

Вывод можно ограничить столбцами, имена которых указаны через запятую в предложении SELECT. Атрибуты (столбцы) в команде SELECT указываются в последовательности, в которой должен осуществляться их вывод.

Формат заголовков столбцов, используемый по умолчанию.

Заголовки атрибутов (столбцов) и данные, состоящие из символов и даты, выравниваются в столбце по левому краю, а числа — по правому. В заголовках столбцов, содержащих символы и даты, лишние символы могут быть отброшены, но числовые заголовки отображаются полностью. По умолчанию заголовки столбцов выводятся в символах верхнего регистра. На выводе можно заменить заголовок столбца псевдонимом.

Псевдонимы столбцов.

При выводе результатов запроса в среде SQL в качестве заголовков столбцов обычно используются их имена. Такие заголовки часто трудны для понимания и даже бессмысленны. Изменить заголовок столбца можно с помощью его псевдонима. Псевдоним указывается в списке команды SELECT сразу за именем столбца и отделяется от него пробелом. По умолчанию такие альтернативные заголовки выводятся в символах верхнего регистра и не могут содержать пробелов, если псевдоним не заключен в кавычки (" ").

Пример: Вывод фамилии, заменив название атрибута псевдонимом Фамилия в таблице trainer.

SELECT last_name “Фамилия” или SELECT last_name AS NEW_LAST_NAME

FROM TRAINER; FROM TRAINER;

AS может использоваться, может нет.

Предотвращение выборки дубликатов строк.

При отсутствии указаний с вашей стороны SQL включает в результаты запросов все кортежи (строки), не изымая дубликаты. Ключевое слово DISTINCT, следующее сразу за словом SELECT, исключает дублирование строк.

После квалификатора DISTINCT можно указать несколько столбцов. В этом случае он будет относиться ко всем выбранным столбцам.

forinformatics.blogspot.com

Общие правила (советы) написания запросов на SQL

Несмотря на то, что все реляционные СУБД имеют встроенный оптимизатор, существуют общие правила, которым стоит придерживаться при создании запросов:

1) Никогда не следует выполнять вычислений на индексированном столбце, например WHERE Amt*5 > : Value

2) Для отключения индекса следует использовать выражения: CName||”, CNum+0 или использовать функцию от значения столбца.

3) Вместо оператора OR предпочтительно использовать оператор UNION.

4) Вместо ключевых слов NOT IN лучше использовать оператор NOT EXISTS.

5) Нельзя допускать значение NULL в индексированном столбце.

6) Не следует использовать оператор LIKE, если достаточно оператора =.

7) Не следует использовать подзапросы, если можно обойтись соединением таблиц JOIN.

8) При объединении таблиц в разделе FROM запроса их следует указывать в порядке уменьшения числа выбираемых из них строк (для продукционного оптимизатора).

9) При ссылке на столбцы при объединении таблиц используйте псевдонимы таблиц.

10) Наибольшее ограничение на выборку строк в разделе WHERE должно стоять первым, если условие выборки включает оператор OR и последним, если содержит только операторы AND (для продукционного оптимизатора).

11) Алгоритмы соединения на основе индексирования производительнее, если меньшую таблицы указать левой. Она загружается в буфер оперативной памяти, а правая затем поблочно считывается для проверки соединения.

12) Используйте полный просмотр, если запрос возвращает более 20% строк из таблиц.

13) В СУБД Oracle8 можно использовать с помощью подсказки /*+INDEX_EFS*/ индексный полный просмотр (EFS), если индекс содержит все столбцы, требуемые в запросе

Простые запросы могут быть написаны самыми различными способами.

Рассмотрим запрос, возвращающий имена всех покупателей, сделавших заказы 10 марта 1990 года.

Варианты реализации запросов:1) Запрос с объединением таблиц

SELECT DISTINCT CName FROM Customer INNER JOIN Orders ON Orders.CNum=Customer.CNum WHERE Odate=10/03/1990

2) Запрос с коррелируемым подзапросом

SELECT DISTINCT CName FROM Customer WHERE 0SELECT COUNT(*) FROM Orders WHERE Odate=10/03/1990 AND Orders.CNum=Customer.CNum)

3) ПримечанияДве редакции запроса возвращают аналогичные результаты, однако, время выборки возрастает от первого запроса к второму. Надеяться, что оптимизатор все исправит, не приходится, поэтому важно изначально создавать «правильные» редакции запросов.

all4study.ru

Полезные советы по написанию SQL запросов | Info-Comp.ru

Сегодня я хочу поговорить о тех простых моментах, которые упрощают жизнь программисту, который пишет SQL запросы, так как это поможет начинающим разработчикам быстрей освоить язык SQL и более правильно, продуманно и просто составлять логику своих запросов.

Все эти моменты я выделяю как «Полезные советы», которые основаны  как на личном опыте, так и на опыте других более опытных людей. И сегодня я хочу поделиться ими с Вами. У меня, их пока получилось 10.

1. При написании запроса перечисляйте поля. Не ставьте *, так как в дальнейшем могут возникнуть некоторые проблемы, хотя с первого взгляда Вы их не замечаете, а напротив думаете, что это намного удобней. Проблемы могут возникнуть следующие: не задействуются индексы, появляются столбцы с одинаковыми названиями, это возникает тогда когда в запросе вы объединяете несколько таблиц, в которых есть поля с одинаковым названиям и потом, например разработчик клиентской части, не подозревая, может выводить пользователю не те данные, которые нужны.

Не нужно так делать

Select * from table

Лучше так

Select col, col2, col3 from table

Если Вы вообще новичок в SQL то можете прочитать статью по основам выборки Язык запросов SQL - оператор Select

2. Не делайте сложные, большие, многоуровневые запросы. Запутаетесь, трудно переделывать, влияет на скорость работы. Если запрос используется часто, то вынесите наиболее сложную часть в функцию или процедуру, и вообще не стесняйтесь писать свои функции для любых нужд, конечно, если предполагается, что эти функции будут активно использоваться во всевозможных запросах, а в запросе в нужном месте вызывайте ее. Это намного упрощает написание запросов, в дальнейшем не придется изучать заново логику запроса, например, если Вам необходимо что-то в нем переделать, в некоторых случаях увеличится скорость работы запроса.

Если Вы не знаете, как писать собственные функции можете ознакомиться со статьей, которая посвящена именно этому Как написать функцию на PL/pgSQL

3. Не используйте в условии функции, которые будут вычислять какое-то значение на основе какого-то поля в текущей таблице, так как это будет сделано для каждой строки, и соответственно увеличится нагрузка и как следствие уменьшится скорость работы. Также это относится и к подзапросам. Хотя во многих случаях без этого не обойтись, но помните, если есть возможность подумать и не использовать это то лучше подумайте и реализуйте эту задачу по-другому. Все это можно отнести, например и к секции select, но здесь такое требуется довольно часто.

4. При добавлении данных в таблицу также как и в select перечисляйте поля базы данных, например:

Не нужно так делать

Insert into table values (col1, col2, col3……)

Лучше так

Insert into table (col1, col2, col3……) values (col1, col2, col3……)

Так как поля в таблице могут добавляться и поэтому могут возникнуть некоторые трудности, даже если Вы позаботились о значение по умолчанию для новой колонки.

5. Данный совет вытекает из предыдущего. Старайтесь при создании таблицы задавать значения по умолчанию, чтобы избавиться от NULL, так как если Вы этого не будете делать, то могут возникать такие значения как null, а следует помнить что null это не значение, а это состояния ячейки, т.е. отсутствие значения. Чем так плохо это значение, а тем, что при написании запросов Вам придется помнить, что у Вас могут встречаться такие значения и соответственно принимать это во внимание, так как если вы забудете или попросту не знаете что в какой-то таблице есть значения null, то в дальнейшем Вы можете выводить неправильные данные, а это не есть хорошо.

6. При сортировке (order by) лучше использовать поименованные столбцы, а не по их номеру, так как могут возникнуть проблемы. Например, вы использовали сортировку по их номеру и отдали запрос разработчику приложения, затем через некоторое время возникла необходимость изменить данный запрос путем добавления или удаления некоторых полей, а про сортировку забыли и снова отдали запрос разработчику. И теперь  при выводе данных будет использоваться неправильная сортировка, а со стороны пользователя вообще может возникнуть мнение, что выводятся не правильные данные, он об этом скажет Вам, а Вы будете не понимать ведь все же работало, что же не так. А все, потому что никакой ошибки не возникнет, чтобы ее можно было отследить, а все банально и просто, Вы использовали сортировку по номеру столбца.

Не нужно так делать

Select col, col2, col3 From table Order by 2, 1

А лучше так

Select col, col2, col3 From table Order by col2, col

7. Если Вы пишите какой-то разовый запрос и в дальнейшем он может и никогда не будет использоваться, все равно сохраните этот запрос в любом виде, обычно в файлах .sql , так как по опыту он может пригодится и для других задач или помочь их решить намного быстрей, а если вы не сохраните то Вам придется продумывать всю логику, алгоритм заново что конечно же влияет на скорость выполнения задания.

8. Не создавайте на право и на лево курсоры. Так как курсор это достаточно ресурсоемкая операция для сервера, поэтому если есть возможность обойтись без него, то лучше его не использовать. Хотя есть такие задачи, когда курсор это единственное возможное решение, поэтому он тоже в некоторых случаях очень  полезен.

А если Вы даже не знаете, как создавать курсоры то в этом Вам поможет следующая статья Как использовать курсор в функциях на PL/pgSQL

9. Совет на собственную проверку. Иногда когда требуется что-то массово обновить (update) всегда тестируйте запрос на тестовой базе, иначе например одно не верное условие может быть практически необратимо. Поэтому всегда под рукой должна быть тестовая база.

10. При создании таблицы поля называйте так чтобы было понятно, это относится не только к sql но и к программированию в целом (например, название переменных).

Надеюсь, эти советы Вам помогут правильно составлять свои запросы и не натыкаться на те же грабли как многие другие начинающие программисты.

Похожие статьи:

info-comp.ru

SQL SELECT - Примеры запросов SELECT в СУБД MySQL, Oracle, Access

Не многие владеют в совершенстве языками, а если говорит о языках программирования, то большая часть знает о них только то, что изучали в школе. Однако в полной мере об используемых языках, для управления компьютерными программами, можно почерпнуть только при глубоком изучении материала, в высших учебных заведениях и путем самостоятельного обучения.

Огромное количество программ позволяют выбирать данные для финансовых и других отчетов в считанные минуты. Одна из самых простых и к тому же удобных — SQL SELECT. При знакомстве с ней любой программист сможет без проблем рассказать о том, что SQL – это язык программирования, помогающий структурировать все необходимые запросы, а SELECT – это команда, используемая в комбинации с SQL. Безусловно, в сочетании SQL SELECT позволяют проводить все необходимые действия, изложенные на примерах данной страницы. В связи, с чем нижеизложенный материал более подробно и наглядно характеризует возможности SQL SELECT. Поэтому, установив программу, используемую SQL SELECT, вы сэкономите время своих сотрудников, а также деньги предприятия.

С помощью запроса SQL SELECT можно выполнять выборку данных из таблицы. Следующие примеры запросов SQL SELECT используются в таких SQL СУБД как MySQL, Oracle, Access и других.

SQL Select

 

Для выполнения следующих SQL запросов SELECT нам необходимо прежде всего изучить структуру таблиц.

Имя таблицы Имя поля Тип поля Примечание
FAKULTET KOD_F Integer PRIMARY KEY
NAZV_F Char, 30
SPEC KOD_S Integer PRIMARY KEY
KOD_F Integer
NAZV_S Char, 50
STUDENT KOD_STUD Integer PRIMARY KEY
KOD_S Integer
FAM Char, 30
IM Char, 15
OT Char, 15
STIP Decimal, 3
BALL Decimal, 3

Примеры запросов SELECT на языке SQL:

SQL Пример SELECT №1Выбрать студентов, получающих стипендию, равную 150.

SELECT fname FROM STUDENT WHERE STIP=150;

С помощью данного SQL запроса SELECT выбираются все значения из таблицы STUDENT, поле STIP которых строго равно 150.

SQL Пример SELECT №2Выбрать студентов, имеющих балл от 82 до 90. Студенты должны быть отсортированы в порядке убывания балла.

SELECT FAM FROM STUDENT WHERE BALL BETWEEN 81 AND 91 ORDER BY BALL DESC;

Как видно из SQL примера, чтобы выбрать студентов, которые имеют балл от 82 до 90, мы используем условие BETWEEN. Чтобы отсортировать в убывающем порядке DESC.

SQL Пример SELECT №3Выбрать студентов, фамилии которых начинаются с буквы «А».

SELECT FAM FROM STUDENT WHERE FAM LIKE ‘А%’;

Для того, чтобы выбрать фамилии, начинающиеся с буквы «А», мы используем оператор SQL LIKE для поиска значений по образцу.

SQL SELECT Пример №4Подсчитать средний балл на каждом факультете.

SELECT NAZV_F As Название, ROUND(AVG(BALL), 2) As СредБалл FROM FAKULTET, SPEC, STUDENT WHERE STUDENT.KOD_S=SPEC.KOD_S AND SPEC.KOD_F=FAKULTET.KOD_F GROUP BY NAZV_F;

Пример запроса SQL SELECT показывает нам использование функции SQL AVG для вычисления среднего значения, ROUND для округления значения, раздела GROUP BY для группировки столбцов.

SQL SELECT. Пример №5.Подсчитать количество студентов, обучающихся на каждом факультете. Вывести в запросе название факультета, комментарий – «обучается», количество студентов, комментарий «человек».

SELECT NAZV_F||’ обучается ‘||COUNT(STUDENT.BALL)||’ человек’ As CountStudOnFakultet FROM FAKULTET

sql-language.ru