Основне СКЛ наредбе - Листа упита и изјава базе података које бисте требали знати

СКЛ је скраћеница за језик структурираних упита. СКЛ наредбе су упуте које се користе за комуникацију с базом података за извршавање задатака, функција и упита с подацима.

СКЛ наредбе могу се користити за претраживање базе података и за обављање других функција попут креирања табела, додавања података у табеле, модификовања података и испуштања табела.

Ево листе основних СКЛ наредби (које се понекад називају клаузуле) које бисте требали знати да ли ћете радити са СКЛ-ом.

СЕЛЕЦТ и ФРОМ

SELECTДео упита одређује које колоне података да покажу у резултатима. Постоје и опције које можете да примените за приказ података који нису колона табеле.

Пример испод показује три колоне SELECTЕд FROMна "студентску" табелу и један израчунати колону. База података чува студентИД, ФирстНаме и ЛастНаме ученика. Можемо да комбинујемо колоне Име и Презиме да бисмо створили израчунати ступац Пуно име.

SELECT studentID, FirstName, LastName, FirstName + ' ' + LastName AS FullName FROM student;
+-----------+-------------------+------------+------------------------+ | studentID | FirstName | LastName | FullName | +-----------+-------------------+------------+------------------------+ | 1 | Monique | Davis | Monique Davis | | 2 | Teri | Gutierrez | Teri Gutierrez | | 3 | Spencer | Pautier | Spencer Pautier | | 4 | Louis | Ramsey | Louis Ramsey | | 5 | Alvin | Greene | Alvin Greene | | 6 | Sophie | Freeman | Sophie Freeman | | 7 | Edgar Frank "Ted" | Codd | Edgar Frank "Ted" Codd | | 8 | Donald D. | Chamberlin | Donald D. Chamberlin | | 9 | Raymond F. | Boyce | Raymond F. Boyce | +-----------+-------------------+------------+------------------------+ 9 rows in set (0.00 sec)

СТВАРИ ТАБЕЛУ

CREATE TABLEради управо оно како звучи: ствара табелу у бази података. Можете одредити име табеле и колоне које би требале бити у табели.

CREATE TABLE table_name ( column_1 datatype, column_2 datatype, column_3 datatype );

АЛТЕР ТАБЛЕ

ALTER TABLEмења структуру табеле. Ево како бисте колони додали базу података:

ALTER TABLE table_name ADD column_name datatype;

ПРОВЕРАВАТИ

CHECKОграничење се користи за ограничавање опсег вредности који се може поставити у колони.

Ако дефинишете CHECKограничење за један ступац, то дозвољава само одређене вредности за овај ступац. Ако дефинишете CHECKограничење на табели, то може ограничити вредности у одређеним колонама на основу вредности у другим колонама у реду.

Следећи СКЛ ствара CHECKограничење на колони „Аге“ када се креира табела „Персонс“. У CHECKОграничени осигурава да не може имати било коју особу испод 18 година.

CREATE TABLE Persons ( ID int NOT NULL, LastName varchar(255) NOT NULL, FirstName varchar(255), Age int, CHECK (Age>=18) );

Да бисте дозволили именовање CHECKограничења и за дефинисање CHECKограничења на више колона, користите следећу СКЛ синтаксу:

CREATE TABLE Persons ( ID int NOT NULL, LastName varchar(255) NOT NULL, FirstName varchar(255), Age int, City varchar(255), CONSTRAINT CHK_Person CHECK (Age>=18 AND City="Sandnes") );

ГДЕ

(AND ,OR , IN, BETWEEN, Анд LIKE)

WHEREКлаузула се користи за ограничавање броја редова вратили.

Као пример, прво ћемо вам показати SELECTизјаву и резултате без једног WHEREсаопштењу. Затим ћемо додати WHEREизјаву која користи свих пет квалификација горе.

SELECT studentID, FullName, sat_score, rcd_updated FROM student;
+-----------+------------------------+-----------+---------------------+ | studentID | FullName | sat_score | rcd_updated | +-----------+------------------------+-----------+---------------------+ | 1 | Monique Davis | 400 | 2017-08-16 15:34:50 | | 2 | Teri Gutierrez | 800 | 2017-08-16 15:34:50 | | 3 | Spencer Pautier | 1000 | 2017-08-16 15:34:50 | | 4 | Louis Ramsey | 1200 | 2017-08-16 15:34:50 | | 5 | Alvin Greene | 1200 | 2017-08-16 15:34:50 | | 6 | Sophie Freeman | 1200 | 2017-08-16 15:34:50 | | 7 | Edgar Frank "Ted" Codd | 2400 | 2017-08-16 15:35:33 | | 8 | Donald D. Chamberlin | 2400 | 2017-08-16 15:35:33 | | 9 | Raymond F. Boyce | 2400 | 2017-08-16 15:35:33 | +-----------+------------------------+-----------+---------------------+ 9 rows in set (0.00 sec)

