Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
РУБД - Теория по SQL .doc
Скачиваний:
4
Добавлен:
27.08.2019
Размер:
691.71 Кб
Скачать

Примеры:

INSERT INTO people ( name, rank, serial_number ) VALUES ( 'Bob Smith', 'Captain', 12345 );

INSERT INTO addresses (name, address, city, state, phone, age)

VALUES( 'Irving Forbush', ' 123 Mockingbird Lane', 'Corbin', 'KY', '(800) 555-1234', 26)

INSERT INTO foods VALUES (NULL, 'Oranges', 133, 0, 2, 39),(HULL, 'Bananas', 122, 0, 4, 29), (NULL, 'Liver', 232, 3, 15, 10)

# Ввести данные в каталог Stacie's Directory, который находится в c:\Personal\Stacie, управляющий символ - по умолчанию '\' — позволяет вводить в литералы одиночные кавычки и сам символ '\':

INSERT INTO files (description, location)

VALUES ('Stacie\'s Directory', 'C: \\Personal\\Stacie')

# Скопировать все записи, которые старше определенной даты, из таблицы 'data' в таблицу 'old_data'. Обычно за этим следует удаление старых записей из 'data'.

INSERT INTO foods (name, fat) SELECT food_name, fat_grams FROM recipes

INSERT INTO old_data (id, date, field ) SELECT ( id, date, field) FROM data WHERE date < 87459300;

UPDATE persondata SET age=age*2, age=age+1;

UPDATE Widget_Table SET widgets_on_hand=widgets_on_hand - 300 WHERE widget_id=3;

UPDATE people SET name='John Doe' WHERE name='John Deo'

#Можно выполнять UPDATE, охватывающий множество таблиц:

UPDATE items,month SET items.price=month.price WHERE items.id=month.id;

#Пример использования поля типа AUTO_NCREMENT :

CREATE TABLE cities (id INT NOT NULL PRIMARY KEY AUTO_INCREMENT

name VARCHAR(100),pop MEDIUMINT,founded DATE)

INSERT INTO cities (id, name, pop) VALUES (NULL, 'Houston', 3000000)

#Другим способом реализации последовательностей является использование значения, возвращаемого функцией LAST_INSERT_ID :

UPDATE table SET id=LAST_INSERT_ID (id+1);

# Загрузить данные из файла 'mydata.txt' в таблицу 'mydata'. Считается, что поля отделены табуляцией и не заключены в кавычки.

LOAD DATA INFILE 'mydata.txf INTO TABLE mydata

LOAD DATA INFILE 'newdata.txt' INTO TABLE newtable FIELDS TERMINATED BY( field"!, -field2 )

DROP TABLE oh_no, help_me, dont_do_it # Удалить таблицы 'oh_no', 'help_me' и 'dont_do_it'

REPLACE INTO people ( name, rank, senal_number ) VALUES ( 'Bob Smith', 'Captain', 12345 )

# Скопировать все записи, которые старше определенной даты, из таблицы 'data' в таблицу 'old_data'.

REPLACE INTO old_data ( id, date, field ) SELECT ( id, date, field) FROM data WHERE date < 87459300

# Удалить все данные из таблицы 'olddata 1 (но не саму таблицу).

DELETE FROM olddata

# Удалить все записи из таблицы 'sales', где поле 'year' равно '1995'.

DELETE FROM sales WHERE year=1995

Тема: Работа в пакетном режиме.

Использование mysql в пакетном режиме

Запускать mysql можно и в пакетном режиме. Для этого нужно собрать все команды в один файл и передать его на исполнение mysql:

mysql < batch-file

При работаете с mysql в ОС Windows, можно воспользоваться следующей командой:

> mysql source batch-file

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

> mysql -h host -u user -p < batch-file

Enter password: ********

Работая с mysql таким образом, в сущности, создается сценарий и затем он исполняется.

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

shell> mysql < batch-file > mysql.out

Если нужно продолжать обработку сценария даже при обнаружении в нем ошибок, надо использовать параметр командной строки --force.

По умолчанию при работе с mysql в пакетном режиме используется более сжатый формат вывода результатов, чем при интерактивной работе.

Если нужно, чтобы в пакетном режиме программа выводила данные так же, как и в интерактивном, надо использовать ключ mysql -t. Включить "эхо" исполняемых команд можно с помощью ключа mysql -vvv.

В командную строку mysql можно включать и сценарии - при помощи команды source:

mysql> source filename;

Зачем нужны сценарии? Причин тому несколько:

  • при необходимости частого (ежедневного или хотя бы еженедельного) запуска одного и того же запроса сценарий позволяет избавиться от многократного набора этого запроса;

  • можно создавать новые запросы, подобные уже существующим, просто копируя и затем изменяя файлы сценариев;

  • пакетный режим может пригодиться и при разработке особенно длинных запросов, а именно - многострочных команд или больших последовательностей команд;

Тема: Создание запросов.

Формирование запросов средствами языка SQL:

SELECT [STRAIGHT_JOIN] [DISTINCT | ALL] <список выражений>

[INTO {OUTFILE | DUMPFILE} 'file_name' delimiters ]

[FROM table_references

[WHERE where_definition]

[GROUP BY column,...]

[ORDER BY column{unsigned_integer | col_name | formula} [ASC | DESC], ...]

[HAVING full_where_definition]

[FOR UPDATE | LOCK IN SHARE MODE]]

[LIMIT [ start, ] rows ]

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

Оператор SELECT позволяет формировать запрос к базе данных. В результате выполнения этого оператора СУБД формирует результирующий набор. Если этот оператор был введен в интерактивном режиме взаимодействия с базой данных, то результат отображается в виде таблицы в текущем диалоговом окне. Если оператор SELECT выполняется из приложения на другом языке программирования, то формируется результирующий набор, размещаемый в памяти приложения или сервера БД, а затем приложение извлекает данные из результирующего набора в свои переменные.

Для выполнения запроса требуется привилегия SELECT на все таблицы, участвующие в запросе.

<список выражений> это одна из следующих конструкций:

[таблица.]столбец | (выражение) | константа | переменная| SQL_функция | системная_переменная

Синтаксис выражений имеет вид

( {[ [+] | - ] {значение | функция_СУБД} [ + | - | * | ** ]}... )

а синтаксис SQL_функций – одна из следующих конструкций:

{SUM|AVG|MIN|MAX|COUNT} ( [[ALL]|DISTINCT][таблица.]столбец )

{SUM|AVG|MIN|MAX|COUNT} ( [ALL] выражение )

COUNT(*)