Mysql
 sql >> база данни >  >> RDS >> Mysql

Какво е SQL? Какво е база данни? Системи за управление на релационни бази данни (RDBMS) обяснени на обикновен английски.

Базите данни могат да бъдат трудни за заобикаляне на главата. Те обаче са от съществено значение за програмирането с пълен стек и изграждането на бек-енд услуги, които съхраняват данни.

В тази публикация ще демистифицирам SQL, бази данни и системи за управление на релационни бази данни. Също така ще използвам някои аналогии с Магьосническия свят, включително самия Хари Потър и някои от часовете, които посещава в Хогуортс.

Преди да се потопим в ключовите термини, нека дефинираме какво представлява самата база данни:

Абаза данни е структуриран набор от данни, съхранявани в компютър, особено такъв, който е достъпен по различни начини. По същество това е организиран набор от данни на компютър, който може да бъде достъпен по електронен път от компютърна система.

Ключови условия

По-долу са някои ключови термини, с които ще започнем:

  • RDMS: Системи за управление на релационни бази данни. Тази рамка за бази данни е основата на MySQL.
  • SQL: Структуриран език за заявки.
  • Таблици: Обекти на база данни, които носят данни. Пример за име на таблица е „Студенти“, или „Учители“, или „Курсови“.
  • Полета: Стойностите на таблица са известни като полета. Примерни полета за учащи ще бъдат „Име“, „Фамилно име“ и „GPA“.
  • Запис/ред: Индивидуално вписване в таблицата.

След като добавим учители и курсове към базата данни, можем да имаме таблици за студенти, учители и курсове.

Докато продължаваме напред в ръководството, ще използваме само Студентите пример тук като справка. Ако сте имали късмета да бъдете наети като софтуерен инженер в Хогуортс, вашата база данни може да използва добре някои от тези команди :D

SQL изявления

Синтаксис

Точката и запетаята е стандартният начин за разделяне на един SQL израз от друг. Той позволява множество SQL оператори да се изпълняват в едно и също извикване. В това ръководство ще имаме точка и запетая в края на всяко изявление.

Най-важните SQL команди

Създаване :Създава нова SQL таблица.

Ако създавахме студентската база данни за училището Хогуортс, например, щяхме да използваме CREATE да направи маса, наречена "Студенти".

  • Синтаксис
CREATE TABLE table_name (
    column1 datatype,
    column2 datatype,
    column3 datatype,
   ....
);
  • Пример
CREATE TABLE Students
                (first_name VARCHAR(255),
                last_name VARCHAR(255),
                login VARCHAR(255),
                age INTEGER,
                gpa REAL,
                house VARCHAR(255));

Изпускане :Изтрива таблица. Бъдете много внимателни, когато използвате тази команда, тъй като това ще изтрие всички данни в таблицата!

Ако искаме да изтрием цялата студентска база данни, ще използваме DROP за да извършите това действие.

  • Синтаксис
DROP TABLE table_name;
  • Пример
DROP TABLE Students;

Вмъкване :Добавя нови редове с данни към таблица.

Ще използваме INSERT за добавяне на нови студенти, когато се записват в Хогуортс.

  • Синтаксис
INSERT INTO table_name (column1, column2, column3, ...)
VALUES (value1, value2, value3, ...);
  • Пример
INSERT 
INTO Students(first_name, last_name, login, age, gpa, house)
VALUES 
('Harry',     'Potter', 'theboywholived', 15, 4.0, 'Gryffindor'),
('Hermionie', 'Granger','granger2',       15, 4.5, 'Gryffindor'),
('Ron',       'Weasley','weasley7',       15, 3.7, 'Gryffindor'),
('Draco',     'Malfoy', 'malfoy999',      15, 4.0, 'Slytherin'),
('Cedric',    'Diggory','diggory123',     15, 4.0, 'Hufflepuff');

Изберете :Използва се за извличане на данни в база данни, които да бъдат върнати в табличен формат.

Ако искаме да извлечем всички имена на студенти, които са в къщата на Грифиндор, ще използваме SELECT команда. Примерът по-долу отправя заявка към таблицата Students за собственото и фамилното име на всеки ученик в базата данни, което за нас е само петте реда, описани по-горе.

  • Синтаксис
SELECT column1, column2, ...
FROM table_name;
  • Пример
SELECT first_name, last_name FROM Students;
first_name фамилно_име
Хари Потър
Хърмаяни Грейнджър
Рон Уизли
Драко Малфой
Седрик Дигъри

