logo

SQL изгледи

Изглед в SQL е запазена SQL заявка, която действа като виртуална таблица. За разлика от обикновените изгледи на таблици не съхраняват самите данни. Вместо това те динамично генерират данни, като изпълняват SQL заявката, дефинирана в изгледа, всеки път, когато има достъп до нея.

Той може да извлича данни от една или повече таблици и да ги представя в персонализиран формат, позволяващ на разработчиците да:

  • Опростете сложните заявки: Капсулирайте сложни съединения и условия в един обект.
  • Подобряване на сигурността: Ограничете достъпа до определени колони или редове.
  • Гъвкаво представяне на данни: Осигурете персонализирани изгледи на данни за различни потребители.

Ще използваме тези две SQL таблици за примери.



Подробности за студента:

-- Create StudentDetails table  
CREATE TABLE StudentDetails (
S_ID INT PRIMARY KEY
NAME VARCHAR(255)
ADDRESS VARCHAR(255)
);

INSERT INTO StudentDetails (S_ID NAME ADDRESS)
VALUES
(1 'Harsh' 'Kolkata')
(2 'Ashish' 'Durgapur')
(3 'Pratik' 'Delhi')
(4 'Dhanraj' 'Bihar')
(5 'Ram' 'Rajasthan');

Изход:

S_ID

Име

Адрес

1

Сурова

Колката

2

пепеляво

Дургапур

3

Практикувайте

Делхи

4

Дханрадж

Бихар

5

Рам

Раджастан

Студентски оценки:

-- Create StudentMarks table  
CREATE TABLE StudentMarks (
ID INT PRIMARY KEY
NAME VARCHAR(255)
Marks INT
Age INT
);

INSERT INTO StudentMarks (ID NAME Marks Age)
VALUES
(1 'Harsh' 90 19)
(2 'Suresh' 50 20)
(3 'Pratik' 80 19)
(4 'Dhanraj' 95 21)
(5 'Ram' 85 18);

Изход:

ID

Име

марки

Възраст

1

Сурова

90

19

2

Суреш

50

20

3

Практикувайте

80

19

4

Дханрадж

95

21

5

Рам

85

18

СЪЗДАВАЙТЕ ИЗГЛЕДИ в SQL

Можем да създадем изглед, като използваме оператора CREATE VIEW. Изглед може да бъде създаден от една или няколко таблици.

Синтаксис:

CREATE VIEW view_name AS  
SELECT column1 column2.....
FROM table_name
WHERE condition;

Ключови термини:

  • име_на изглед : Име за изгледа
  • име_на_таблица : Име на таблицата
  • състояние : Условие за избор на редове

Пример 1: Създаване на прост изглед от една таблица

Пример 1.1: В този пример ще създадем изглед с име DetailsView от таблицата StudentDetails.

Запитване:

CREATE VIEW DetailsView AS  
SELECT NAME ADDRESS
FROM StudentDetails
WHERE S_ID < 5;

Използвайте заявката по-долу, за да извлечете данните от този изглед

SELECT * FROM DetailsView;

Изход: 

Име

Адрес

Сурова

Колката

пепеляво

Дургапур

Практикувайте

Делхи

Дханрадж

Бихар

Пример 1.2: Тук ще създадем изглед с име StudentNames от таблицата StudentDetails.

Запитване:

CREATE VIEW StudentNames AS  
SELECT S_ID NAME
FROM StudentDetails
ORDER BY NAME;

Ако сега поискаме изгледа като

    SELECT    *     FROM    StudentNames;

Изход: 

S_ID

Име

2

пепеляво

4

Дханрадж

1

Сурова

3

Практикувайте

5

Рам

символ за избягване на java

Пример 2: Създаване на изглед от множество таблици

В този пример ще създадем View MarksView, който комбинира данни от двете таблици StudentDetails и StudentMarks. За да създадем изглед от множество таблици, можем просто да включим няколко таблици в ИЗБЕРЕТЕ изявление.

Запитване:

CREATE VIEW MarksView AS  
SELECT StudentDetails.NAME StudentDetails.ADDRESS StudentMarks.MARKS
FROM StudentDetails StudentMarks
WHERE StudentDetails.NAME = StudentMarks.NAME;

За да покажете данни на View MarksView:

SELECT * FROM MarksView;

Изход:

Име

Адрес

марки

какво е регистърът на буквите в sql

Сурова

Колката

90

Практикувайте

Делхи

80

Дханрадж

Бихар

95

Рам

Раджастан

85

Управление на изгледи: Актуализиране и изтриване на списъци

1. Изброяване на всички изгледи в база данни

Можем да изброим всички изгледи в база данни, като използваме оператора SHOW FULL TABLES или чрез запитване към таблиците information_schema.

USE 'database_name';  
SHOW FULL TABLES WHERE table_type LIKE '%VIEW';

Използване на информация_схема

SELECT table_name  
FROM information_schema.views
WHERE table_schema = 'database_name';

OR

SELECT table_schema table_name view_definition
FROM information_schema.views
WHERE table_schema = 'database_name';

2. Изтриване на изглед

SQL ни позволява да изтрием съществуващ изглед. Ние можем изтрий или пуснете View с помощта на оператора DROP.

