Strukturirani poizvedovalni jezik SQL

Similar documents
Državni izpitni center SPOMLADANSKI IZPITNI ROK *M * NAVODILA ZA OCENJEVANJE. Četrtek, 2. junij 2016 SPLOŠNA MATURA

I N F O R M A T I K A V P R O M E T U

Session:E07 GALIO - DB2 index advisor, how we implemented it and what we get from self-made expert tool

CIS 363 MySQL. Chapter 12 Joins Chapter 13 Subqueries

Vodnik skozi Google Analytics Beta verzija 1. del. prehod s stare kode (urchin.js), k novi kodi za sledenje (ga.js)

I N F O R M A T I K A V P R O M E T U

Lab # 4 Hands-On. DDL and DML Advance SQL Statements Institute of Computer Science, University of Tartu, Estonia

Programski jezik Java

Q: Do You made a backup before upgrade? A: Only cowards make backups!

DB2 podatkovna baza v praksi

Sistemske zahteve za SAOP

Transakcije v MariaDB/MySQL (transakcija A)

Razvoj jezika za iskanje, povezovanje in predstavitev podatkov

SQL. CS 564- Fall ACKs: Dan Suciu, Jignesh Patel, AnHai Doan

Tehnike programiranja PREDAVANJE 2 Uvod v JavaScript

Jezik Baze Podataka SQL. Jennifer Widom

2.1 Uvod v podatkovne baze

Poglavje 7. Indeksi z uporabo drevesnih struktur Povzeto po [1]

What is SQL? Toolkit for this guide. Learning SQL Using phpmyadmin

How we calculate volume with the use of NTF method. Kako izračunamo volumen z uporabo metode NTF

Calculation of volume with the use of NTF method. Izračun volumnov z uporabo NTF metode

Chapter 3:Spatial Query Languages 3.1 Standard Database Query Languages 3.2 Relational Algebra 3.3 Basic SQL Primer 3.4 Extending SQL for Spatial

Družina IEEE802 Poddružina IEEE802.1 Priključitev v omrežje IEEE802.1x

OGRODJE ZA OPTIMIZACIJO INDEKSOV V MYSQL BAZAH PODATKOV

Prirejanje in preverjanje tipov

OMREŽNI UKAZI OS LINUX

Skriptni jezik lupine Bash

Organizacija računalnikov (OR) UNI-RI, 3.l. RS Vaje. doc.dr. Mira Trebar

1Z MySQL 5 Database Administrator Certified Professional Exam, Part II Exam.

Računalniški praktikum 2. del

SODOBNE NERELACIJSKE PODATKOVNE BAZE (NOSQL) Matjaž Kukar, 2015/16

CREATE DATABASE naziv-baze-podataka [IN naziv-dbspace]

Podatkovno procesiranje v relacijskih sistemih

Informacioni sistemi i baze podataka

TEHNIČNA POJASNILA GLEDE IZPOLNJEVANJA ITS POROČIL

Dostop do podatkov Svetovne banke v orodju Orange

Hitra rast hranjenih podatkov

IP PACKET QUEUING DISCIPLINES AS BASIC PART OF QOS ASSURANCE WITHIN THE NETWORK

SODOBNE NERELACIJSKE PODATKOVNE BAZE (NOSQL) Matjaž Kukar, 2016/17

Naslavljanje v IP. Miran Meža

HKTA TANG HIN MEMORIAL SECONDARY SCHOOL SECONDARY 3 COMPUTER LITERACY. Name: ( ) Class: Date: Databases and Microsoft Access

2017 GridGain Systems, Inc. In-Memory Performance Durability of Disk

Navodila za uporabo izdelkov programske opreme Microsoft

ZA UPORABO INFORMACIJSKIH BAZ URADA

Advanced MySQL Query Tuning

Osnove programskega jezika C++

TEHNIČNA POJASNILA GLEDE IZPOLNJEVANJA ITS POROČIL

Uvod u relacione baze podataka

In-Memory Computing Essentials

Podatkovne baze I in Osnove podatkovnih baz

Getting Started with Apache Ignite as a Distributed Database

Database Programming with PL/SQL

» Nakup in vzdrževanje Oracle programske opreme «Tehnične specifikacije

formati slike in branje slike pomen in nekaj primerov EM spekter aplikacije v posameznih delih spektra o matriki slike

