Блог

2012.09.14 alcohol120ds, sql, mssql

Составление SQL запросов

И так, зарание предупреждаю. Это мой первый гайд. SQL запросы это на самом деле очень трудная наука и то что тут описано это ОЧЕНЬ малая часть того что можно написать в этих запросах.


1 Часть. SELECT

Данный запрос для получения данных из таблицы.

Начнём с самого простого запроса. Его можно понять логически.

SELECT 'Hello RF Online' as Hello

При отправке этого запроса мы получаем это.

picture

Теперь давайте разберём что этот запрос нам выдал и какая часть запроса это спровацировала. Во первых обратим внимание на слово SELECT, оно значит на языке SQL “Показать”(так же как и переводится) Следующая часть это ‘Hello RF Online’ это значит что показать, как вы видите результат, он показал без ”.

И последняя часть запроса это as Hello это означает как назвать раздел в котором указано ‘Hello RF Online’.

Чуток усложним запрос.

SELECT convert(varchar, uilock_pw) FROM [RF_User].[dbo].[tbl_UserAccount] WHERE id=convert(binary, 'логин')

Получаем (пример)

Опять же разбераем.

SELECT вы уже знаете.

Вторая часть запроса convert(varchar, uilock_pw), она показывает что надо взять из столбца uilock_pw раскриптовать это значение и показать. В данном случае оно показало rostow61.

Третья часть FROM [RF_User].[dbo].[tbl_UserAccount]. FROM дает назначение запросу, если его не дать, то запрос не сработает. [RF_User] это база данных. [dbo] - это роль данного запроса. [tbl_UserAccount] - таблица куда направляется запрос.

Четвёртая часть WHERE id=convert(binary, ‘логин’). Это условие, если его не указать то запрос покажет вам всё значения uilock_pw. id=convert(binary, ‘логин’) Как бы, если столбец id не равен логину, то знание uilock_pw вам не покажет, а если равен то естественно покажет.

Еще усложним его.

SELECT [Serial] ,[UserID] ,[Cash] ,[AddCashSum] ,[SpendCashSum] FROM [BILLING].[dbo].[tbl_rfcash] WHERE UserID='логин аккаунта'

Первую часть вы знаете уже.

Вторая часть [Serial],[UserID],[Cash],[AddCashSum],[SpendCashSum]. Она указывает , какие столбцы показать вам.

Третья и четвёртая часть вам уже знакома.

2 Часть. UPDATE

Смысл этой части это обновление и изменение таблицы. Опять же начинаем с простого запроса.

UPDATE RF_World_Novus.dbo.tbl_base SET AccountSerial='сериал аккаунта куда перем.', Account='логин аккаунта куда перем.' WHERE Name='ник кого перемещаем'

Результат.

img

(1 row(s) affected) Это значит что 1 строка обновленна успешно.

Первая часть UPDATE RF_World_Novus.dbo.tbl_base. При запросе мы обнавляем базу данных. RF_World_Novus.dbo.tbl_base это так же как и функция FROM только в данном случае без фигурных скобок.

Вторая часть SET AccountSerial=’сериал аккаунта куда перем.’, Account=’логин аккаунта куда перем.’. Данная часть при обновлении базы, заменяет значения в столбцах AccountSerial и Account.

Третья часть WHERE вам уже известна.

Усложняем запрос.

 use RF_World;
 UPDATE tbl_general set GuildStatus='0' WHERE Serial='ид текущего лидера ги'

Первая часть запроса use RF_World. Мы ей задаём то что будет отправлять запрос в базу RF_World.

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

Всё остальное вам в этом запросе уже известно.

3 Часть. INSERT (самая моя не любимая)

Смысл этой команды это создать строку.

Запрос.

INSERT INTO RF_User.dbo.tbl_rfaccount (id,password,accounttype,birthdate,email) VALUES ((CONVERT(binary, 'ЛОГИН')), (CONVERT(binary, 'ПАРОЛЬ')),'0', '1/01/1950', 'МЫЛО');

Результат такой же как и с UPDATE

Первая часть это INSERT INTO RF_User.dbo.tbl_rfaccount. Тут указывает создание строки в RF_User.dbo.tbl_rfaccount.

Вторая часть это (id,password,accounttype,birthdate,email). Это указываеются какие поля будут заполнятся запросом.

Третья часть это VALUES ((CONVERT(binary, ‘ЛОГИН’)), (CONVERT(binary, ‘ПАРОЛЬ’)),’0’, ‘1/01/1950’, ‘МЫЛО’). Тут уже указывается то чем заполнятся будет, обязательно в том же порядке как и в второй части.

4 Часть. DELETE

Смысл этой команды это удалить.

Запрос.

DELETE FROM tbl_general WHERE Serial=1

Результат такой же как и у UPDATE. Здесь я думаю нету смысла объяснять. Смысл этой команды это удалить.

5 Часть. Функция CONVERT()

Данная функция прячет от ваших любопытных глазок =) При том когда вы записываете запросом данные вы добавляете в базу логин с функцией CONVERT() :

INSERT INTO RF_User.dbo.tbl_rfaccount (id,password,accounttype,birthdate,email) VALUES ((CONVERT(binary, 'ЛОГИН')), (CONVERT(binary, 'ПАРОЛЬ')),'0', '1/01/1950', 'МЫЛО')

Вы используете binary, а если получаете то вы используете varchar. Пример :

use rf_user select convert(varchar,tbl_rfaccount.ID) as Логин, convert(varchar,tbl_rfaccount.password) as Пароль, convert(varchar,uilock_pw) as ФГ_Пароль, convert(varchar,createip) as Создан_ip, convert(varchar, lastconnectip) as ПоследнийВход_ip, convert(varchar, createtime) as Дата_создания, convert(varchar,email) as Email, convert(varchar, serial) as serial from tbl_rfaccount inner join tbl_UserAccount on tbl_rfaccount.id=tbl_useraccount.i

Не забывайте! CONVERT(binary,название столбца)

6 Часть. Запросы 2-го уровня.

К запросам второго уровня относятся запросы содержащие не один запрос, а несколько. Пример такого запроса.

UPDATE tbl_general SET PvpPoint='Кол-во ОС' WHERE Serial=(SELECT serial FROM tbl_base WHERE Name='Ник перса')

В этом запросе сразу 2 запроса, это:

 UPDATE tbl_general SET PvpPoint='Кол-во ОС' WHERE Serial='серийник'

и

 SELECT serial FROM tbl_base WHERE Name='Ник перса'

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

Сделал Mopo3 специально для MMODB.info Строго не судите, это моя первая статья =)