Като алтернатива, ако искаме да изберем всички полета в таблицата, нашата команда ще използва синтаксиса "*", което означава избор на всички полета:

SELECT * FROM Students;
first_name фамилно_име вход възраст gpa къща
Хари Потър theboywholived 15 4 Грифиндор
Хърмаяни Грейнджър granger2 15 4.5 Грифиндор
Рон Уизли уизли7 15 3.7 Грифиндор
Драко Малфой malfoy999 15 4 Слидерин
Седрик Дигъри diggory123 15 4 Хъфълпаф

Клаузи

Аклауза е логическа част от SQL израз и (на теория) е незадължително поле.

В горното изявление ние просто върнахме всички полета в базата данни на Student. Не сме посочили условие за връщаните стойности.

Ами ако искаме да запитаме не всички ученици, а само тези, чиято къща е Грифиндор? Какво ще кажете за запитване на студенти, чието име започва с "H", или студенти в Хъфълпъф и Слидерин? Тези по-сложни случаи се решават с SQL клаузи.

По-долу е даден преглед на най-често срещаните клаузи, но има още няколко клаузи в езика SQL. Ето един добър общ преглед, ако искате още информация.

Примери за клаузи

Къде: Използва се за посочване на условие при извличане на данни от база данни. Връщайки се към примера с Select, ще трябва да използваме WHERE за да посочите къщата като Грифиндор.

  • Синтаксис
SELECT column1, column2, ...
FROM table_name
WHERE condition;
  • Пример
SELECT * FROM Students
WHERE house='Gryffindor';
first_name фамилно_име вход възраст gpa къща
Хари Потър theboywholived 15 4 Грифиндор
Хърмаяни Грейнджър granger2 15 4.5 Грифиндор
Рон Уизли уизли7 15 3.7 Грифиндор

И Използва се за комбиниране на множество клаузи в SQL израз, където всички условия, разделени от И, са верни. Ще използваме И, за да получим ученици от Грифиндор, които имат успех над 3,8.

  • Синтаксис
SELECT column1, column2, ...
FROM table_name
WHERE condition1 AND condition2 AND condition3 ...;
  • Пример
SELECT * FROM Students
WHERE house='Gryffindor' AND gpa>3.8;
first_name фамилно_име вход възраст gpa къща
Хари Потър theboywholived 15 4 Грифиндор
Хърмаяни Грейнджър granger2 15 4.5 Грифиндор

Или :Подобно на И, но връща само данни, в които само ЕДНО от условията, разделени от ИЛИ, е вярно. Ако искахме да извлечем ученици в Хъфълпаф и Слидерин, но не и в двете, щяхме да използваме командата ИЛИ.

  • Синтаксис
SELECT column1, column2, ...
FROM table_name
WHERE condition1 OR condition2 OR condition3 ...;
  • Пример
SELECT * FROM Students
WHERE house='Slytherin' OR house='Hufflepuff';
first_name фамилно_име вход възраст gpa къща
Драко Малфой malfoy999 15 4 Слидерин
Седрик Дигъри diggory123 15 4 Хъфълпаф

Харесвам: Използва се с WHERE за търсене на конкретен модел. Ако искаме само името и фамилията на магьосници/вещици с имена, започващи с "H", бихме могли да използваме командата Like.

  • Синтаксис
SELECT column1, column2, ...
FROM table_name
WHERE columnN LIKE pattern;
  • Пример
SELECT first_name, last_name FROM Students
WHERE first_name LIKE 'H%';
first_name фамилно_име
Хари Потър
Хърмаяни Грейнджър

Брой: Използва се за намиране на броя на колона (или колони) в таблица.

  • Синтаксис
SELECT COUNT(column_name)
FROM table_name
WHERE condition;
  • Пример
SELECT COUNT(first_name) FROM Students;
COUNT(first_name)
5

Две други команди, които използват същия синтаксис, са AVG и SUM. AVG ще изчисли средната стойност на всички стойности, а sum ще изчисли сбора от всички стойности.

Изберете лимит: Използва се за прекъсване на отговорите само до определено количество. Начинът, по който се избират най-добрите отговори, е по реда на първо вмъкване в базата данни в хронологичен ред.

  • Синтаксис
SELECT column_name(s)
FROM table_name
WHERE condition
LIMIT number;
  • Пример
SELECT * FROM Students LIMIT 3;
first_name фамилно_име вход възраст gpa къща
Хари Потър theboywholived 15 4 Грифиндор
Хърмаяни Грейнджър granger2 15 4.5 Грифиндор
Рон Уизли уизли7 15 3.7 Грифиндор