Lab # 3 Hands-On. DML Basic SQL Statements Institute of Computer Science, University of Tartu, Estonia

Delavnica za konfiguriranje dostopovnih točk WEB konfiguracija LANCOM L-54

Primerjava in analiza učinkovitosti podatkovnih baz DB2 in MySQL

ŠOLSKI CENTER VELENJE POKLICNA IN TEHNIŠKA ELEKTRO IN RAČUNALNIŠKA ŠOLA KNJIŽNICA. seminarska naloga. Alenka Močilnik

Integracija povpraševanj nerelacijskih podatkovnih baz in doseganje visoke razpoložljivosti v računalniškem oblaku

MySQL 4 Certification Study Guide Addendum. Addendum to MySQL Certification Study Guide (ISBN )

Uporabniški priročnik

Delo z grafi v relacijskih in sodobnih nerelacijskih podatkovnih bazah

Kako naj se naučim PHP?

Učinkovito preiskovanje polnotekstovnih podatkov v splošnonamenskih podatkovnih sistemih

Ljubljana,

Delavnica za konfiguriranje dostopovnih točk Konfiguracija LANCOM L-54 z uporabo orodja LANConfig

PODATKOVNE BAZE NOSQL

VRIJEDNOSTI ATRIBUTA

A Generic Timing Receiver for Event-Driven Timing Systems

The Blackhole and Federated Storage Engines: The Coolest Kids on the Block

MySQL. Prof.Sushila Aghav

Prometno načrtovanje xdsl

Unsupervised learning of scene and object planar parts

Naloge za 1. skupino

Mastersoft MPX Professional 7 Najpogosteje zastavljena vprašanja in odgovori

ONE-DIMENSIONAL CUTTING STOCK OPTIMIZATION: THE CASE OF A LOW RATIO BETWEEN STOCK AND ORDER LENGTHS MIRO GRADIŠAR

Državni izpitni center *M * SPOMLADANSKI ROK RAČUNALNIŠTVO NAVODILA ZA OCENJEVANJE. Sobota, 9. junij 2007 SPLOŠNA MATURA

Importing and Exporting Data Between Hadoop and MySQL

Uporaba strežnika SharePoint za vodenje poteka dela pri izvajanju kompleksnih projektov

Vzpostavitev spletnega vmesnika za prikaz tenziomiografskih meritev

PRENOVA SPLETNIH STRANI RADIA KRANJ

PRIMERJAVA HITROSTI DELOVANJA SISTEMOV ZA UPRAVLJANJE PODATKOVNIH BAZ

Osnove programskega jezika C

CSC Web Programming. Introduction to SQL

Razširljiv nadzor velikih oblačnih sistemov

COMP 244 DATABASE CONCEPTS & APPLICATIONS

RAZVOJ GENERATORJA POSLOVNIH SPLETNIH APLIKACIJ

An Adaptive-Parity Error-Resilient LZ'77 Compression Algorithm. Na napake odporen zgoščevalni algoritem LZ 77 s prilagodljivo pariteto

Staš Kopina. ADMINISTRACIJA PODATKOVNE BAZE MySQL. Diplomsko delo

Programiranje Programski jezik C. Sadržaj. Datoteke. prof.dr.sc. Ivo Ipšić 2009/2010

Uvod v programiranje v zbirnem jeziku

Databases II: Microsoft Access

Databases and SQL. Lecture outline. CSE 190 M (Web Programming) Spring 2008 University of Washington

Microsoft Exam

Primerjava relacijskih, NoSQL in NewSQL podatkovnih baz

Review. Objec,ves. Example Students Table. Database Overview 3/8/17. PostgreSQL DB Elas,csearch. Databases

Relational databases and SQL

SPLETNA REŠITEV ZA POTREBE DRUŠTVA UPOKOJENCEV

MySQL Query Tuning 101. Sveta Smirnova, Alexander Rubin April, 16, 2015

ABBYY rešitve za prepoznavo in klasifikacijo dokumentov

Transcription:

Računalništvo Strukturirani poizvedovalni jezik SQL Danijel Skočaj, Evelin Vatovec Krmac Univerza v Ljubljani Fakulteta za pomorstvo in promet Literatura: Evelin Vatovec Krmac, Računalništvo in informatika, pogl. 5 Računalništvo

