Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Извлечение данных из таблиц



SELECT – получает данные из базы данных.

SELECT – запрос, возвращающий все столбцы и строки из таблицы (например, таблицы по имени characters):

SELECT * FROM " characters"

Символ звездочка (*) означает, что требуются данные из всех столбцов. Так БД SQL обычно состоят из более чем одной таблицы, поэтому указывают ключевое слово FROM, за которым пробел должно следовать название таблицы.

Когда данные получают из некоторых столбцов в таблице, вместо звездочки (*) через запятую записывают имена нужных столбцов.

SELECT id, name FROM month

Во многих случаях полученные результаты необходимо отсортировать в определенном порядке. В SQL ORDER BY выполняет эту функцию. Он может принимать опциональный модификатор – ASC (по-умолчанию) сортирующий по возрастанию или DESC, сортирующий по убыванию:

SELECT id, name FROM month ORDER BY name DESC

ORDER BY должен быть последней в инструкции SELECT. В противном случае будет выдано сообщение об ошибке.

Фильтрация данных

Если нам нужно получить еще и определенные строки? На помощь здесь приходит условие, то используется WHERE, позволяющее фильтровать данные в зависимости от условия.

При выбыре только те месяцы из таблицы month, в которых больше 30 дней с помощью оператора больше (>).

SELECT id, name FROM month WHERE days > 30

Операторы в условии WHERE

ОПЕРАТОР                       ПРОВЕРКА

=                                          Равенство

<>                                        Неравенство

!=                                         Неравенство

<                                          Меньше

<=                                        Меньше или равно

!<                                         Не меньше, Больше

>=                                        Больше или равно

!>                                         Не больше

BETWEEN                          Вхождение в диапазон

IS NULL                              Проверка на пустое значение

Расширенная фильтрация данных. AND и OR

Сложная фильтрация данных может использовать операторы AND и OR и операторов сравнения (=,<,>,<=,>=,<>).

Пусть таблица, содержит четыре самых продаваемых альбома. Нужно выбрать альбомы, классифицирующиеся как рок и проданы менее 50 миллионов копий.

SELECT * FROM albums WHERE genre='рок' AND sales_in_millions<=50 ORDER BY released

In/Between/Like

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

· IN – служит для указания диапазона условий, любое из которых может быть выполнено

· BETWEEN – проверяет, находится ли значение в указанном диапазоне

· LIKE – ищет по определенным паттернам

Например, если нужно выбрать альбомы с поп и соул музыкой, мы можем использовать IN("value1","value2").

SELECT * FROM albums WHERE genre IN ('pop','soul');

Если нужны альбомы, изданные между 1975 и 1985годами,то :

SELECT * FROM albums WHERE released BETWEEN 1975 AND 1985;

Функции

SQL использует много функций:

· COUNT() – возвращает количество строк

· SUM() – возвращает общую сумму числового столбца

· AVG() – возвращает среднее значение из множества значений

· MIN() / MAX() – получает минимальное / максимальное значение из столбца

Чтобы получить самый последний год в таблице нужно записать запрос:

SELECT MAX(released) FROM albums;

Подзапросы

Если нужно использовать результат от расчетов, не обойтись без вложенных запросов. Допустим нужно вывести artist, album и release year для старейшего альбома в таблице.

Получить эти конкретные столбцы:

SELECT artist, album, released FROM albums;

Получить самый ранний год:

SELECT MIN(released) FROM album;

Нужно объединить два запроса с помощью WHERE:

SELECT artist,album,released FROM albums

WHERE released = ( SELECT MIN(released) FROM albums);

Объединение таблиц

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

 Таблица video_games

 Таблица game_developers

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

Если нужно создать запрос, возвращающий все, что нужно знать об играх, можно использовать INNER JOIN для связи колонок из обеих таблиц.

SELECT video_games.name,

  video_games.genre,

  game_developers.name,

  game_developers.country

FROM video_games

INNER JOIN game_developers

ON video_games.developer_id = game_developers.id;

Это самый простой и наиболее распространенный тип JOIN. Есть несколько других вариантов.

Алиасы

В примере две колонки называемые name. Можно установить псевдоним одного из повторяющихся столбцов, например, name из таблицы game_developers будет называться developer.

Можно сократить запрос задав псевдонимы имен таблиц: video_games назовем games, game_developers – devs :

SELECT games.name,

  games.genre,

  devs.name AS developer,

  devs.country

FROM video_games AS games

INNER JOIN game_developers AS devs

ON games.developer_id = devs.id;

Обновление данных

В SQL с помощью инструкции UPDATE изменяются данные в некоторых строках. Инструкция UPDATE состоит из:

· Таблицы, в которой находится значение для замены;