Сада ћемо поновити SELECTупит, али ћемо ограничити редове враћене помоћу WHEREизраза.

STUDENT studentID, FullName, sat_score, recordUpdated FROM student WHERE (studentID BETWEEN 1 AND 5 OR studentID = 8) AND sat_score NOT IN (1000, 1400);
+-----------+----------------------+-----------+---------------------+ | studentID | FullName | sat_score | rcd_updated | +-----------+----------------------+-----------+---------------------+ | 1 | Monique Davis | 400 | 2017-08-16 15:34:50 | | 2 | Teri Gutierrez | 800 | 2017-08-16 15:34:50 | | 4 | Louis Ramsey | 1200 | 2017-08-16 15:34:50 | | 5 | Alvin Greene | 1200 | 2017-08-16 15:34:50 | | 8 | Donald D. Chamberlin | 2400 | 2017-08-16 15:35:33 | +-----------+----------------------+-----------+---------------------+ 5 rows in set (0.00 sec)

АЖУРИРАЊЕ

Да бисте ажурирали запис у табели, користите UPDATEизјаву.

Помоћу WHEREуслова наведите које записе желите да ажурирате. Могуће је ажурирати једну или више колона одједном. Синтакса је:

UPDATE table_name SET column1 = value1, column2 = value2, ... WHERE condition;

Ево примера ажурирања Имена записа помоћу Ид 4:

UPDATE Person SET Name = “Elton John” WHERE Id = 4;

Такође можете ажурирати колоне у табели користећи вредности из других табела. Користите JOINклаузулу за добијање података из више табела. Синтакса је:

UPDATE table_name1 SET table_name1.column1 = table_name2.columnA table_name1.column2 = table_name2.columnB FROM table_name1 JOIN table_name2 ON table_name1.ForeignKey = table_name2.Key

Ево примера ажурирања менаџера свих записа:

UPDATE Person SET Person.Manager = Department.Manager FROM Person JOIN Department ON Person.DepartmentID = Department.ID

ГРУПА ОД

GROUP BY омогућава вам комбиновање редова и обједињавање података.

Ево синтаксе GROUP BY:

SELECT column_name, COUNT(*) FROM table_name GROUP BY column_name;

ХАВИНГ

HAVINGомогућава вам филтрирање података прикупљених GROUP BYклаузулом тако да корисник добије ограничени скуп записа за преглед.

Ево синтаксе HAVING:

SELECT column_name, COUNT(*) FROM table_name GROUP BY column_name HAVING COUNT(*) > value;

АВГ ()

„Просек“ се користи за израчунавање просека нумеричког ступца из скупа редова које враћа СКЛ израз.

Ево синтаксе за употребу функције:

SELECT groupingField, AVG(num_field) FROM table1 GROUP BY groupingField

Ево примера коришћења студентске табеле:

SELECT studentID, FullName, AVG(sat_score) FROM student GROUP BY studentID, FullName;

КАО

AS омогућава вам да преименујете колону или табелу користећи псеудоним.

SELECT user_only_num1 AS AgeOfServer, (user_only_num1 - warranty_period) AS NonWarrantyPeriod FROM server_table

Ово резултира излазом као у наставку.

+-------------+------------------------+ | AgeOfServer | NonWarrantyPeriod | +-------------+------------------------+ | 36 | 24 | | 24 | 12 | | 61 | 49 | | 12 | 0 | | 6 | -6 | | 0 | -12 | | 36 | 24 | | 36 | 24 | | 24 | 12 | +-------------+------------------------+

АС такође можете користити за додељивање имена табели како бисте олакшали позивање у удруживањима.

SELECT ord.product, ord.ord_number, ord.price, cust.cust_name, cust.cust_number FROM customer_table AS cust JOIN order_table AS ord ON cust.cust_number = ord.cust_number

Ово резултира излазом као у наставку.

+-------------+------------+-----------+-----------------+--------------+ | product | ord_number | price | cust_name | cust_number | +-------------+------------+-----------+-----------------+--------------+ | RAM | 12345 | 124 | John Smith | 20 | | CPU | 12346 | 212 | Mia X | 22 | | USB | 12347 | 49 | Elise Beth | 21 | | Cable | 12348 | 0 | Paul Fort | 19 | | Mouse | 12349 | 66 | Nats Back | 15 | | Laptop | 12350 | 612 | Mel S | 36 | | Keyboard| 12351 | 24 | George Z | 95 | | Keyboard| 12352 | 24 | Ally B | 55 | | Air | 12353 | 12 | Maria Trust | 11 | +-------------+------------+-----------+-----------------+--------------+