Други полезни команди

Поръчайте по: Сортира резултатите във възходящ или низходящ ред.

  • Синтаксис
SELECT column1, column2, ...
FROM table_name
ORDER BY column1, column2, ... ASC|DESC;
  • Пример
SELECT * FROM Students ORDER BY first_name;
first_name фамилно_име вход възраст gpa къща
Седрик Дигъри diggory123 15 4 Хъфълпаф
Драко Малфой malfoy999 15 4 Слидерин
Хари Потър theboywholived 15 4 Грифиндор
Хърмаяни Грейнджър granger2 15 4.5 Грифиндор
Рон Уизли уизли7 15 3.7 Грифиндор

Групиране по: Групира категории, които имат еднакви стойности, в редове. Ако искате да знаете броя на учениците във всяка къща (3 в Грифиндор например), можете да използвате командата Group By.

  • Синтаксис
SELECT column_name(s)
FROM table_name
WHERE condition
GROUP BY column_name(s)
ORDER BY column_name(s);
  • Пример
SELECT COUNT(first_name), house FROM Students GROUP BY house;
COUNT(first_name) къща
3 Грифиндор
1 Хъфълпаф
1 Слидерин

И накрая, ето една DB Fiddle, която показва всички горепосочени команди в действие!

Нормализирани срещу денормализирани бази данни

Когато проектирате база данни, има два основни модела на проектиране, които можете да следвате, всеки със свои собствени компромиси.

Нормализирано: Оптимизира за минимизиране на излишъка не за време за четене.

Да кажем, че имаме таблица с курсове, която има идентификационен номер на учител за учителя, който преподава този курс. Имаме и база данни на учители, която съдържа името на учителя.

Когато искаме да получим имена на учители, преподаващи конкретен курс, ще трябва да потърсим както таблиците за курсове, така и за Учители, тъй като таблицата на курса няма името на преподавателя (ефективно, но излишно).

Денормализирано: Оптимизира за време за четене , не за минимизиране на излишъка.

Да приемем, че имаме таблица с курсове, която има ИД на учител И име на учител. Имаме база данни на учители, която също има името на учителя. Когато искаме да получим имена на учители в курса, можем просто да използваме таблицата на курса (излишна, но ефективна).

Интегритет на данните

За потребителите е жизненоважно данните, с които взаимодействат, да са сигурни, правилни и разумни. Примерите са да се уверите, че възрастта не е отрицателно число или че няма двама ученици да имат една и съща информация. Наричаме това катоинтегритет на данните.

Цялостността на данните има няколко форми и може да бъде разделена на четири категории:

  • Цялост на обекта :Няма дублиращи се редове в таблица. Например, не можем да вмъкнем Рон Уизли два пъти в базата данни.
  • Цялост на домейна :Ограничаване на типа стойности, които човек може да вмъкне, за да наложи правилните стойности. Например къща може да бъде само Грифиндор, Рейвънклоу, Слидерин или Хъфълпаф.
  • Цялост на препратката :Записите, които се използват от други записи, не могат да бъдат изтрити. Учител не може да бъде изтрит, ако в момента преподава курс.
  • Дефинирана от потребителя цялост: Категория „други“, която се състои от бизнес логика и правила към базата данни.

Общи SQL бази данни

  • Оракул :Много стабилен и зрял, но може да струва скъпо
  • MySQL :Лек и бърз за настройка, но не толкова зрял като Oracle
  • PostgreSQL :Добър за определени случаи на употреба, но не супер бърз

Ресурси

  • SWEPrep – Въпроси за интервю направо във входящата ви кутия
  • SQL и бази данни на freeCodeCamp
  • Изчистване на кода
  • Ефективна Java
  • Документация на Oracle
  • Документация за MySql
  • Документация за PostgreSQL

Бъдете актуални

  • Теми на Reddit :Страхотни теми за бази данни, SQL и нови технологии
  • Новини за хакери: Наистина страхотен ресурс, за да сте в течение на най-новите разработки в технологичната индустрия
  • CodePen: Отличен ресурс за откриване на добри SQL практики.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да инсталирате MySQL на macOS

  2. Промяна на ограничението за Mysql размер на ред е твърде голям

  3. Често срещаната грешка в MySQL:„Има грешка при четене на комуникационен пакет“

  4. Да съкратите всички таблици в MySQL база данни с една команда?

  5. Как да преименувате база данни в MySQL