SlideShare a Scribd company logo
СУБД
Лекция 3
Павел Щербинин
INSERT
INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY]
[IGNORE]
[INTO] tbl_name [(col_name,...)]
{VALUES | VALUE} ({expr | DEFAULT},...),(...),...
[ ON DUPLICATE KEY UPDATE
col_name=expr
[, col_name=expr] ... ]
Or:
INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY]
[IGNORE]
[INTO] tbl_name
SET col_name={expr | DEFAULT}, ...
[ ON DUPLICATE KEY UPDATE
col_name=expr
[, col_name=expr] ... ]
INSERT
INSERT [LOW_PRIORITY | HIGH_PRIORITY] [IGNORE]
[INTO] tbl_name [(col_name,...)]
SELECT ...
[ ON DUPLICATE KEY UPDATE
col_name=expr
[, col_name=expr] ... ]
INSERT
INSERT INTO tbl_temp2 (fld_id)
SELECT
tbl_temp1.fld_order_id
FROM
tbl_temp1
WHERE
tbl_temp1.fld_order_id > 100;
INSERT INTO table (a,b,c) VALUES (1,2,3)
ON DUPLICATE KEY UPDATE c=c+1;
INSERT INTO table (a,b,c) VALUES (1,2,3),(4,5,6)
ON DUPLICATE KEY UPDATE c=VALUES(a)+VALUES(b);
UPDATE
UPDATE [LOW_PRIORITY] [IGNORE] table_reference
SET col_name1={expr1|DEFAULT} [,
col_name2={expr2|DEFAULT}] ...
[WHERE where_condition]
[ORDER BY ...]
[LIMIT row_count]
Multiple-table syntax:
UPDATE [LOW_PRIORITY] [IGNORE] table_references
SET col_name1={expr1|DEFAULT} [,
col_name2={expr2|DEFAULT}] ...
[WHERE where_condition]
DELETE
DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name
[WHERE where_condition]
[ORDER BY ...]
[LIMIT row_count]
Multiple-table syntax:
DELETE [LOW_PRIORITY] [QUICK] [IGNORE]
tbl_name[.*] [, tbl_name[.*]] ...
FROM table_references
[WHERE where_condition]
Or:
DELETE [LOW_PRIORITY] [QUICK] [IGNORE]
FROM tbl_name[.*] [, tbl_name[.*]] ...
USING table_references
[WHERE where_condition]
DELETE
DELETE
t1, t2
FROM
t1 INNER JOIN t2
INNER JOIN t3
WHERE
t1.id=t2.id AND t2.id=t3.id;
Or:
DELETE FROM
t1, t2
USING
t1 INNER JOIN t2
INNER JOIN t3
WHERE
t1.id=t2.id AND t2.id=t3.id;
Пользовательские переменные
SET @t1=1, @t2=2, @t3:=4;
SELECT @t1, @t2, @t3, @t4 := @t1+@t2+@t3
SET @var_name = expr [, @var_name = expr] ...
SELECT @t1:=(@t2:=1)+@t3:=4,@t1,@t2,@t3;
1 2 4 7
Пользовательские переменные
SET @t1=1, @t2=2, @t3:=4;
SELECT @t1, @t2, @t3, @t4 := @t1+@t2+@t3
SET @var_name = expr [, @var_name = expr] ...
SELECT @t1:=(@t2:=1)+@t3:=4,@t1,@t2,@t3;
1 2 4 7
5 5 1 4
Пользовательские переменные
SET @t1=1, @t2=2, @t3:=4;
SELECT @t1, @t2, @t3, @t4 := @t1+@t2+@t3
SET @var_name = expr [, @var_name = expr] ...
SELECT @t1:=(@t2:=1)+@t3:=4,@t1,@t2,@t3;
1 2 4 7
5 5 1 4
SET @id := 0;
SELECT @id := @id + 1 AS row_number, your_table.* FROM
your_table;
SELECT @i := @i + 1 AS row_number, your_table.* FROM
your_table, (select @i:=0) AS z;
SUBQUERIES
non_subquery_operand comparison_operator (subquery)
= > < >= <= <> != <=> LIKE
SELECT
col0,
(SELECT col1 FROM table1 WHERE table1.id = table0.id),
(SELECT col2 FROM table1 WHERE table1.id = table0.id)
FROM
table0
SELECT *
FROM t1
WHERE column1 = (SELECT MAX(column2) FROM t2);
SELECT *
FROM t1 AS t
WHERE 2 = (SELECT COUNT(*) FROM t1 WHERE t1.id = t.id);
SUBQUERIES
perand comparison_operator ANY (subquery)
operand IN (subquery) operand
comparison_operator SOME (subquery)
SELECT s1 FROM t1 WHERE s1 > ANY (SELECT s1 FROM t2);
SELECT s1 FROM t1 WHERE s1 = ANY (SELECT s1 FROM t2);
SELECT s1 FROM t1 WHERE s1 IN (SELECT s1 FROM t2);
operand comparison_operator ALL (subquery)
SELECT s1 FROM t1 WHERE s1 > ALL (SELECT s1 FROM t2);
SELECT s1 FROM t1 WHERE s1 <> ALL (SELECT s1 FROM t2);
SELECT s1 FROM t1 WHERE s1 NOT IN (SELECT s1 FROM t2);
ROW SUBQUERIES
SELECT *
FROM t1
WHERE (col1,col2)
= (SELECT col3, col4 FROM t2 WHERE id = 10);
SELECT *
FROM t1
WHERE ROW(col1,col2)
= (SELECT col3, col4 FROM t2 WHERE id = 10);
SELECT column1,column2,column3
FROM t1
WHERE (column1,column2,column3)
IN (SELECT column1,column2,column3 FROM t2)
[NOT] EXISTS
SELECT DISTINCT store_type
FROM stores
WHERE EXISTS (
SELECT *
FROM cities_stores
WHERE cities_stores.store_type = stores.store_type
);
SELECT DISTINCT store_type
FROM stores
WHERE NOT EXISTS (
SELECT *
FROM cities_stores
WHERE cities_stores.store_type = stores.store_type
);
SUBQUERIES in FROM
SELECT AVG(sum_column1)
FROM (
SELECT SUM(column1) AS sum_column1
FROM t1
GROUP BY column1
) AS t1;
SELECT ... FROM (subquery) [AS] name ...
UNION
SELECT ...
UNION [ALL | DISTINCT]
SELECT ...
[UNION [ALL | DISTINCT]
SELECT ...]
person amount
Joe 1000
Alex 2000
Bob 5000
person amount
Joe 2000
Alex 2000
Zach 35000
SELECT * FROM sales2010
UNION
SELECT * FROM sales2011;
person amount
Joe 1000
Alex 2000
Bob 5000
Joe 2000
Zach 35000
person amount
Joe 1000
Joe 2000
Alex 2000
Alex 2000
Bob 5000
Zach 35000
SELECT * FROM sales2010
UNION ALL
SELECT * FROM sales2011;
JOINS
Набор данных
LastName DepartmentID
Rafferty 31
Jones 33
Steinberg 33
Robinson 34
Smith 34
John NULL
DepartmentID DepartmentName
31 Sales
33 Engineering
34 Clerical
35 Marketing
CROSS JOIN
SELECT * FROM employee CROSS JOIN department;
Employee.LastName
Employee.Departme
ntID
Department.Depart
mentName
Department.Depart
mentID
Rafferty 31 Sales 31
Jones 33 Sales 31
Steinberg 33 Sales 31
Smith 34 Sales 31
Robinson 34 Sales 31
John NULL Sales 31
Rafferty 31 Engineering 33
Jones 33 Engineering 33
Steinberg 33 Engineering 33
Smith 34 Engineering 33
Robinson 34 Engineering 33
John NULL Engineering 33
CROSS JOIN
SELECT * FROM employee, department;
Employee.LastName
Employee.Departme
ntID
Department.Depart
mentName
Department.Depart
mentID
Rafferty 31 Sales 31
Jones 33 Sales 31
Steinberg 33 Sales 31
Smith 34 Sales 31
Robinson 34 Sales 31
John NULL Sales 31
Rafferty 31 Engineering 33
Jones 33 Engineering 33
Steinberg 33 Engineering 33
Smith 34 Engineering 33
Robinson 34 Engineering 33
John NULL Engineering 33
INNER JOIN
Employee.LastName
Employee.Departme
ntID
Department.Depart
mentName
Department.Depart
mentID
Robinson 34 Clerical 34
Jones 33 Engineering 33
Smith 34 Clerical 34
Steinberg 33 Engineering 33
Rafferty 31 Sales 31
SELECT *
FROM employee
INNER JOIN department
ON employee.DepartmentID =
department.DepartmentID;
INNER JOIN
Employee.LastName
Employee.Departme
ntID
Department.Depart
mentName
Department.Depart
mentID
Robinson 34 Clerical 34
Jones 33 Engineering 33
Smith 34 Clerical 34
Steinberg 33 Engineering 33
Rafferty 31 Sales 31
SELECT *
FROM employee, department
WHERE employee.DepartmentID =
department.DepartmentID;
NATURAL (EQUAL ) JOIN
SELECT *
FROM employee
NATURAL JOIN department;
DepartmentID Employee.LastName
Department.Depart
mentName
34 Robinson Clerical
33 Jones Engineering
34 Smith Clerical
33 Steinberg Engineering
31 Rafferty Sales
NATURAL JOIN
SELECT *
FROM employee
JOIN department USING (DepartmentID);
DepartmentID Employee.LastName
Department.Depart
mentName
34 Robinson Clerical
33 Jones Engineering
34 Smith Clerical
33 Steinberg Engineering
31 Rafferty Sales
LEFT OUTER JOIN
SELECT *
FROM employee
LEFT OUTER JOIN department
ON employee.DepartmentID =
department.DepartmentID;
Employee.LastNam
e
Employee.Departm
entID
Department.Depart
mentName
Department.Depart
mentID
Jones 33 Engineering 33
Rafferty 31 Sales 31
Robinson 34 Clerical 34
Smith 34 Clerical 34
John NULL NULL NULL
Steinberg 33 Engineering 33
FULL OUTER JOIN
SELECT *
FROM employee
FULL OUTER JOIN department
ON employee.DepartmentID =
department.DepartmentID;
Employee.LastNam
e
Employee.Departm
entID
Department.Depart
mentName
Department.Depart
mentID
Smith 34 Clerical 34
Jones 33 Engineering 33
Robinson 34 Clerical 34
John NULL NULL NULL
Steinberg 33 Engineering 33
Rafferty 31 Sales 31
NULL NULL Marketing 35
FULL OUTER JOIN
SELECT *
FROM employee
LEFT OUTER JOIN department
ON employee.DepartmentID =
department.DepartmentID
UNION
SELECT *
FROM employee
RIGHT OUTER JOIN department
ON employee.DepartmentID =
department.DepartmentID;
SELF-JOIN
SELECT F.EmployeeID, F.LastName, S.EmployeeID,
S.LastName, F.Country
FROM Employee F
INNER JOIN Employee S ON F.Country = S.Country
EmployeeID LastName Country
Department
ID
123 Rafferty Australia 31
124 Jones Australia 33
145 Steinberg Australia 33
201 Robinson United States 34
305 Smith Germany 34
306 John Germany NULL
SELF-JOIN
SELECT F.EmployeeID, F.LastName, S.EmployeeID,
S.LastName, F.Country
FROM Employee F
INNER JOIN Employee S ON F.Country = S.Country
WHERE F.EmployeeID < S.EmployeeID
ORDER BY F.EmployeeID, S.EmployeeID;
EmployeeID LastName Country
Department
ID
123 Rafferty Australia 31
124 Jones Australia 33
145 Steinberg Australia 33
201 Robinson United States 34
305 Smith Germany 34
306 John Germany NULL
SELF-JOIN
EmployeeID LastName EmployeeID LastName
123 Rafferty 124 Jones
123 Rafferty 145 Steinberg
124 Jones 145 Steinberg
305 Smith 306 John
EmployeeID LastName Country
Department
ID
123 Rafferty Australia 31
124 Jones Australia 33
145 Steinberg Australia 33
201 Robinson United States 34
305 Smith Germany 34
306 John Germany NULL
VIEW
Представление (VIEW) — объект базы данных, являющийся
результатом выполнения запроса к базе данных,
определенного с помощью оператора SELECT, в момент
обращения к представлению.
CREATE
[OR REPLACE]
[ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
[DEFINER = { user | CURRENT_USER }]
[SQL SECURITY { DEFINER | INVOKER }]
VIEW view_name [(column_list)] AS select_statement
[WITH [CASCADED | LOCAL] CHECK OPTION]
Преимущества VIEW
1. Дает возможность гибкой настройки прав доступа к
данным за счет того, что права даются не на таблицу, а на
представление.
2. Позволяет разделить логику хранения данных и
программного обеспечения.
3. Удобство в использовании за счет автоматического
выполнения таких действий как доступ к определенной
части строк и/или столбцов, получение данных из
нескольких таблиц и их преобразование с помощью
различных функций.
Ограничения VIEW
 нельзя повесить триггер на представление;
 нельзя сделать представление на основе временных таблиц;
 нельзя сделать временное представление;
 в определении представления нельзя использовать подзапрос в части
FROM;
 в определении представления нельзя использовать системные и
пользовательские переменные;
 таблицы и представления, присутствующие в определении
представления должны существовать.
Особенности VIEW
CREATE VIEW v AS
SELECT a.id, b.id FROM a,b;
CREATE VIEW v (a_id, b_id) AS
SELECT a.id, b.id FROM a,b;
CREATE VIEW v AS
SELECT a.id a_id, b.id b_id FROM a,b;
CREATE VIEW v AS
SELECT group_concat(DISTINCT column_name oreder BY
column_name separator '+')
FROM table_name;
Особенности VIEW
1. Если в обоих операторах встречается условие WHERE, то оба этих
условия будут выполнены как если бы они были объединены
оператором AND.
2. Если в определении представления есть конструкция ORDER BY, то
она будет работать только в случае отсутствия во внешнем операторе
SELECT, обращающемся к представлению, собственного условия
сортировки. При наличии конструкции ORDER BY во внешнем
операторе сортировка, имеющаяся в определении представления,
будет проигнорирована.
3. При наличии в обоих операторах модификаторов, влияющих на
механизм блокировки, таких как HIGH_PRIORITY, результат их
совместного действия неопределен. Для избежания
неопределенности рекомендуется в определении представления не
использовать подобные модификаторы.
Алгоритмы VIEW (MERGE)
CREATE VIEW v AS
SELECT subject, num_views/num_replies AS param
FROM topics
WHERE num_replies>0;
SELECT subject, param FROM v WHERE param>1000;
SELECT subject, num_views/num_replies AS param
FROM topics
WHERE num_replies>0 AND num_views/num_replies>1000;
Алгоритмы VIEW (TEMPTABLE)
CREATE VIEW v AS
SELECT forum_id, count(*) AS num
FROM topics GROUP BY forum_id;
SELECT MAX(num) FROM v;
SELECT MAX(count(*)) FROM topics GROUP BY forum_id;
CREATE TEMPORARY TABLE tmp_table SELECT forum_id,
count(*) AS num FROM topics GROUP BYforum_id;
SELECT MAX(num) FROM tmp_table;
DROP TABLE tpm_table;
Изменение VIEW
WITH [CASCADED | LOCAL] CHECK OPTION
• Изменение данных (UPDATE) будет происходить только если строка с
новыми значениями удовлетворяет условию WHERE в определении
представления.
• Добавление данных (INSERT) будет происходить только если новая
строка удовлетворяет условию WHERE в определении представления.
• Для LOCAL происходит проверка условия WHERE только в
собственном определении представления.
• Для CASCADED происходит проверка для всех представлений на
которых основанно данное представление. Значением по умолчанию
является CASCADED.
Изменение VIEW
CREATE OR REPLACE VIEW v AS
SELECT forum_name, `subject`, num_views
FROM topics,forums f
WHERE forum_id=f.id AND num_views>2000
WITH CHECK OPTION;
UPDATE v SET num_views=1999 WHERE subject='test';
ERROR 1369 (HY000): CHECK OPTION failed 'test.v'
UPDATE v SET num_views=2003 WHERE subject='test';
Query OK
Изменение VIEW
CREATE OR REPLACE VIEW v AS
SELECT forum_name, `subject`, num_views
FROM topics,forums f
WHERE forum_id=f.id AND num_views>2000
WITH CHECK OPTION;
INSERT INTO v (subject,num_views) VALUES('test1',4000);
ERROR 1369 (HY000): CHECK OPTION failed test.v
INSERT INTO v (forum_id,subject,num_views)
VALUES(1,'test1',4000);
ERROR 1054 (42S22): Unknown COLUMN 'forum_id' IN 'field
list'
Спасибо за внимание
Павел Щербинин
p.scherbinin@corp.mail.ru

More Related Content

Viewers also liked

СУБД 2013 Лекция №8 "Конфигурирование базы данных"
СУБД 2013 Лекция №8 "Конфигурирование базы данных"СУБД 2013 Лекция №8 "Конфигурирование базы данных"
СУБД 2013 Лекция №8 "Конфигурирование базы данных"
Technopark
 
Curs2 poo 2016
Curs2 poo 2016Curs2 poo 2016
Curs2 poo 2016
Adrian Runceanu
 
Curs1 poo 2016
Curs1 poo 2016Curs1 poo 2016
Curs1 poo 2016
Adrian Runceanu
 
Тестирование весна 2014 смешанное занятие 3
Тестирование весна 2014 смешанное занятие 3Тестирование весна 2014 смешанное занятие 3
Тестирование весна 2014 смешанное занятие 3Technopark
 
Лекция 13. YARN
Лекция 13. YARNЛекция 13. YARN
Лекция 13. YARN
Technopark
 
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"
Technopark
 
СУБД 2013 Лекция №5 "Определение узких мест"
СУБД 2013 Лекция №5 "Определение узких мест"СУБД 2013 Лекция №5 "Определение узких мест"
СУБД 2013 Лекция №5 "Определение узких мест"
Technopark
 

Viewers also liked (7)

СУБД 2013 Лекция №8 "Конфигурирование базы данных"
СУБД 2013 Лекция №8 "Конфигурирование базы данных"СУБД 2013 Лекция №8 "Конфигурирование базы данных"
СУБД 2013 Лекция №8 "Конфигурирование базы данных"
 
Curs2 poo 2016
Curs2 poo 2016Curs2 poo 2016
Curs2 poo 2016
 
Curs1 poo 2016
Curs1 poo 2016Curs1 poo 2016
Curs1 poo 2016
 
Тестирование весна 2014 смешанное занятие 3
Тестирование весна 2014 смешанное занятие 3Тестирование весна 2014 смешанное занятие 3
Тестирование весна 2014 смешанное занятие 3
 
Лекция 13. YARN
Лекция 13. YARNЛекция 13. YARN
Лекция 13. YARN
 
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"
 
СУБД 2013 Лекция №5 "Определение узких мест"
СУБД 2013 Лекция №5 "Определение узких мест"СУБД 2013 Лекция №5 "Определение узких мест"
СУБД 2013 Лекция №5 "Определение узких мест"
 

More from Technopark

Лекция 14. Hadoop в Поиске Mail.Ru
Лекция 14. Hadoop в Поиске Mail.RuЛекция 14. Hadoop в Поиске Mail.Ru
Лекция 14. Hadoop в Поиске Mail.Ru
Technopark
 
Лекция 12. Spark
Лекция 12. SparkЛекция 12. Spark
Лекция 12. Spark
Technopark
 
Лекция 10. Apache Mahout
Лекция 10. Apache MahoutЛекция 10. Apache Mahout
Лекция 10. Apache Mahout
Technopark
 
Лекция 9. ZooKeeper
Лекция 9. ZooKeeperЛекция 9. ZooKeeper
Лекция 9. ZooKeeper
Technopark
 
Лекция 7. Введение в Pig и Hive
Лекция 7. Введение в Pig и HiveЛекция 7. Введение в Pig и Hive
Лекция 7. Введение в Pig и Hive
Technopark
 
Лекция 6. MapReduce в Hadoop (графы)
Лекция 6. MapReduce в Hadoop (графы)Лекция 6. MapReduce в Hadoop (графы)
Лекция 6. MapReduce в Hadoop (графы)
Technopark
 
Лекция 5. MapReduce в Hadoop (алгоритмы)
Лекция 5. MapReduce в Hadoop (алгоритмы)Лекция 5. MapReduce в Hadoop (алгоритмы)
Лекция 5. MapReduce в Hadoop (алгоритмы)
Technopark
 
Лекция 4. MapReduce в Hadoop (введение)
Лекция 4. MapReduce в Hadoop (введение)Лекция 4. MapReduce в Hadoop (введение)
Лекция 4. MapReduce в Hadoop (введение)
Technopark
 
Лекция 3. Распределённая файловая система HDFS
Лекция 3. Распределённая файловая система HDFSЛекция 3. Распределённая файловая система HDFS
Лекция 3. Распределённая файловая система HDFS
Technopark
 
Лекция 2. Основы Hadoop
Лекция 2. Основы HadoopЛекция 2. Основы Hadoop
Лекция 2. Основы Hadoop
Technopark
 
Лекция 1. Введение в Big Data и MapReduce
Лекция 1. Введение в Big Data и MapReduceЛекция 1. Введение в Big Data и MapReduce
Лекция 1. Введение в Big Data и MapReduce
Technopark
 
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL" Час...
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL" Час...СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL" Час...
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL" Час...
Technopark
 
Java осень 2014 занятие 8
Java осень 2014 занятие 8Java осень 2014 занятие 8
Java осень 2014 занятие 8
Technopark
 
Java осень 2014 занятие 7
Java осень 2014 занятие 7Java осень 2014 занятие 7
Java осень 2014 занятие 7
Technopark
 
Java осень 2014 занятие 6
Java осень 2014 занятие 6Java осень 2014 занятие 6
Java осень 2014 занятие 6
Technopark
 
Java осень 2014 занятие 5
Java осень 2014 занятие 5Java осень 2014 занятие 5
Java осень 2014 занятие 5
Technopark
 
Java осень 2014 занятие 3
Java осень 2014 занятие 3Java осень 2014 занятие 3
Java осень 2014 занятие 3
Technopark
 
Java осень 2014 занятие 1
Java осень 2014 занятие 1Java осень 2014 занятие 1
Java осень 2014 занятие 1
Technopark
 
Java осень 2014 занятие 2
Java осень 2014 занятие 2Java осень 2014 занятие 2
Java осень 2014 занятие 2
Technopark
 

More from Technopark (19)

Лекция 14. Hadoop в Поиске Mail.Ru
Лекция 14. Hadoop в Поиске Mail.RuЛекция 14. Hadoop в Поиске Mail.Ru
Лекция 14. Hadoop в Поиске Mail.Ru
 
Лекция 12. Spark
Лекция 12. SparkЛекция 12. Spark
Лекция 12. Spark
 
Лекция 10. Apache Mahout
Лекция 10. Apache MahoutЛекция 10. Apache Mahout
Лекция 10. Apache Mahout
 
Лекция 9. ZooKeeper
Лекция 9. ZooKeeperЛекция 9. ZooKeeper
Лекция 9. ZooKeeper
 
Лекция 7. Введение в Pig и Hive
Лекция 7. Введение в Pig и HiveЛекция 7. Введение в Pig и Hive
Лекция 7. Введение в Pig и Hive
 
Лекция 6. MapReduce в Hadoop (графы)
Лекция 6. MapReduce в Hadoop (графы)Лекция 6. MapReduce в Hadoop (графы)
Лекция 6. MapReduce в Hadoop (графы)
 
Лекция 5. MapReduce в Hadoop (алгоритмы)
Лекция 5. MapReduce в Hadoop (алгоритмы)Лекция 5. MapReduce в Hadoop (алгоритмы)
Лекция 5. MapReduce в Hadoop (алгоритмы)
 
Лекция 4. MapReduce в Hadoop (введение)
Лекция 4. MapReduce в Hadoop (введение)Лекция 4. MapReduce в Hadoop (введение)
Лекция 4. MapReduce в Hadoop (введение)
 
Лекция 3. Распределённая файловая система HDFS
Лекция 3. Распределённая файловая система HDFSЛекция 3. Распределённая файловая система HDFS
Лекция 3. Распределённая файловая система HDFS
 
Лекция 2. Основы Hadoop
Лекция 2. Основы HadoopЛекция 2. Основы Hadoop
Лекция 2. Основы Hadoop
 
Лекция 1. Введение в Big Data и MapReduce
Лекция 1. Введение в Big Data и MapReduceЛекция 1. Введение в Big Data и MapReduce
Лекция 1. Введение в Big Data и MapReduce
 
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL" Час...
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL" Час...СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL" Час...
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL" Час...
 
Java осень 2014 занятие 8
Java осень 2014 занятие 8Java осень 2014 занятие 8
Java осень 2014 занятие 8
 
Java осень 2014 занятие 7
Java осень 2014 занятие 7Java осень 2014 занятие 7
Java осень 2014 занятие 7
 
Java осень 2014 занятие 6
Java осень 2014 занятие 6Java осень 2014 занятие 6
Java осень 2014 занятие 6
 
Java осень 2014 занятие 5
Java осень 2014 занятие 5Java осень 2014 занятие 5
Java осень 2014 занятие 5
 
Java осень 2014 занятие 3
Java осень 2014 занятие 3Java осень 2014 занятие 3
Java осень 2014 занятие 3
 
Java осень 2014 занятие 1
Java осень 2014 занятие 1Java осень 2014 занятие 1
Java осень 2014 занятие 1
 
Java осень 2014 занятие 2
Java осень 2014 занятие 2Java осень 2014 занятие 2
Java осень 2014 занятие 2
 

СУБД 2013 Лекция №3 "Выборка данных (продолжение). Транзакции"

  • 2. INSERT INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE] [INTO] tbl_name [(col_name,...)] {VALUES | VALUE} ({expr | DEFAULT},...),(...),... [ ON DUPLICATE KEY UPDATE col_name=expr [, col_name=expr] ... ] Or: INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE] [INTO] tbl_name SET col_name={expr | DEFAULT}, ... [ ON DUPLICATE KEY UPDATE col_name=expr [, col_name=expr] ... ]
  • 3. INSERT INSERT [LOW_PRIORITY | HIGH_PRIORITY] [IGNORE] [INTO] tbl_name [(col_name,...)] SELECT ... [ ON DUPLICATE KEY UPDATE col_name=expr [, col_name=expr] ... ]
  • 4. INSERT INSERT INTO tbl_temp2 (fld_id) SELECT tbl_temp1.fld_order_id FROM tbl_temp1 WHERE tbl_temp1.fld_order_id > 100; INSERT INTO table (a,b,c) VALUES (1,2,3) ON DUPLICATE KEY UPDATE c=c+1; INSERT INTO table (a,b,c) VALUES (1,2,3),(4,5,6) ON DUPLICATE KEY UPDATE c=VALUES(a)+VALUES(b);
  • 5. UPDATE UPDATE [LOW_PRIORITY] [IGNORE] table_reference SET col_name1={expr1|DEFAULT} [, col_name2={expr2|DEFAULT}] ... [WHERE where_condition] [ORDER BY ...] [LIMIT row_count] Multiple-table syntax: UPDATE [LOW_PRIORITY] [IGNORE] table_references SET col_name1={expr1|DEFAULT} [, col_name2={expr2|DEFAULT}] ... [WHERE where_condition]
  • 6. DELETE DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name [WHERE where_condition] [ORDER BY ...] [LIMIT row_count] Multiple-table syntax: DELETE [LOW_PRIORITY] [QUICK] [IGNORE] tbl_name[.*] [, tbl_name[.*]] ... FROM table_references [WHERE where_condition] Or: DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name[.*] [, tbl_name[.*]] ... USING table_references [WHERE where_condition]
  • 7. DELETE DELETE t1, t2 FROM t1 INNER JOIN t2 INNER JOIN t3 WHERE t1.id=t2.id AND t2.id=t3.id; Or: DELETE FROM t1, t2 USING t1 INNER JOIN t2 INNER JOIN t3 WHERE t1.id=t2.id AND t2.id=t3.id;
  • 8. Пользовательские переменные SET @t1=1, @t2=2, @t3:=4; SELECT @t1, @t2, @t3, @t4 := @t1+@t2+@t3 SET @var_name = expr [, @var_name = expr] ... SELECT @t1:=(@t2:=1)+@t3:=4,@t1,@t2,@t3; 1 2 4 7
  • 9. Пользовательские переменные SET @t1=1, @t2=2, @t3:=4; SELECT @t1, @t2, @t3, @t4 := @t1+@t2+@t3 SET @var_name = expr [, @var_name = expr] ... SELECT @t1:=(@t2:=1)+@t3:=4,@t1,@t2,@t3; 1 2 4 7 5 5 1 4
  • 10. Пользовательские переменные SET @t1=1, @t2=2, @t3:=4; SELECT @t1, @t2, @t3, @t4 := @t1+@t2+@t3 SET @var_name = expr [, @var_name = expr] ... SELECT @t1:=(@t2:=1)+@t3:=4,@t1,@t2,@t3; 1 2 4 7 5 5 1 4 SET @id := 0; SELECT @id := @id + 1 AS row_number, your_table.* FROM your_table; SELECT @i := @i + 1 AS row_number, your_table.* FROM your_table, (select @i:=0) AS z;
  • 11. SUBQUERIES non_subquery_operand comparison_operator (subquery) = > < >= <= <> != <=> LIKE SELECT col0, (SELECT col1 FROM table1 WHERE table1.id = table0.id), (SELECT col2 FROM table1 WHERE table1.id = table0.id) FROM table0 SELECT * FROM t1 WHERE column1 = (SELECT MAX(column2) FROM t2); SELECT * FROM t1 AS t WHERE 2 = (SELECT COUNT(*) FROM t1 WHERE t1.id = t.id);
  • 12. SUBQUERIES perand comparison_operator ANY (subquery) operand IN (subquery) operand comparison_operator SOME (subquery) SELECT s1 FROM t1 WHERE s1 > ANY (SELECT s1 FROM t2); SELECT s1 FROM t1 WHERE s1 = ANY (SELECT s1 FROM t2); SELECT s1 FROM t1 WHERE s1 IN (SELECT s1 FROM t2); operand comparison_operator ALL (subquery) SELECT s1 FROM t1 WHERE s1 > ALL (SELECT s1 FROM t2); SELECT s1 FROM t1 WHERE s1 <> ALL (SELECT s1 FROM t2); SELECT s1 FROM t1 WHERE s1 NOT IN (SELECT s1 FROM t2);
  • 13. ROW SUBQUERIES SELECT * FROM t1 WHERE (col1,col2) = (SELECT col3, col4 FROM t2 WHERE id = 10); SELECT * FROM t1 WHERE ROW(col1,col2) = (SELECT col3, col4 FROM t2 WHERE id = 10); SELECT column1,column2,column3 FROM t1 WHERE (column1,column2,column3) IN (SELECT column1,column2,column3 FROM t2)
  • 14. [NOT] EXISTS SELECT DISTINCT store_type FROM stores WHERE EXISTS ( SELECT * FROM cities_stores WHERE cities_stores.store_type = stores.store_type ); SELECT DISTINCT store_type FROM stores WHERE NOT EXISTS ( SELECT * FROM cities_stores WHERE cities_stores.store_type = stores.store_type );
  • 15. SUBQUERIES in FROM SELECT AVG(sum_column1) FROM ( SELECT SUM(column1) AS sum_column1 FROM t1 GROUP BY column1 ) AS t1; SELECT ... FROM (subquery) [AS] name ...
  • 16. UNION SELECT ... UNION [ALL | DISTINCT] SELECT ... [UNION [ALL | DISTINCT] SELECT ...] person amount Joe 1000 Alex 2000 Bob 5000 person amount Joe 2000 Alex 2000 Zach 35000 SELECT * FROM sales2010 UNION SELECT * FROM sales2011; person amount Joe 1000 Alex 2000 Bob 5000 Joe 2000 Zach 35000 person amount Joe 1000 Joe 2000 Alex 2000 Alex 2000 Bob 5000 Zach 35000 SELECT * FROM sales2010 UNION ALL SELECT * FROM sales2011;
  • 17. JOINS
  • 18. Набор данных LastName DepartmentID Rafferty 31 Jones 33 Steinberg 33 Robinson 34 Smith 34 John NULL DepartmentID DepartmentName 31 Sales 33 Engineering 34 Clerical 35 Marketing
  • 19. CROSS JOIN SELECT * FROM employee CROSS JOIN department; Employee.LastName Employee.Departme ntID Department.Depart mentName Department.Depart mentID Rafferty 31 Sales 31 Jones 33 Sales 31 Steinberg 33 Sales 31 Smith 34 Sales 31 Robinson 34 Sales 31 John NULL Sales 31 Rafferty 31 Engineering 33 Jones 33 Engineering 33 Steinberg 33 Engineering 33 Smith 34 Engineering 33 Robinson 34 Engineering 33 John NULL Engineering 33
  • 20. CROSS JOIN SELECT * FROM employee, department; Employee.LastName Employee.Departme ntID Department.Depart mentName Department.Depart mentID Rafferty 31 Sales 31 Jones 33 Sales 31 Steinberg 33 Sales 31 Smith 34 Sales 31 Robinson 34 Sales 31 John NULL Sales 31 Rafferty 31 Engineering 33 Jones 33 Engineering 33 Steinberg 33 Engineering 33 Smith 34 Engineering 33 Robinson 34 Engineering 33 John NULL Engineering 33
  • 21. INNER JOIN Employee.LastName Employee.Departme ntID Department.Depart mentName Department.Depart mentID Robinson 34 Clerical 34 Jones 33 Engineering 33 Smith 34 Clerical 34 Steinberg 33 Engineering 33 Rafferty 31 Sales 31 SELECT * FROM employee INNER JOIN department ON employee.DepartmentID = department.DepartmentID;
  • 22. INNER JOIN Employee.LastName Employee.Departme ntID Department.Depart mentName Department.Depart mentID Robinson 34 Clerical 34 Jones 33 Engineering 33 Smith 34 Clerical 34 Steinberg 33 Engineering 33 Rafferty 31 Sales 31 SELECT * FROM employee, department WHERE employee.DepartmentID = department.DepartmentID;
  • 23. NATURAL (EQUAL ) JOIN SELECT * FROM employee NATURAL JOIN department; DepartmentID Employee.LastName Department.Depart mentName 34 Robinson Clerical 33 Jones Engineering 34 Smith Clerical 33 Steinberg Engineering 31 Rafferty Sales
  • 24. NATURAL JOIN SELECT * FROM employee JOIN department USING (DepartmentID); DepartmentID Employee.LastName Department.Depart mentName 34 Robinson Clerical 33 Jones Engineering 34 Smith Clerical 33 Steinberg Engineering 31 Rafferty Sales
  • 25. LEFT OUTER JOIN SELECT * FROM employee LEFT OUTER JOIN department ON employee.DepartmentID = department.DepartmentID; Employee.LastNam e Employee.Departm entID Department.Depart mentName Department.Depart mentID Jones 33 Engineering 33 Rafferty 31 Sales 31 Robinson 34 Clerical 34 Smith 34 Clerical 34 John NULL NULL NULL Steinberg 33 Engineering 33
  • 26. FULL OUTER JOIN SELECT * FROM employee FULL OUTER JOIN department ON employee.DepartmentID = department.DepartmentID; Employee.LastNam e Employee.Departm entID Department.Depart mentName Department.Depart mentID Smith 34 Clerical 34 Jones 33 Engineering 33 Robinson 34 Clerical 34 John NULL NULL NULL Steinberg 33 Engineering 33 Rafferty 31 Sales 31 NULL NULL Marketing 35
  • 27. FULL OUTER JOIN SELECT * FROM employee LEFT OUTER JOIN department ON employee.DepartmentID = department.DepartmentID UNION SELECT * FROM employee RIGHT OUTER JOIN department ON employee.DepartmentID = department.DepartmentID;
  • 28. SELF-JOIN SELECT F.EmployeeID, F.LastName, S.EmployeeID, S.LastName, F.Country FROM Employee F INNER JOIN Employee S ON F.Country = S.Country EmployeeID LastName Country Department ID 123 Rafferty Australia 31 124 Jones Australia 33 145 Steinberg Australia 33 201 Robinson United States 34 305 Smith Germany 34 306 John Germany NULL
  • 29. SELF-JOIN SELECT F.EmployeeID, F.LastName, S.EmployeeID, S.LastName, F.Country FROM Employee F INNER JOIN Employee S ON F.Country = S.Country WHERE F.EmployeeID < S.EmployeeID ORDER BY F.EmployeeID, S.EmployeeID; EmployeeID LastName Country Department ID 123 Rafferty Australia 31 124 Jones Australia 33 145 Steinberg Australia 33 201 Robinson United States 34 305 Smith Germany 34 306 John Germany NULL
  • 30. SELF-JOIN EmployeeID LastName EmployeeID LastName 123 Rafferty 124 Jones 123 Rafferty 145 Steinberg 124 Jones 145 Steinberg 305 Smith 306 John EmployeeID LastName Country Department ID 123 Rafferty Australia 31 124 Jones Australia 33 145 Steinberg Australia 33 201 Robinson United States 34 305 Smith Germany 34 306 John Germany NULL
  • 31. VIEW Представление (VIEW) — объект базы данных, являющийся результатом выполнения запроса к базе данных, определенного с помощью оператора SELECT, в момент обращения к представлению. CREATE [OR REPLACE] [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}] [DEFINER = { user | CURRENT_USER }] [SQL SECURITY { DEFINER | INVOKER }] VIEW view_name [(column_list)] AS select_statement [WITH [CASCADED | LOCAL] CHECK OPTION]
  • 32. Преимущества VIEW 1. Дает возможность гибкой настройки прав доступа к данным за счет того, что права даются не на таблицу, а на представление. 2. Позволяет разделить логику хранения данных и программного обеспечения. 3. Удобство в использовании за счет автоматического выполнения таких действий как доступ к определенной части строк и/или столбцов, получение данных из нескольких таблиц и их преобразование с помощью различных функций.
  • 33. Ограничения VIEW  нельзя повесить триггер на представление;  нельзя сделать представление на основе временных таблиц;  нельзя сделать временное представление;  в определении представления нельзя использовать подзапрос в части FROM;  в определении представления нельзя использовать системные и пользовательские переменные;  таблицы и представления, присутствующие в определении представления должны существовать.
  • 34. Особенности VIEW CREATE VIEW v AS SELECT a.id, b.id FROM a,b; CREATE VIEW v (a_id, b_id) AS SELECT a.id, b.id FROM a,b; CREATE VIEW v AS SELECT a.id a_id, b.id b_id FROM a,b; CREATE VIEW v AS SELECT group_concat(DISTINCT column_name oreder BY column_name separator '+') FROM table_name;
  • 35. Особенности VIEW 1. Если в обоих операторах встречается условие WHERE, то оба этих условия будут выполнены как если бы они были объединены оператором AND. 2. Если в определении представления есть конструкция ORDER BY, то она будет работать только в случае отсутствия во внешнем операторе SELECT, обращающемся к представлению, собственного условия сортировки. При наличии конструкции ORDER BY во внешнем операторе сортировка, имеющаяся в определении представления, будет проигнорирована. 3. При наличии в обоих операторах модификаторов, влияющих на механизм блокировки, таких как HIGH_PRIORITY, результат их совместного действия неопределен. Для избежания неопределенности рекомендуется в определении представления не использовать подобные модификаторы.
  • 36. Алгоритмы VIEW (MERGE) CREATE VIEW v AS SELECT subject, num_views/num_replies AS param FROM topics WHERE num_replies>0; SELECT subject, param FROM v WHERE param>1000; SELECT subject, num_views/num_replies AS param FROM topics WHERE num_replies>0 AND num_views/num_replies>1000;
  • 37. Алгоритмы VIEW (TEMPTABLE) CREATE VIEW v AS SELECT forum_id, count(*) AS num FROM topics GROUP BY forum_id; SELECT MAX(num) FROM v; SELECT MAX(count(*)) FROM topics GROUP BY forum_id; CREATE TEMPORARY TABLE tmp_table SELECT forum_id, count(*) AS num FROM topics GROUP BYforum_id; SELECT MAX(num) FROM tmp_table; DROP TABLE tpm_table;
  • 38. Изменение VIEW WITH [CASCADED | LOCAL] CHECK OPTION • Изменение данных (UPDATE) будет происходить только если строка с новыми значениями удовлетворяет условию WHERE в определении представления. • Добавление данных (INSERT) будет происходить только если новая строка удовлетворяет условию WHERE в определении представления. • Для LOCAL происходит проверка условия WHERE только в собственном определении представления. • Для CASCADED происходит проверка для всех представлений на которых основанно данное представление. Значением по умолчанию является CASCADED.
  • 39. Изменение VIEW CREATE OR REPLACE VIEW v AS SELECT forum_name, `subject`, num_views FROM topics,forums f WHERE forum_id=f.id AND num_views>2000 WITH CHECK OPTION; UPDATE v SET num_views=1999 WHERE subject='test'; ERROR 1369 (HY000): CHECK OPTION failed 'test.v' UPDATE v SET num_views=2003 WHERE subject='test'; Query OK
  • 40. Изменение VIEW CREATE OR REPLACE VIEW v AS SELECT forum_name, `subject`, num_views FROM topics,forums f WHERE forum_id=f.id AND num_views>2000 WITH CHECK OPTION; INSERT INTO v (subject,num_views) VALUES('test1',4000); ERROR 1369 (HY000): CHECK OPTION failed test.v INSERT INTO v (forum_id,subject,num_views) VALUES(1,'test1',4000); ERROR 1054 (42S22): Unknown COLUMN 'forum_id' IN 'field list'
  • 41. Спасибо за внимание Павел Щербинин p.scherbinin@corp.mail.ru