SQL Structured Query Language Strukturiran poizvedovalni jezik za delo s podatkovnimi bazami Daleč najbolj razširjen poizvedovalni jezik Uporablja se praktično v vseh SUPB MS Access, DB2 Informix MS SQL Server Oracle, Sybase MySQL Uporabnik pove KAJ želi in ne kako naj se poizvedba izvede Za ad hoc poizvedovanja in poročila, ki niso v naprej predvidena SUPB ukaze interpretira, prevede logično sklicevanje na fizično izvedbo ukaza, ki vrne iskane podatke Računalništvo, Strukturirani poizvedovalni jezik SQL 2

Ukazi jezika SQL Ukaze jezika SQL delimo na dve skupini: Ukazi za poizvedbo in povpraševanje SELECT Ukazi za obdelavo podatkov: DELETE (brisanje) INSERT INTO (vstavljanje) UPDATE (spreminjanje vrednosti) Ukazi za rokovanje s podatki CREATE TABLE (ustvarjanje tabele) ALTER TABLE (spreminjanje tabele) DROP TABLE (brisanje tabele) CREATE INDEX (kreiranje indeksov) DROP INDEX (brisanje indeksov) Ukazi za delo s tabelami Računalništvo, Strukturirani poizvedovalni jezik SQL 3

MySQL SUPB MySQL Najbolj popularen odprtokodni sistem za upravljanje s podatkovnimi bazami http://dev.mysql.com/downloads/ Potrebujete: MySQL Community Server (MySQL 5.1 ali 5.5) MySQL Workbench (prej MySQL QueryBrowser) Deluje na principu odjemalec-strežnik MySQL server kot Windows servis Zaženemo odjemalca z grafičnim uporabniškim vmesnikom MySQL Workbench (ali MySQL QueryBrowser) Dostopamo do baze podatkov Delamo poizvedbe Računalništvo, Strukturirani poizvedovalni jezik SQL 4

Primer Podatkovna baza student Vsebuje tabele City tabela svetovnih mest Country tabela dežel sveta CountryLanguage tabela jezikov posameznih držav Računalništvo, Strukturirani poizvedovalni jezik SQL 5

Primeri City Country Računalništvo, Strukturirani poizvedovalni jezik SQL 6

Primeri CountryLanguage Računalništvo, Strukturirani poizvedovalni jezik SQL 7

Ukazi za delo s tabelami CREATE TABLE ustvari novo tabelo v podatkovni bazi CREATE TABLE ime_tabele { polje1 tip vrednost izbira, polje2 tip vrednost izbira, polje3 tip vrednost izbira, }; tip je lahko int celo število char niz date datum time čas currency denarna valuta, itn. vrednost je lahko null ali not null izbira je lahko auto_increment ali default Računalništvo, Strukturirani poizvedovalni jezik SQL 8

Ukazi za delo s tabelami SHOW TABLES prikaže vse tabele, ki so shranjene v podatkovni bazi SHOW TABLES ime_podatkovne_baze; DESCRIBE prikaže zgradbo posamezne tabele DESCRIBE ime_tabele; DROP TABLE brisanje tabele DROP TABLE ime_tabele; Računalništvo, Strukturirani poizvedovalni jezik SQL 9

Ukazi za delo s tabelami ALTER TABLE spreminjanje tabele: Dodajanje novega polja: ALTER TABLE ime_tabele ADD ime_polja tip_polja; Brisanje obstoječega polja: ALTER TABLE ime_tabele DROP ime_polja; Preimenovanje polja ALTER TABLE ime_tabele CHANGE staro_ime novo_ime lastnosti; Računalništvo, Strukturirani poizvedovalni jezik SQL 10

Ukazi za delo s tabelami Delo z indeksi Omogočajo hitrejše razvrščanje in iskanje po določenih poljih Dodelimo jih poljih po katerih pogosto iščemo ali jih uporabljamo za povezavo z drugimi tabelami Pohitrijo iskanje, upočasnijo dodajanje in brisanje CRATE INDEX kreiranje indeksa CREATE INDEX ime_indeksa ON ime_tabele (polje1, polje2 ); DROP INDEX - brisanje indeksa DROP INDEX ime_indeksa ON ime_tabele Računalništvo, Strukturirani poizvedovalni jezik SQL 11

