Язык SQL
Существует множество разнообразных систем управления базами данных: Microsoft Access, Oracle, DB2, Microsoft SQL Server, Informix, mySQL, и это далеко не полный список. А нам необходимо обратиться к базе данных из программы на языке C# и «объяснить» ей, что мы ищем.
Проще всего включить в код C# фрагмент на «языке базы данных», с помощью которого выполняется запрос к базе данных на получение нужных столбцов и строк.
(По правде говоря, существует еще и промежуточный уровень – ADO.NET, но сейчас мы не станем заострять на нем внимание.)
Много лет назад специалисты по базам данных договорились об использовании «единого языка баз данных», который понимали бы большинство существующих баз данных. Они назвали его SQL (от англ. Structured Query Language — язык структурированных запросов). Не следует путать язык SQL с системой управления базами данных SQL Server, разработанной корпорацией Microsoft. Язык SQL поддерживают системы управления базами данных (СУБД), выпускаемые самыми разными производителями.
Приступая к разговору о том, как использовать C# при работе с базами данных, сначала познакомимся с основами языка SQL. Ниже приведены примеры операторов на языке SQL и описывается результат их выполнения.
Основными командами SQL являются:
- SELECT (для выбора некоторых данных);
- INSERT (для добавления новых данных);
- UPDATE (для изменения информации, уже существующей в базе данных). Приведем примеры каждой команды.
Как правило, оператор SELECT записывается следующим образом:
SELECT <имена извлекаемых столбцов>
FROM <имена одной или нескольких таблиц базы данных> WHERE <условие выбора>
Рассмотрим пример выбора данных оператором SELECT:
SELECT * FROM PLANET
Символ звездочка * означает выбор всех столбцов таблицы. Поэтому данный оператор вернет из базы данных всю таблицу Planet со всеми строками и столбцами. Рассмотрим оператор
SELECT PlanetName, Inhabitants FROM PLANET
Этот запрос возвращает столбцы PlanetName и Inhabitants со всеми строками из таблицы PLANET.
PlanetName | Inhabitants |
Меркурий | Меркуриане |
Венера | Венериане |
Земля | Земляне |
Марс | Марсиане |
Юпитер | Юпитериане |
Знок | Знокиане |
Сатурн | Сатурниане |
Уран | Ураниане |
Нептун | Нептуниане |
Плутон | Плутониане |
Запрос
SELECT PlanetName, InhabitantsFROM PLANET WHERE PlanetName=’Venus’
возвращает столбцы PlanetName и Inhabitants из таблицы PLANET. В результат его выполнения будут включены только те строки, которые содержат значение Venus в столбце PlanetName.
PlanetName | Inhabitants |
Венера | Венериане |
Запрос:
SELECT PlanetName, Population FROM POPULATION WHERE Population<100000
возвращает из таблицы POPULATION строки столбцов PlanetName и Population, для которых значение столбца Population меньше 100000.
PlanetName | Population |
Меркурий | 40000 |
Венера | 25 |
Нептун | <NULL> |
Плутон | <NULL> |
Меркурий | 35000 |
Венера | 3 |
Знок | 8700 |
Нептун | <NULL> |
Плутон | <NULL> |
Как правило, оператор INSERT записывается следующим образом:
INSERT INTO <таблица базы данных, к которой добавляются строки>
(<названия столбцов, в которые будут добавляться значения>)
VALUES (<значения, которые будут вставлены в указанные столбцы>)
Пример:
INSERT INTO PLANET (PlanetName, DistanceFromSun, Inhabitants)
VALUES (Флафф, 23500000, ‘Флаффиане’)
Оператор INSERT добавляет в таблицу PLANET новую строку. Он не возвращает какого-либо результата в программу, но после его выполнения таблица примет вот такой вид:
PlanetName | DistanceFromSun | Inhabitants |
Меркурий | 57909 | Меркуриане |
Венера | 108200 | Венериане |
Земля | 149600 | Земляне |
Марс | 227940 | Марсиане |
Юпитер | 778400 | Юпитериане |
Знок | 7208100 | Знокиане |
Сатурн | 1423600 | Сатурниане |
Уран | 2867000 | Ураниане |
Нептун | 4488400 | Нептуниане |
Плутон | 5909600 | Плутониане |
Флафф | 23500000 | Флаффиане |
Оператор UPDATE записывается следующим образом:
UPDATE <таблица базы данных, в которую вносятся изменения>
SET <названия столбцов, в которые необходимо внести изменения> = <новые значения> WHERE <условия>
Пример:
UPDATE PLANET SET PlanetName= ‘Стафф’, Inhabitants=’Стаффиане’ WHERE PlanetName=’Флафф’
Оператор изменяет некоторые значения в той строке, где столбец PlanetName имеет значение «Флафф». Результат выполнения операции программе не возвращается, но таблица приметвот такой вид:
PlanetName | DistanceFromSun | Inhabitants |
Меркурий | 57909 | Меркуриане |
Венера | 108200 | Венериане |
Земля | 149600 | Земляне |
Марс | 227940 | Марсиане |
Юпитер | 778400 | Юпитериане |
Знок | 7208100 | Знокиане |
Сатурн | 1423600 | Сатурниане |
Уран | 2867000 | Ураниане |
Нептун | 4488400 | Нептуниане |
Плутон | 5909600 | Плутониане |
Стафф | 23500000 | Стаффиане |
Связи и объединение таблиц базы данных
Если рассмотреть таблицы внимательно, то можно заметить, что между таблицами PLANET и POPULATION существует связь: и в той и в другой есть столбец с именем PlanetName, который связывает обе таблицы. Благодаря этой связи можно собрать всю информацию об определенной планете.
Например, можно выбрать из обеих таблиц все строки, касающиеся Венеры:
| PLANET | PlanetName | DistanceFromSun | Inhabitants | Венера | 108200 | Венериане |
| POPULATION | PlanetName | Year | Population | Венера | 2008 | 25 | Венера | 2009 | 3 | |||||||||||||||||||||||||
PLANET | |||||||||||||||||||||||||||||||||||||||||||
PlanetName | DistanceFromSun | Inhabitants | |||||||||||||||||||||||||||||||||||||||||
Венера | 108200 | Венериане | |||||||||||||||||||||||||||||||||||||||||
POPULATION | |||||||||||||||||||||||||||||||||||||||||||
PlanetName | Year | Population | |||||||||||||||||||||||||||||||||||||||||
Венера | 2008 | 25 | |||||||||||||||||||||||||||||||||||||||||
Венера | 2009 | 3 |
А затем объединить полученные данные в одну большую таблицу:
SELECT *
FROM PLANET INNER JOIN POPULATION ON PLANET.PlanetName=POPULATION.planetName WHERE PlanetName=’Венера’
PLANETS_AND_POPULATION | ||||
PlanetName | DistanceFromSun | Inhabitants | Year | Population |
Венера | 108200 | Венериане | 2008 | 25 |
Венера | 108200 | Венериане | 2009 | 3 |