18

СУБД осень 2012 Лекция 3

Embed Size (px)

Citation preview

Page 1: СУБД осень 2012 Лекция 3
Page 2: СУБД осень 2012 Лекция 3

1. Есть ли у вас разрешение на выполнение

выражения?

2. Есть ли у вас разрешения на доступ к необходимым

данным?

3. Правилен ли синтаксис выражения?

4. Оптимизация

5. План выполнения

6. Результирующий набор

Page 3: СУБД осень 2012 Лекция 3

SELECT[ALL | DISTINCT | DISTINCTROW ]

[HIGH_PRIORITY][STRAIGHT_JOIN][SQL_SMALL_RESULT] [SQL_BIG_RESULT]

[SQL_BUFFER_RESULT][SQL_CACHE | SQL_NO_CACHE]

[SQL_CALC_FOUND_ROWS]select_expr [, select_expr ...][FROM table_references[WHERE where_condition][GROUP BY {col_name | expr | position}

[ASC | DESC], ... [WITH ROLLUP]][HAVING where_condition][ORDER BY {col_name | expr | position}

[ASC | DESC], ...][LIMIT {[offset,] row_count | row_count OFFSET offset}]

Page 4: СУБД осень 2012 Лекция 3

1. Постоянные таблицы

2. Временные таблицы

3. Виртуальные таблицы (представления)

Page 5: СУБД осень 2012 Лекция 3

1. =

2. !=, <>

3. >, <, >=, <=

4. BETWEEN

5. IN

6. LIKE (_, %)

1. OR

2. AND

3. NOT

Page 6: СУБД осень 2012 Лекция 3

SELECT DISTINCT v.fname, v.lname, i.year, i.location, i.report_file

FROM Incident AS i

LEFT JOIN V(ictim?)... -- presumably v.incident_id = i.id

LEFT JOIN Keyword AS k ON k.incident_id = i.id

WHERE i.year BETWEEN 1947 AND 1966

AND i.type = 'HOMICIDE'

AND v.sex = 'F'

AND i.status = 'UNSOLVED'

AND ...

OR v.fname IN ('Mari', 'Magda')

OR SUBSTR ...

AND (k.keyword IN ('rape', 'decapitation', 'dismemberment', 'fire', 'altar', 'priest', 'prostitute')

...

AND SUBSTR(v.fname, 1, 1) = 'R' AND SUBSTR(v.lname, 1, 1) = 'L');

Page 7: СУБД осень 2012 Лекция 3

fname lname year location report_file

Anna Wedin 1956Mark FULL POLICE REPORT NOT DIGITIZED

Linda Janson 1955Mariestad FULL POLICE REPORT NOT DIGITIZED

Simone Grau 1958Goteborg FULL POLICE REPORT NOT DIGITIZED

Lea Persson 1962Uddevalla FULL POLICE REPORT NOT DIGITIZED

Kajsa Severin 1962Dals-Ed FULL POLICE REPORT NOT DIGITIZED

Page 8: СУБД осень 2012 Лекция 3

CASE case_valueWHEN when_value THEN statement_list[WHEN when_value THEN statement_list] ...[ELSE statement_list]

END CASE

Or:

CASEWHEN search_condition THEN statement_list[WHEN search_condition THEN statement_list] ...[ELSE statement_list]

END CASE

IF (EXP1, EXP2, EXP3)

Page 9: СУБД осень 2012 Лекция 3

1. Группировка по одному столбцу

2. Группировка по нескольким столбцам

3. Группировка по средствам выражений

4. WITH ROLLUP

Page 10: СУБД осень 2012 Лекция 3

Name Description

AVG() Return the average value of the argument

BIT_AND() Return bitwise and

BIT_OR() Return bitwise or

BIT_XOR() Return bitwise xor

COUNT(DISTINCT) Return the count of a number of different values

COUNT() Return a count of the number of rows returned

GROUP_CONCAT() Return a concatenated string

MAX() Return the maximum value

MIN() Return the minimum value

STD() Return the population standard deviation

STDDEV() Return the population standard deviation

SUM() Return the sum

VARIANCE() Return the population standard variance

Page 11: СУБД осень 2012 Лекция 3

SELECT column_name, aggregate_function(column_name)

FROM table_name

WHERE column_name operator value

GROUP BY column_name

HAVING aggregate_function(column_name) operator value

Page 12: СУБД осень 2012 Лекция 3

ORDER BY {col_name | expr | position}[ASC | DESC], ...

LIMIT {[offset,] row_count | row_count OFFSET offset}

Page 13: СУБД осень 2012 Лекция 3

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_nameSET col_name={expr | DEFAULT}, ...[ ON DUPLICATE KEY UPDATE

col_name=expr[, col_name=expr] ... ]

Or:INSERT [LOW_PRIORITY | HIGH_PRIORITY] [IGNORE]

[INTO] tbl_name [(col_name,...)]SELECT ...[ ON DUPLICATE KEY UPDATE

col_name=expr[, col_name=expr] ... ]

Page 14: СУБД осень 2012 Лекция 3

INSERT INTO tbl_temp2 (fld_id)SELECT

tbl_temp1.fld_order_idFROM

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);

Page 15: СУБД осень 2012 Лекция 3

UPDATE [LOW_PRIORITY] [IGNORE] table_referenceSET col_name1={expr1|DEFAULT} [, col_name2={expr2|DEFAULT}] ...[WHERE where_condition][ORDER BY ...][LIMIT row_count]

Multiple-table syntax:

UPDATE [LOW_PRIORITY] [IGNORE] table_referencesSET col_name1={expr1|DEFAULT} [, col_name2={expr2|DEFAULT}] ...[WHERE where_condition]

Page 16: СУБД осень 2012 Лекция 3

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]

Page 17: СУБД осень 2012 Лекция 3

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;

Page 18: СУБД осень 2012 Лекция 3