
- •Часть 2:
- •Часть 2:
- •Часть 2:
- •Часть2:
- •Часть 2:
- •Часть 2: ( таблицы)
- •Часть 2: (таблица)
- •Часть 2: (таблицы)
- •Часть 2:
- •Часть2:
- •Часть 2:
- •Часть2:
- •Часть 2:
- •Часть 2:
- •Часть 2:
- •Часть2: (надо создать две таблицы с помощью creat table, а затем оформить запрос)
- •19) Установка MySql под Windows
- •Часть 2:
Часть 2:
CREAT DATEBASE `shop`;
CREATE TABLE `user`(
id mediumint unsigned auto_increment,
email VARCHAR(50) NOT NULL,
f_name VARCHAR(20) NOT NULL,
l_name VARCHAR(30) NOT NULL
PRIMARY_KEY (id));
CREAT TABLE `prise_list`(
id mediumint unsigned auto_increment,
name VARCHAR(20) NOT NULL,
price float DEFAULT (0.0),
on_stock enum (‘Y’,’N’) DEFAULT
PRIMARY_KEY (id));
CREAT TABLE `cart`(
id mediumint unsigned auto_incremrnt,
u_id mediumint unsigned,
p_id mediumint unsigned,
cart_id CHAR(4) NOT NULL,
PRIMARY_KEY (id));
17) Лучше учить то что в тетради!!! Но если у кого-то нет то хотя бы это выучите:
Конструкция JOIN (в сочетании с другими MySQL конструкциями, например, GROUP BY) часто встречается при программировании под базы данных, и применяется в SELECTвыражениях. С помощью инструкции JOIN можно объединить колонки из нескольких таблиц в одну. При этом целостность таблиц не нарушается. Существует три типа JOIN-выражений:
INNER JOIN
OUTER JOIN
CROSS JOIN
В свою очередь, OUTER JOIN может быть LIFT и RIGHT (слово OUTER часто опускается).
В качестве примера создадим две простые таблицы и сконструируем для них SQL-выражения с использованием JOIN. В первой таблице пусть хранится ID пользователя и его логин (nick), а во второй – IDресурса, название ресурса и ID пользователя, который имеет право на администрирование данного ресурса.
Вот как выглядит конструкция join в общем виде:
... join_type JOIN table_name ON condition …
Где join_type – это тип JOIN-выражения, table_name – имя таблицы, которая присоединяется к результату, condition – условие по которому таблицы объеденяются.
Конструкция JOIN располагается сразу после SELECT-выражения. Возможно использование нескольких таких конструкций подряд, для объединения соответствующего количества таблиц. Чаще всего JOIN используется в случае, когда таблица имеет внешний ключ (foreign key).
INNER JOIN применяется для получения только тех строк, для которых существует соответствие записей в главной и присоединяемой таблице. Иначе говоря, условие condition должно выполняться всегда. Пример:
SELECT t_resources.t_name, t_users.t_nick
FROM t_resources
INNER JOIN t_users ON t_users.t_id = t_resources.t_userid
Результат данного запроса будет вот таким:
T_NAME T_NICK
res2 user1
res1 user3
res5 user3
В случае с LEFT JOIN из главной таблицы будут выбраны все записи, даже если в присоединяемой таблице нет совпадений, то есть условие condition не будет учитывать присоединяемую (правую) таблицу.
Пример:
SELECT t_resources.t_name, t_users.t_nick
FROM t_resources
LEFT JOIN t_users ON t_users.t_id = t_resources.t_userid
Результат выполнения запроса:
T_NAME T_NICK
res1 user3
res2 user1
res3 (null)
res5 user3
Как видно, результат показывает все ресурсы и их администраторов, и не зависит от того есть таковые (администраторы) или нет.
RIGHT JOIN выводит все строки удовлетворяющие правой части условия condition, даже если они не имеют соответствия в главной (левой) таблице:
SELECT t_resources.t_name, t_users.t_nick
FROM t_resources
RIGHT JOIN t_users ON t_users.t_id = t_resources.t_userid
Результат данного запроса будет вот таким:
T_NAME T_NICK
res2 user1
res1 user3
res5 user3
(null) user4
Таблица показывает ресурсы и их администраторов. Даже если у адмнистратора нет ресурса то, эта запись тоже будет отображена. Такое вполне даже может быть в случае, например, если ресурс был удален.
Тип CROSS JOIN применяется если необходимо получить все возможные сочетания из обеих таблиц. Обратите внимание, что contition для этого типа оператора JOIN не указывается. Вот пример запроса CROSS JOIN:
SELECT t_resources.t_name, t_users.t_nick
FROM t_resources CROSS JOIN t_users
user1 res1
user1 res2
user1 res3
user1 res5
user2 res1
user2 res2
user2 res3
user2 res5
user3 res1
user3 res2
user3 res3
user3 res5
Этот вид объединения сдедует использовать с большой осторожностью, поскольку он снижает производительность и часто ( что кстати видно из примера содержит избыточную информацию.
А что делать если нужно получить все имеющиеся соответствия одной таблицы другой? Вообще-то стандартом SQL для этого предусмотрен специальный оператор: FULL OUTER JOIN (ключевое слово OUTER можно опустить). Но к сожалению MySQL не поддерживает данную функционалность, поэтому в подобных ситуациях следует использовать объединение двух запросов оператором UNION. Вот пример:
SELECT t_resources.t_name, t_users.t_nick
FROM t_resources
LEFT JOIN t_users ON t_users.t_id = t_resources.t_userid
UNION
SELECT t_resources.t_name, t_users.t_nick
FROM t_resources
RIGHT JOIN t_users ON t_users.t_id = t_resources.t_userid
результат выполнения запроса:
T_NAME T_NICK
res1 user3
res2 user1
res3 (null)
res5 user3
(null) user4