Ukazi za delo s tabelami Tabelo lahko indeksiramo tudi med kreiranjem: CREATE TABLE ime_tabele { polje1 tip vrednost izbira, polje2 tip vrednost izbira, polje3 tip vrednost izbira, INDEX ime_indeksa(polje) }; Med kreiranjem tabele lahko tudi povemo katero polje (polja) je glavni ključ (za povezave med tabelami) CREATE TABLE ime_tabele { polje1 tip vrednost izbira, polje2 tip vrednost izbira, polje3 tip vrednost izbira, PRIMARY KEY (polje) }; Računalništvo, Strukturirani poizvedovalni jezik SQL 12

Primer CREATE TABLE `City` { `ID` int(11) NOT NULL auto_increment, `Name` char(35) NOT NULL default '', `CountryCode` char(3) NOT NULL default '', `District` char(20) NOT NULL default '', `Population` int(11) NOT NULL default '0', PRIMARY KEY (`ID`) } Računalništvo, Strukturirani poizvedovalni jezik SQL 13

Ukazi za obdelavo podatkov INSERT INTO vstavljanje zapisa v tabelo INSERT INTO ime_tabele (stolpec1, stolpec2 ) VALUES (vrednost1, vrednost2 ); DELETE brisanje poljubnih podatkov iz izbranih zapisov DELETE FROM ime_tabele WHERE pogoj; UPDATE spreminjanje vrednosti zapisov UPDATE ime_tabele SET stolpec1=nova_vrednost1 stolpec2=nova_vrednost2 WHERE pogoj Računalništvo, Strukturirani poizvedovalni jezik SQL 14

Ukazi za obdelavo podatkov INSERT INTO `City` VALUES (1,'Kabul','AFG','Kabol',1780000); INSERT INTO `City` VALUES (2,'Qandahar','AFG','Qandahar',237500); INSERT INTO `City` VALUES (3,'Herat','AFG','Herat',186800); INSERT INTO `City` VALUES (4,'Mazar-e-Sharif','AFG','Balkh',127800); INSERT INTO `City` VALUES (5,'Amsterdam','NLD','Noord-Holland',731200); INSERT INTO `City` VALUES (6,'Rotterdam','NLD','Zuid-Holland',593321); INSERT INTO `City` VALUES (7,'Haag','NLD','Zuid-Holland',440900); INSERT INTO `City` VALUES (8,'Utrecht','NLD','Utrecht',234323); INSERT INTO `City` VALUES (9,'Eindhoven','NLD','Noord-Brabant',201843); Računalništvo, Strukturirani poizvedovalni jezik SQL 15

Ukaz SELECT Ukaz SELECT prikaže v obliki tabele podatke(iz stolpcev, ki jih navedemo), ki ustrezajo podani zahtevi SELECT polje1, polje2 FROM ime_tabele WHERE pogoji Izpiše podatke iz polj polje1, polje2, itn. iz tabele ime_tabele, ki ustrezajo pogojem pogoji. Računalništvo, Strukturirani poizvedovalni jezik SQL 16

Ukaz SELECT Prikaz vseh podatkov tabele SELECT * FROM ime_tabele; polje1 polje2 polje3 polje4 Prikaz vseh podatkov poljubnega polja SELECT polje3 FROM ime_tabele; polje1 polje2 polje3 polje4 Prikaz polj v poljubnem vrstnem redu: SELECT polje4, polje1, polje2 FROM ime_tabele; polje4 polje1 polje2 Stolpce lahko združimo in preimenujemo: SELECT CONCAT(polje1,, polje2) AS novo_ime_polja FROM ime_tabele; Prikaz novih vrednosti (uporaba matematičnih funkcij): SELECT polje1, polje2*1.2, polje1 FROM ime_tabele; Računalništvo, Strukturirani poizvedovalni jezik SQL 17

Primeri - prikaži vse podatke o vseh mestih SELECT * FROM City - prikaži ime ter število prebivalcev vsakega mesta SELECT Name, Population FROM City - prikaži oznako, ime in celino vsake države SELECT Code, Name, Continent FROM Country Računalništvo, Strukturirani poizvedovalni jezik SQL 18