· Имен столбцов и их новых значений;

· Выбранные с помощью WHERE строки, которые обновятся. Если этого не сделать, то изменятся все строки в таблице.

Ниже приведена таблица tv_seriesс сериалами с их рейтингом. В таблицу закралась маленькая ошибка: хотя сериал Игра престолов и описывается как комедия, он на самом деле ей не является. Исправление

 Данные таблицы tv_series

UPDATE tv_series SET genre = 'драма' WHERE id = 2;

Удаление данных

Удаление строки таблицы с помощью SQL происходит выбирая таблицу и строку, которую нужно удалить. Удаление из предыдущего примера последней строки в таблице tv_series делается с помощью инструкции DELETE

DELETE FROM tv_series WHERE id = 4

Будьте осторожными при написании инструкции DELETE и убедитесь, что условие WHERE присутствует, иначе все строки таблицы будут удалены!

Удаление таблицы

Удаление всех строк с сохранением таблицы выполняет команда TRUNCATE:

TRUNCATE TABLE table_name;

Удаление всей таблицы – DROP:

DROP TABLE table_ name;



Ошибки и исключения

Существуют два типа ошибок: синтаксические и семантические.

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

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

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

Так для вычисления обратного значения Х можно написать следующий фрагмент программы

X=int(input())

print(1/X)

При вводе значения 2 программа выдаст следующие значения

При вводе 0 программа выдаст следующий фрагмент

Для работы с исключительными ситуациями используется конструкция

try :

# фрагмент программы

except : # except имя ошибки : - здесь определяется тип ошибки и реакция

# фрагмент программы, работающий в случае прерывания

else : #

# фрагмент программы, работающий в случае отсутствия прерываний

finally :

# фрагмент программы, работающий в любом

Пример решения задачи с обработкой прерывания

try :

   X=int(input())

print(1/X)

except :

print(“Error dividing by zero”)

На экране появится следующее изображение

Инструкция raise позволяет программисту принудительно сгенерировать исключение, которое может использоваться при отладке программы.

 



Классы

Python ограничен в множественном наследовании в классах. Внутренние переменные и внутренние методы классов начинаются с двух знаков нижнего подчеркивания «__» (например «__myprivatevar»). Можно присвоить значение переменной класса извне. Пример:

 

class Myclass:

common = 10

def __init__(self):

   self. myvariable = 3

def myfunction (self, arg1, arg2):

   return self. myvariable

# Здесь объявили класс Myclass.

# Функция __init__ вызывается автоматически при инициализации классов.

classinstance = Myclass ()

# Инициализирован класс и переменная myvariable принимает значение 3 как заявлено в методе инициализации

classinstance. myfunction(1, 2)

#Метод myfunction класса Myclass возвращает значение переменной myvariable

3

# Переменная common объявлена во всех классах

classinstance2 = Myclass ()

classinstance.common # 10

classinstance2.common # 10

# Поэтому, если изменить ее значение в классе Myclass изменятся

# и ее значения в объектах, инициализированных классом Myclass

Myclass.common = 30

classinstance.common # 30

classinstance2.common # 30

# А здесь не изменяется переменная класса. Вместо этого объявляется

# в объекте и присваивается ей новое значение

classinstance.common = 10

classinstance.common # 10

classinstance2.common # 30

Myclass. common = 50

# Теперь изменение переменной класса не коснется переменных объектов

# этого класса

classinstance.common # 10

classinstance2.common # 50

# Следующий класс является наследником класса Myclass, наследуя его

# свойства и методы, к тому же класс может наследоваться из нескольких

# классов, в этом случае запись такая: class Otherclass( Myclass1, Myclass2,

# MyclassN)

class Otherclass (Myclass):

def __init__(self, arg1):

   self.myvariable = 3

   print arg1

classinstance = Otherclass("hello")

hello

classinstance. myfunction(1, 2) # 3

# Этот класс не имеет совйтсва test, но мы можем

# объявить такую переменную для объекта. Причем

# эта переменная будет членом только classinstance.

classinstance.test = 10 # classinstance.test – 10

 

Исключения в Python имеют структуру try-except [exceptionname]:

def somefunction():

try:

   10 / 0 # Деление на ноль вызывает ошибку

Except ZeroDivisionError:

  # Но программа не "Выполняет недопустимую операцию"

  # А обрабатывает блок соответствующий ошибке «ZeroDivisionError»

  Print "Oops, invalid."

fnexcept ()

Oops, invalid.



ПОДГОТОВКА К ОЛИМПИАДАМ ПО ИНФОРМАТИКЕ


Поделиться:



Последнее изменение этой страницы: 2019-03-21; Просмотров: 268; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.051 с.)
Главная | Случайная страница | Обратная связь