vladislavkopilov

SQL манипулирование данными

Apr 21st, 2015
335
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
SQL 16.32 KB | None | 0 0
  1.  
  2. Создать БД
  3. CREATE DATABASE имя_бд;
  4. CREATE DATABASE mybase01;
  5. -------------------------
  6.  
  7. Выбираем и используем БД
  8. USE имя_бд;
  9. USE mybase01;
  10. -------------------------
  11.  
  12. Создать таблицу
  13. Синтаксис:
  14. CREATE TABLE имя_таблицы(
  15.     имя_поля1 тип_данных_поля01,   
  16.     имя_поля2 тип_данных_поля02
  17. );
  18.  
  19. Пример:
  20. CREATE TABLE fg(
  21.     atr01 CHAR(3),
  22.     atr02 CHAR(4)
  23. );
  24. CREATE TABLE fg(
  25.     atr01 CHAR(3) NOT NULL, -(значение не равно NULL)
  26.     atr02 CHAR(4),
  27.     atr03 INT (2) NOT NULL DEFAULT 10, -(по умолчанию равно '10')
  28. );
  29. -------------------------
  30.  
  31. Создание id в таблице
  32. Пример 1: Создание id после создания таблицы
  33. ALTER TABLE email_list ADD id INT NOT NULL AUTO_INCREMENT FIRST, ADD PRIMARY KEY (id);
  34. Пример 2:
  35. CREATE TABLE guitarwars (
  36.     id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
  37.         DATA DATETIME,
  38.         name CHAR (20),
  39.         score CHAR (9)
  40. );
  41. -----------------------------------------------------
  42.  
  43. Удалить таблицу
  44. DROP TABLE имя_таблицы;
  45. DROP TABLE my_table;
  46. -------------------------------------------------------------------------
  47.  
  48. Вставить значения в таблицу:
  49. Синтаксис:
  50. INSERT INTO Имя таблицы (имя_колонки1, имя_колонки2, ...) VALUES ('значение1', 'значение2', ...);
  51. INSERT INTO 'rates' ('name','value') VALUES ('руб', 12);
  52. INSERT INTO 'users' ('firstname','lastname') VALUES ('vlad', 'ivanoff'), ('ivan','petroff');
  53. -------------------------------------------------
  54.  
  55. Извлечь значения из таблицы
  56. Синтаксис:
  57. SELECT перечень_колонок FROM имя_таблицы;
  58. Пример:
  59. SELECT first_name, last_name FROM people;
  60. SELECT * FROM people; -(выбрать все)
  61. -------------------------
  62.  
  63. Извлечь значения из таблицы c определенным значением
  64. Синтаксис:
  65. SELECT перечень_колонок FROM имя_таблицы WHERE имя_колонки="нужное_значение";
  66.  
  67. Пример:
  68. SELECT * FROM student WHERE age=21;
  69. SELECT first_name, last_name FROM student WHERE age=21 AND study="IT";
  70. SELECT * FROM student WHERE info IS NULL; -- поиск NULL
  71.  
  72. Извлечение последних символов
  73. SELECT какой_край(название_столбца, кол-во_символов) FROM имя_таблицы
  74. SELECT RIGHT(YEAR, 2) FROM car_table;
  75. SELECT LEFT(sex,1) FROM car_table;
  76.  
  77. Извлечение символов до запятой
  78. SELECT SUBSTRING_INDEX(имя_столбца, символ_который ищем , до_какого_симв) FROM имя_таблицы
  79. SELECT SUBSTRING_INDEX(location, ',',1) FROM people; -- ищем до первой запятой
  80.  
  81. Извлечь часть строки
  82. SELECT SUBSTRING(строка,начало,длина);
  83. SELECT SUBSTRING('МОРеутов',3,6); -- Реутов
  84. -----------------------------------------------------
  85.  
  86. Извлечь значения из таблицы с упорядочевыванию данных
  87. SELECT * FROM имя_табицы ORDER BY имя_столбца тип_порядка
  88. Пример:
  89. SELECT * FROM guitarwars ORDER BY score DESC - по убыванию (первый самый большой)
  90. SELECT * FROM guitarwars ORDER BY score ASC  по возрастанию (первый самый маленький)
  91. -----------------------------------------------------
  92.  
  93. Операторы для условия
  94. = -- равно
  95. > -- больше
  96. < -- меньше
  97. >= -- больше или равно (name>='Г' - начинается с буквы Г и следующих букв)
  98. <= -- меньше или равно
  99. <> -- не равно
  100. LIKE -- подобный (location LIKE '%CA') % - произвольный; _ - один произвольный символ
  101.         name LIKE '_им'
  102. Логические операторы:
  103. AND -- и
  104. OR -- или
  105. BETWEEN AND -- между (calories BETWEEN 30 AND 60) (отменьшего числа к большему)
  106. IN -- выбор из списка, заменяет несколько OR
  107.     WHERE rating IN ('Оригинально','Восхитительно','Потрясно');
  108. NOT IN -- -- выбор значений исключающий списка, заменяет несколько OR
  109.     WHERE rating NOT IN ('Скучно','Банально','Плохо');
  110. WHERE NOT имя_колонки (BETWEEN|LIKE)
  111. -----------------------------------------------------
  112.  
  113. Нестрогие запросы LIKE
  114. SELECT * FROM people WHERE Sunname LIKE '%Mc%'; --MacDonalds, MacQunne
  115. LIKE '%л' -- строка заканчивается на букву Л
  116. LIKE '% для%' -- пробел перед и после ДЛЯ
  117. LIKE '%ор %'  -- строка заканчивается на ОР
  118. LIKE 'та%' -- слово начинается на ТА
  119. LIKE '%ли%' -- все строки с ЛИ
  120. -----------------------------------------------------
  121.  
  122. Ограничение на кол-во результатов по запросу
  123. LIMIT
  124. Пример:
  125. LIMIT 5 -- вывод первых пяти записей
  126. LIMIT 10, 5 -- вывод с 10 по 15 записей
  127. -----------------------------------------------------
  128.  
  129. Вывести описание таблицы
  130. DESC имя_таблицы;
  131. DESC database01;
  132. SHOW CREATE TABLE имя_таблицы; -- показывает как была создана таблица
  133. SHOW COLUMNS FROM имя_таблицы; -- показать все столбцы
  134. -----------------------------------------------------
  135.  
  136. Обновить значение
  137. UPDATE имя_таблицы SET колонка_01='значение_01', колонка_02='значение_02' WHERE условие
  138. UPDATE rates SET VALUE='$new_rate' WHERE name='USD'
  139. UPDATE drinks SET cost=cost+1 WHERE name="Blues" OR name="Clubs"
  140. UPDATE my_contact SET state=RIGHT(location,2); --два последних символа из location
  141. -----------------------------------------------------
  142.  
  143. Удалить данные из таблицы
  144. DELETE FROM имя_таблицы; -в этом случае таблица полностью очиститься
  145. DELETE FROM имя_таблицы WHERE имя_столбца='его_значение'; -в этом случае удалиться только некоторые строки
  146. Пример:
  147. DELETE FROM email_list WHERE email='[email protected]';
  148. DELETE FROM guitarwars WHERE screenshot IS NULL;
  149. -----------------------------------------------------
  150.  
  151. Очистить всю таблицу
  152. DELETE FROM имя_таблицы
  153. DELETE FROM clown_info
  154. -----------------------------------------------------
  155.  
  156. Изменение структуры таблицы
  157.  
  158. ALTER TABLE имя_таблицы КОМАНДА_SQL имя_колонки тип_колонки;
  159.  
  160. Команды_SQL:
  161. DROP COLUMN - удалить колонку
  162. ADD COLUMN - добавить колонку
  163. CHANGE COLUMN - изменить колонку (имя и тип данных)
  164. MODIFY COLUMN - модифицировать колонку (тип данных и позиция)
  165. RENAME TO - переименовать таблицу
  166.  
  167. Примеры:
  168. ALTER TABLE guitarwars DROP COLUMN age;
  169. ALTER TABLE guitarwars ADD COLUMN age INT FIRST; - добавить этот столбец в начало таблицы
  170. ALTER TABLE guitarwars ADD COLUMN age INT after name; - добавить этот столбец после столбца name
  171. ALTER TABLE guitarwars CHANGE COLUMN score high_score INT;
  172. ALTER TABLE guitarwars MODIFY COLUMN DATE DATETIME AFTER age;
  173. ALTER TABLE guitarwars MODIFY COLUMN description CHAR (120); -- увеличить объем строки
  174. ALTER TABLE my_contacts ADD COLUMN id INT(3) AUTO_INCREMENT FIRST, ADD PRIMARY KEY (id);
  175. ALTER TABLE contact RENAME TO my_contacts;
  176. -----------------------------------------------------
  177.  
  178. Условие
  179. CASE
  180.     WHEN стобец1=значение1
  181.     THEN новое_значение1
  182.     WHEN  столбец2=значение2 (AND/WHERE столбец3=значение3)
  183.     THEN новое_значение2
  184.     ELSE новое_значение3
  185. END;
  186. //Используется с UPDATE SELECT INSERT DELETE
  187. //как только нашлось одно значение, код переходит к END
  188. //ELSE можно не включать в код
  189.  
  190. Пример:
  191. UPDATE movie
  192. SET category=
  193. CASE
  194.     WHEN DRAMA=TRUE THEN 'drama'
  195.     WHEN  COMEDY=TRUE THEN 'comedy'
  196.     ELSE 'other'
  197. END;
  198. -----------------------------------------------------
  199. Арифметические операции
  200. SUM(имя_столбца) - сумма
  201. AVG(имя_столбца) - среднее значение
  202. MIN(имя_столбца) - минимальное значение
  203. MAX(имя_столбца) - максимальное значение
  204. COUNT(имя_столбца) - посчитать кол-во полученных записей
  205. DISTINCT имя_столбца - показать те значения, которые не повторяются
  206.  
  207. SELECT SUM(sales) FROM sales WHERE name="anne";
  208. SELECT DISTINCT sale FROM sales WHERE name="anne";
  209. -----------------------------------------------------
  210. AS - псевдоним
  211. -----------------------------------------------------
  212.  
  213. Одновременное выполнение команд
  214. CREATE SELECT INSERT
  215. Пример 01:
  216. CREATE TABLE profession(
  217.     id INT(3) NOT NULL AUTO_INCREMENT PRIMARY KEY,
  218.     prof VARCHAR(10)
  219. );
  220. INSERT INTO profession(prof)
  221.     SELECT profession FROM my_contacts;
  222.  
  223. Пример 02:
  224. CREATE TABLE profession(
  225.     id INT(3) NOT NULL AUTO_INCREMENT PRIMARY KEY,
  226.     prof VARCHAR(10)
  227. )AS
  228.     SELECT profession FROM my_contacts;
  229. -----------------------------------------------------
  230.  
  231. Создание внешнего ключа
  232. Пример01:
  233. CREATE TABLE my_contacts( // первая таблица
  234.     contact_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
  235.     ....
  236. );
  237.  
  238. CREATE TABLE interest(
  239.     int_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, //первичный ключ
  240.     interest VARCHAR (50) NOT NULL,
  241.     contact_id_fk INT NOT NULL, //заготовка для внешнего ключа
  242.     CONSTRAINT my_contacts_contact_id_fk //ограничению присваивается имя из какой таблицы ключ
  243.     FOREIGN KEY (contact_id_fk) //имя внешнего ключа
  244.     REFERENCES my_contacts (contact_id)  //указываем из какой таблицы ключ и как он там называется
  245. );
  246.  
  247. Пример 02:
  248. CREATE TABLE prof(
  249.     prof_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
  250.     prof CHAR(25)
  251. );
  252.  
  253. CREATE TABLE people(
  254.     id_people INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
  255.     first_name VARCHAR (20) NOT NULL,
  256.     last_name VARCHAR (20) NOT NULL,
  257.     prof_id_fk INT NOT NULL,
  258.     CONSTRAINT prof_prof_id_fk
  259.     FOREIGN KEY (prof_id_fk)
  260.     REFERENCES prof (prof_id)
  261. );
  262. -----------------------------------------------------
  263.  
  264. Запросы с использованием нескольких таблиц
  265.     Соединение двух таблиц
  266.  
  267. имя_таблицы.имя_столбца
  268. SELECT my_contacts.profession FROM my_contacts;
  269.  
  270. CROSS JOIN -- перекрестное соединение
  271. SELECT t.toy, b.boy FROM toys AS t
  272.     CROSS JOIN boys AS b;
  273. или
  274. SELECT toys.toy, boys.boy
  275.     FROM toys, boys;
  276. --к каждому из таблицы boys подставляются все toys
  277. --обычно этими соединениями проверяют скорость СУБД
  278.  
  279. INNER JOIN -- внутреннее соединение
  280. --вывести имена людей и профессии
  281. SELECT mc.last_name, mc.first_name, p.profession
  282. FROM my_contacts AS mc
  283.     INNER JOIN profession AS p
  284. ON mc.prof_id_fk=p.prof_id;
  285.  
  286. --
  287. ON mc.prof_id_fk=p.prof_id; -- это эквивалентное соединение
  288. ON mc.prof_id_fk<>p.prof_id; -- это не эквивалентное соединение
  289. --
  290.  
  291. Запрос к верхнему примеру №2:
  292. SELECT pp.last_name, pp.first_name, p.prof
  293. FROM people AS pp
  294.     INNER JOIN prof AS p
  295. ON pp.prof_id_fk=p.prof_id;
  296.  
  297. NATURAL JOIN -- естественное соединение
  298. --используются если имена столбов одинаковые
  299. CREATE TABLE toys(
  300.     toy_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
  301.     toy VARCHAR(10) NOT NULL
  302. );
  303.  
  304. CREATE TABLE boy(
  305.     boy_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
  306.     boy VARCHAR (10) NOT NULL,
  307.     toy_id INT NOT NULL,
  308.     CONSTRAINT toys_toy_id
  309.     FOREIGN KEY (toy_id)
  310.     REFERENCES toys (toy_id)
  311. );
  312.  
  313. SELECT boys.boy, toys.toy
  314. FROM boys
  315.     NATURAL JOIN toys (WHERE);
  316.  
  317.    
  318. Внешние соединения
  319. Левое внешнее соединение
  320. LEFT OUTER JOIN //перепибаем все записи из левой таблицы и ищем соответсвия среди записей правой таблицы
  321. //то есть выбираются все данные которые пересекаются в таблицах + остальные записи из "левой" таблицы
  322. //Таблица следующая после FROM, но ДО JOIN считается левой, а ПОСЛЕ JOIN - правой
  323.  
  324. Пример 01:
  325. SELECT g.girl, t.toy
  326. FROM girls g
  327. LEFT OUTER JOIN toys t
  328. ON g.toy_id=t.toy_id;
  329. //Это выводит не только какие игрушки какой девочки принадлежат но и также выведет NULL у игрушке, которая не принадлежит никакой девочке
  330.  
  331. Правое внешнее соединение
  332. RIGHT OUTER JOIN
  333. //ищет в левой таблице соответсвия правой
  334.  
  335. Пример 01:
  336. SELECT g.girl, t.toy
  337. FROM toys t
  338. RIGHT OUTER JOIN girls g
  339. ON g.toy_id=t.toy_id;
  340.  
  341.     Соединение трех и более таблиц
  342. ????
  343. -----------------------------------------------------
  344.  
  345. Запросы EXISTS и NOT EXISTS
  346. SELECT mc.first_name, firstname, mc.last_name lastname, mc.email email //назначаем псевдонимы
  347. FROM my_contacts mc
  348. WHERE NOT EXISTS //Находит тех людей из таблицы mc которых нет в таблице jc
  349. (SELECT * FROM job_current jc
  350. WHERE mc.contact_id = jc.contact_id);
  351.  
  352. SELECT mc.first_name, firstname, mc.last_name lastname, mc.email email
  353. FROM my_contacts mc
  354. WHERE EXISTS //Находит тех людей из таблицы mc которе есть в таблице ci
  355. (SELECT * FROM contact_interest ci
  356. WHERE mc.contact_id = ci.contact_id);
  357. -----------------------------------------------------
  358.  
  359. Союзы
  360. UNION -- нужны когда нужно вывести одинаковые значения из 2-х и более таблиц
  361.  
  362. Пример 01:
  363. SELECT title FROM job_current
  364. UNION
  365. SELECT title FROM job_desired
  366. UNION
  367. SELECT title FROM job_listing
  368. ORDER BY title;
  369. -----------------------------------------------------
  370.  
  371. CREATE VIEW -- представления
  372. CREATE VIEW web_desingers AS
  373. SELECT mc.first_name, mc.last_name, mc.phone, mc.email
  374. FROM my_contacts mc
  375. NATURAL JOIN job_desired id
  376. WHERE jd.title='Веб-дизайнер';
  377.  
  378. //Теперь вместо запроса поиска веб-дизайнера достаточно написать:
  379. SELECT * FROM web_desingers;
  380.  
  381. Удалить представление
  382. DROP VIEW web_desingers;
  383. -----------------------------------------------------
  384.  
  385. Транзакция
  386.  
  387. 01)Создаем БД которая поддерживает транзакции
  388. CREATE TABLE(
  389. )ENGINE=BDB DEFAULT CHARSET=utf-8;
  390. или
  391. CREATE TABLE(
  392. )ENGINE=InnoDB DEFAULT CHARSET=utf-8;
  393.  
  394. или просто меняем ядро
  395. ALTER TABLE имя_таблицы TYPE = InnoDB;
  396.  
  397. 02)Создаем транзакцию
  398.  
  399. START TRANSACTION; //начало транзакции
  400. .... //SQL-код
  401. ROLLBACK; //передемали - откатили БД к состоянию до транзакции
  402.  
  403. START TRANSACTION; //начало транзакции
  404. .... //SQL-код
  405. COMMIT; //закрепили транзакцию. Все операции выполнены.
  406. -----------------------------------------------------
Advertisement
Add Comment
Please, Sign In to add comment