Ukaz SELECT WHERE SELECT polje1, polje2 FROM ime_tabele WHERE pogoji... WHERE pogoj polje1 polje2 polje3 polje4 enostaven sestavljen ime_polja operator vrednost pogoj 1 operator pogoj 2... številska, =, <> ali!=, znakovna <, >,=<, >=, BETWEEN... AND, LIKE AND polje1 polje2 polje3 polje4 OR polje1 polje2 polje3 polje4 NOT pogoj polje1 polje2 Računalništvo, Strukturirani poizvedovalni jezik SQL 19

Operator LIKE Operator LIKE... WHERE ime_polja LIKE vrednost Določilo % - vsi, ki se začnejo na črko V:... LIKE 'V%' - vsi, ki se končajo s številom 6:... LIKE '%6' Določilo _ - vsi, ki imajo kot tretjo črko ž:... LIKE ' ž%' - vsi, ki imajo prvo črko a, tretjo pa n:... LIKE a_n%' - vsi, ki vsebujejo niz MEDVED:... LIKE '%MEDVED%' Računalništvo, Strukturirani poizvedovalni jezik SQL 20

Primeri - prikaži imena vseh mest, ki imajo 300.000 ali več prebivalcev SELECT Name FROM City WHERE Population >= 300000 - prikaži seznam imen držav, ki se začnejo na črko S SELECT Name FROM Country WHERE Name LIKE S% Računalništvo, Strukturirani poizvedovalni jezik SQL 21

Primeri - prikaži imena držav in število prebivalcev za tiste države, ki imajo v imenu drugo črko s SELECT Name, Population FROM Country WHERE Name LIKE _s% - poglej, ali je med mesti tudi Ljubljana in izpiši vse podatke za to mesto SELECT * FROM City WHERE Name = Ljubljana Računalništvo, Strukturirani poizvedovalni jezik SQL 22

Primeri - izpišimo vsa slovenska mesta (najprej poiščemo kodo Slovenije) SELECT Name, Code FROM Country WHERE Name = Slovenija SELECT Name FROM City WHERE CountryCode = SVN Računalništvo, Strukturirani poizvedovalni jezik SQL 23

Operator BETWEEN AND Operator BETWEEN AND... WHERE ime_polja BETWEEN vrednost1 AND vrednost2 vrednost1 vrednost2... WHERE ime_polja NOT BETWEEN vrednost1 AND vrednost2 vrednost1 vrednost2 Računalništvo, Strukturirani poizvedovalni jezik SQL 24

Primeri - izpiši vse podatke o državah, ki imajo število prebivalcev med 100000 in 200000 SELECT * FROM Country WHERE Population BETWEEN 100000 AND 200000 - izpiši imena vseh držav, ki se začenjajo s črkami od A do C SELECT Name FROM Country WHERE Name BETWEEN A% AND D% Računalništvo, Strukturirani poizvedovalni jezik SQL 25

Logični operatorji Logični operatorji AND (in), OR (ali) in NOT (ne) Sočasno iskanje rezultatov prek večjega števila pogojev AND vrne podatke, ki ustrezajo vsem pogojem polje1 polje2 polje3 polje4 OR vrne podatke, ki ustrezajo enemu od pogojev polje1 polje2 polje3 polje4 NOT zanika pogoj polje1 polje2 Prednostni vrstni red: AND, OR, NOT Računalništvo, Strukturirani poizvedovalni jezik SQL 26

Primeri - izpiši imena mest ter število njihovih prebivalcev, ki se začnejo na M in imajo več kot pol milijona prebivalcev SELECT Name, Population FROM City WHERE (Name LIKE M% ) AND (Population > 500000) - izpiši vse podatke o državah, ki so bodisi v Evropi bodisi v Afriki SELECT * FROM Country WHERE (Continent = Europe ) OR (Continent = Africa ) Računalništvo, Strukturirani poizvedovalni jezik SQL 27

Primeri - izpiši vse podatke o državah, ki so bodisi v Evropi bodisi v Afriki in imajo več kot 350000 prebivalcev SELECT * FROM Country WHERE ((Continent = Europe ) OR (Continent = Africa )) AND (Population > 350000) - izpišimo imena vseh evropskih držav, ki imajo število prebivalcev med pol in enim milijonom SELECT Name FROM Country WHERE (Continent = Europe ) AND (Population >= 500000) AND (Population =< 1000000) Računalništvo, Strukturirani poizvedovalni jezik SQL 28