НАРУЧИ ПО

ORDER BY gives us a way to sort the result set by one or more of the items in the SELECT section. Here is an SQL sorting the students by FullName in descending order. The default sort order is ascending (ASC) but to sort in the opposite order (descending) you use DESC.

SELECT studentID, FullName, sat_score FROM student ORDER BY FullName DESC;

COUNT

COUNT will count the number of rows and return that count as a column in the result set.

Here are examples of what you would use COUNT for:

  • Counting all rows in a table (no group by required)
  • Counting the totals of subsets of data (requires a Group By section of the statement)

This SQL statement provides a count of all rows. Note that you can give the resulting COUNT column a name using “AS”.

SELECT count(*) AS studentCount FROM student; 

DELETE

DELETE is used to delete a record in a table.

Be careful. You can delete all records of the table or just a few. Use the WHERE condition to specify which records you want to delete. The syntax is:

DELETE FROM table_name WHERE condition;

Here is an example deleting from the table Person the record with Id 3:

DELETE FROM Person WHERE Id = 3;

INNER JOIN

JOIN, also called Inner Join, selects records that have matching values in two tables.

SELECT * FROM A x JOIN B y ON y.aId = x.Id

LEFT JOIN

A LEFT JOIN returns all rows from the left table, and the matched rows from the right table. Rows in the left table will be returned even if there was no match in the right table. The rows from the left table with no match in the right table will have null for right table values.

SELECT * FROM A x LEFT JOIN B y ON y.aId = x.Id

RIGHT JOIN

A RIGHT JOIN returns all rows from the right table, and the matched rows from the left table. Opposite of a left join, this will return all rows from the right table even where there is no match in the left table. Rows in the right table that have no match in the left table will have null values for left table columns.

SELECT * FROM A x RIGHT JOIN B y ON y.aId = x.Id 

FULL OUTER JOIN

A FULL OUTER JOIN returns all rows for which there is a match in either of the tables. So if there are rows in the left table that do not have matches in the right table, those will be included. Also, if there are rows in the right table that do not have matches in the left table, those will be included.

SELECT Customers.CustomerName, Orders.OrderID FROM Customers FULL OUTER JOIN Orders ON Customers.CustomerID=Orders.CustomerID ORDER BY Customers.CustomerName

INSERT

INSERT is a way to insert data into a table.

INSERT INTO table_name (column_1, column_2, column_3) VALUES (value_1, 'value_2', value_3);

LIKE

LIKE  користи се у WHEREили HAVING(као део GROUP BY) за ограничавање изабраних редова на ставке када колона садржи одређени образац знакова који се у њој налазе.

Овај СКЛ ће одабрати студенте који FullNameпочињу са „Моникуе“ или завршавају са „Греене“.

SELECT studentID, FullName, sat_score, rcd_updated FROM student WHERE FullName LIKE 'Monique%' OR FullName LIKE '%Greene'; 
+-----------+---------------+-----------+---------------------+ | studentID | FullName | sat_score | rcd_updated | +-----------+---------------+-----------+---------------------+ | 1 | Monique Davis | 400 | 2017-08-16 15:34:50 | | 5 | Alvin Greene | 1200 | 2017-08-16 15:34:50 | +-----------+---------------+-----------+---------------------+ 2 rows in set (0.00 sec)

Можете да поставите место NOTраније LIKEда бисте изузели редове са узорком низа, уместо да их одаберете. Овај СКЛ искључује записе који садрже „цер Пау“ и „Тед“ у колони ФуллНаме.

SELECT studentID, FullName, sat_score, rcd_updated FROM student WHERE FullName NOT LIKE '%cer Pau%' AND FullName NOT LIKE '%"Ted"%';
+-----------+----------------------+-----------+---------------------+ | studentID | FullName | sat_score | rcd_updated | +-----------+----------------------+-----------+---------------------+ | 1 | Monique Davis | 400 | 2017-08-16 15:34:50 | | 2 | Teri Gutierrez | 800 | 2017-08-16 15:34:50 | | 4 | Louis Ramsey | 1200 | 2017-08-16 15:34:50 | | 5 | Alvin Greene | 1200 | 2017-08-16 15:34:50 | | 6 | Sophie Freeman | 1200 | 2017-08-16 15:34:50 | | 8 | Donald D. Chamberlin | 2400 | 2017-08-16 15:35:33 | | 9 | Raymond F. Boyce | 2400 | 2017-08-16 15:35:33 | +-----------+----------------------+-----------+---------------------+ 7 rows in set (0.00 sec)