Синтаксис:

DROP VIEW view_name;

Пример: В този пример изтриваме View MarksView.

DROP VIEW MarksView;

3. Актуализиране на дефиниция на изглед

Ако искаме да актуализираме съществуващите данни в изгледа, използваме  АКТУАЛИЗИРАНЕ  изявление.

UPDATE view_name  
SET column1 = value1 column2 = value2.... columnN = valueN
WHERE [condition];

Ако искате да актуализирате дефиницията на изгледа, без да засягате данните, използвайте командата CREATE OR REPLACE VIEW. Например нека добавимAgeколона къмMarksView:

CREATE OR REPLACE VIEW view_name AS  
SELECT column1 column2 ...
FROM table_name
WHERE condition;

Забележка: Не всички изгледи могат да бъдат актуализирани с помощта на оператора UPDATE.

Правила за актуализиране на изгледи в SQL:

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

  1. Операторът SELECT, който се използва за създаване на изгледа, не трябва да включва клауза GROUP BY или ПОРЪЧАЙТЕ ПО клауза.
  2. Операторът SELECT не трябва да има РАЗЛИЧЕН ключова дума.
  3. Изгледът трябва да има всички стойности NOT NULL.
  4. Изгледът не трябва да се създава с помощта на вложени заявки или сложни заявки.
  5. Изгледът трябва да бъде създаден от една таблица. Ако изгледът е създаден с помощта на множество таблици, тогава няма да ни бъде разрешено да актуализираме изгледа.

Усъвършенствани техники с изгледи

1. Актуализиране на данни чрез изгледи

Можем да използваме оператора CREATE OR REPLACE VIEW, за да добавим или заменим полета от изглед. Ако искаме да актуализираме изгледа MarksView и да добавим полето AGE към този изглед от StudentMarks Table, можем да направим това чрез:

Пример:

CREATE OR REPLACE VIEW MarksView AS  
SELECT StudentDetails.NAME StudentDetails.ADDRESS StudentMarks.MARKS StudentMarks.AGE
FROM StudentDetails StudentMarks
WHERE StudentDetails.NAME = StudentMarks.NAME;

Ако извлечем всички данни от MarksView сега като:

SELECT * FROM MarksView;

Изход:

Име

Адрес

марки

Възраст

Сурова

Колката

90

19

Практикувайте

Делхи

80

19

Дханрадж

Бихар

95

21

Рам

Раджастан

85

18

Можем да вмъкнем ред в изглед по същия начин, както го правим в таблица. Можем да използваме INSERT INTO оператор на SQL за вмъкване на ред в изглед. В примера по-долу ще вмъкнем нов ред в View DetailsView, който създадохме по-горе в примера за „създаване на изгледи от една таблица“.

Пример:

INSERT INTO DetailsView(NAME ADDRESS)  
VALUES('Suresh''Gurgaon');

Ако извлечем всички данни от DetailsView сега като

SELECT * FROM DetailsView;

Изход:

Име

Адрес

Сурова

Колката

пепеляво

Дургапур

Практикувайте

Делхи

Дханрадж

Бихар

Суреш

Гургаон

3. Изтриване на ред от изглед

Изтриването на редове от изглед също е толкова просто, колкото изтриването на редове от таблица. Можем да използваме командата DELETE на SQL, за да изтрием редове от изглед. Освен това изтриването на ред от изглед първо изтрива реда от действителната таблица и след това промяната се отразява в изгледа. В този пример ще изтрием последния ред от изгледа DetailsView, който току-що добавихме в горния пример за вмъкване на редове.

Пример:

DELETE FROM DetailsView  
WHERE NAME='Suresh';

Ако извлечем всички данни от DetailsView сега като

SELECT * FROM DetailsView;

Изход: 

Име

Адрес

Сурова

Колката

пепеляво

Дургапур

Практикувайте

Делхи

Дханрадж

Бихар

4. С КЛАУЗА ЗА ПРОВЕРКА

Клаузата WITH CHECK OPTION в SQL е много полезна клауза за изгледи. Прилага се към изглед с възможност за актуализиране. Използва се за предотвратяване на модифициране на данни (с помощта на INSERT или UPDATE), ако условието в клаузата WHERE в оператора CREATE VIEW не е изпълнено.

Ако сме използвали клаузата WITH CHECK OPTION в оператора CREATE VIEW и ако клаузата UPDATE или INSERT не отговаря на условията, тогава те ще върнат грешка. В примера по-долу ние създаваме View SampleView от таблицата StudentDetails с клауза WITH CHECK OPTION.

Пример:

CREATE VIEW SampleView AS  
SELECT S_ID NAME
FROM StudentDetails
WHERE NAME IS NOT NULL
WITH CHECK OPTION;

В този изглед, ако сега се опитаме да вмъкнем нов ред с нулева стойност в колоната NAME, това ще даде грешка, тъй като изгледът е създаден с условието за колоната NAME като NOT NULL. Например, въпреки че изгледът може да се актуализира, тогава заявката по-долу за този изглед не е валидна:

INSERT INTO SampleView(S_ID)  
VALUES(6);
Създаване на тест