Operator IN... ime_polja IN (vrednost1,..., vrednost n) SELECT ime_polja FROM ime_tabele WHERE ime_polja IN (vrednost1,..., vrednostn) polje1 polje2 polje3 polje4 3 0 1 2 SELECT polje3 FROM tabela WHERE polje3 IN (0,1,3) polje3 3 0 1 polje1 polje2 polje3 polje4 A B A C SELECT polje3 FROM tabela WHERE polje3 IN ( A, C ) polje3 A A C Računalništvo, Strukturirani poizvedovalni jezik SQL 29

Primeri - izpiši vse podatke o državah, ki so bodisi v Evropi bodisi v Afriki SELECT * FROM Country WHERE Continent IN ( Europe, Africa ) - izpiši imena vseh držav ter število njihovih prebivalcev, ki imajo 200000 ali 500000 prebivalcev Računalništvo, Strukturirani poizvedovalni jezik SQL 30

Operator ORDER BY Razvrščanje prikazanih podatkov... ORDER BY ime_polja ASC... ORDER BY ime_polja DESC (naraščajoče) (padajoče) SELECT ime_polja FROM ime_tabele ORDER BY ime_polja ali SELECT ime_polja FROM ime_tabele ORDER BY ime_polja ASC SELECT ime_polja FROM ime_tabele ORDER BY ime_polja DESC Računalništvo, Strukturirani poizvedovalni jezik SQL 31

Primer - prikaži podatke o imenih severnoameriških držav, ki imajo 400000 prebivalcev ali več, razvrščene po abecednem vrstnem redu od prve proti zadnji SELECT Name FROM Country WHERE Continent = North America AND Population >= 400000 ORDER BY Name Računalništvo, Strukturirani poizvedovalni jezik SQL 32

Primer - prikaži podatke o imenih severnoameriških držav, ki imajo 400000 prebivalcev ali več, razvrščene po abecednem vrstnem redu od zadnje proti prvi SELECT Name FROM Country WHERE Continent = North America AND Population >= 400000 ORDER BY Name DESC Računalništvo, Strukturirani poizvedovalni jezik SQL 33

Funkcije jezika SQL različne vrednosti posameznih stolpcev združimo v en sam zapis SELECT funkcija(stolpec)from ime_tabele AVG COUNT MAX MIN SUM vrne povprečno vrednost poljubnega stolpca vrne število vseh zapisov oziroma vrstic v poljubnem stolpcu vrne največjo vrednost podatka v izbranem stolpcu vrne najmanjšo vrednost podatka v izbranem stolpcu vrne vsoto vseh števil v izbranem stolpcu Računalništvo, Strukturirani poizvedovalni jezik SQL 34

Primeri - izračunaj povprečno število prebivalcev v vseh evropskih državah SELECT AVG(Population) FROM Country WHERE Continent = Europe - seštej število prebivalcev mest, ki se začnejo z besedo New SELECT SUM(Population) FROM City WHERE Name LIKE New% Računalništvo, Strukturirani poizvedovalni jezik SQL 35

Primeri -preštej, koliko je v tabeli afriških držav, ki imajo število prebivalcev pod milijonom SELECT COUNT(Population) FROM Country WHERE Continent = Africa AND Population < 1000000 - izpiši najmanjše število prebivalcev SELECT MIN(Population) FROM City - izpiši največje število prebivalcev SELECT MAX(Population) FROM City Računalništvo, Strukturirani poizvedovalni jezik SQL 36

Povezovanje tabel Združujemo podatke iz večjega števila tabel Delamo poizvedbe z uprabo podatkov iz večjega števila tabel hkrati Tabele povezujemo prek ključev Glavni ključ ene tabele povežemo z zunanjim ključem druge tabele Uporabljamo operator pika za določitev na katero tabelo se nanaša neko polje SELECT ime_tabele1.ime_polja1, ime_polja2 FROM ime_tabele1, ime_tabele2 WHERE ime_tabele1.ime_polja1 operator ime_tabele2.ime_polja2; Računalništvo, Strukturirani poizvedovalni jezik SQL 37

Primer - izpišimo seznam imen mest posameznih držav SELECT City.Name, Country.Name FROM City, Country WHERE City.CountryCode = Country.Code Računalništvo, Strukturirani poizvedovalni jezik SQL 38