SQLの考え方

SELECT * WHERE a=b FROM c” “SELECT WHERE a=b FROM c ON *” ?

, : SQL — , ( -!), - , .


, , , . :


SELECT members.firstname || ' ' || members.lastname
AS "Full Name"
FROM borrowings
INNER JOIN members
ON members.memberid=borrowings.memberid
INNER JOIN books
ON books.bookid=borrowings.bookid
WHERE borrowings.bookid IN (SELECT bookid
  FROM books
  WHERE stock>(SELECT avg(stock)
    FROM books))
GROUP BY members.firstname, members.lastname;

! , , SQL . .


, , SQL , - SQL.


, SQL , PostgreSQL. MySQL .


1.


SQL , SELECT, FROM WHERE . , , , , .


2.


, :





( )


. .



3.


: (id) , “Dan Brown”


:


SELECT bookid AS "id", title
FROM books
WHERE author='Dan Brown';

:


idtitle
2The Lost Symbol
4Inferno

. , .


3.1 FROM —


, FROM , .


FROM , . ( ), , .


3.2 WHERE —


WHERE - , . , author — “Dan Brown”.


3.3 SELECT —


, , , . , SELECT. AS.


:



4. ()


( ) , , :


SELECT books.title AS "Title", borrowings.returndate AS "Return Date"
FROM borrowings JOIN books ON borrowings.bookid=books.bookid
WHERE books.author='Dan Brown';

:


TitleReturn Date
The Lost Symbol2016-03-23 00:00:00
Inferno2016-04-13 00:00:00
The Lost Symbol2016-04-19 00:00:00

FROM. , . “books”, “borrowings”. , .


borrowings JOIN books ON borrowings.bookid=books.bookid — , , , "books" "borrowings", bookid . :



, . , , . , « » 3.


.


, “Dan Brown”.


:


Step 1 — ? , “member” “books” “borrowings”. JOIN :


borrowings
JOIN books ON borrowings.bookid=books.bookid
JOIN members ON members.memberid=borrowings.memberid

.


2 — ? , — “Dan Brown”


WHERE books.author='Dan Brown'

3 — ? , , , :


SELECT
members.firstname AS "First Name",
members.lastname AS "Last Name"

! :


SELECT
members.firstname AS "First Name",
members.lastname AS "Last Name"
FROM borrowings
JOIN books ON borrowings.bookid=books.bookid
JOIN members ON members.memberid=borrowings.memberid
WHERE books.author='Dan Brown';

:


First NameLast Name
MikeWillis
EllenHorton
EllenHorton

! ( ). .


5.


, . , .


, . , Ellen Horton , . :


SELECT
members.firstname AS "First Name",
members.lastname AS "Last Name",
count(*) AS "Number of books borrowed"
FROM borrowings
JOIN books ON borrowings.bookid=books.bookid
JOIN members ON members.memberid=borrowings.memberid
WHERE books.author='Dan Brown'
GROUP BY members.firstname, members.lastname;

:


First NameLast NameNumber of books borrowed
MikeWillis1
EllenHorton2

GROUP BY. , , . ( ) , GROUP BY. . count, ( ). .


.



, GROUP BY, . , SELECT', , .


count ( ). sum max . , , , :


SELECT author, sum(stock)
FROM books
GROUP BY author;

:


authorsum
Robin Sharma4
Dan Brown6
John Green3
Amish Tripathi2

sum stock .


6.



SQL-, . .


6.1


, . . , , . , , “Robin Sharma”, — :


SELECT *
FROM (
  SELECT author, sum(stock)
  FROM books
  GROUP BY author
) AS results
WHERE author='Robin Sharma';

:


authorsum
Robin Sharma4

6.2


, , , .


, , , . :


1. 3. :


SELECT author
FROM (
 SELECT author, sum(stock)
 FROM books
 GROUP BY author
) AS results
WHERE sum > 3;

:


author
Robin Sharma
Dan Brown

: ['Robin Sharma', 'Dan Brown']


2. :


SELECT title, bookid
FROM books
WHERE author IN (
  SELECT author
  FROM (
    SELECT author, sum(stock)
    FROM books
    GROUP BY author
  ) AS results
  WHERE sum > 3);

:


titlebookid
The Lost Symbol2
Who Will Cry When You Die?3
Inferno4

, :


SELECT title, bookid
FROM books
WHERE author IN ('Robin Sharma', 'Dan Brown');

6.3


, . , , , , . , .


, , , .


:


select avg(stock) from books;

:


avg
3.000

3.


, , :


SELECT *
FROM books
WHERE stock>(SELECT avg(stock) FROM books);

, :


SELECT *
FROM books
WHERE stock>3.000

:


bookidtitleauthorpublishedstock
3Who Will Cry When You Die?Robin Sharma2006-06-15 00:00:004

7.


, .


7.1 Update


UPDATE . , SELECT', SET'.


, . :


UPDATE books
SET stock=0
WHERE author='Dan Brown';

WHERE , : . SELECT, , SET. , , .


img


7.2 Delete


DELETE SELECT UPDATE . . SELECT UPDATE, WHERE : , . , . , , , :


DELETE FROM books
WHERE author='Dan Brown';

7.3 Insert


, , , INSERT. :


INSERT INTO x
  (a,b,c)
VALUES
  (x, y, z);

a, b, c , x, y z , , . , , .


. INSERT, "books":


INSERT INTO books
  (bookid,title,author,published,stock)
VALUES
  (1,'Scion of Ikshvaku','Amish Tripathi','06-22-2015',2),
  (2,'The Lost Symbol','Dan Brown','07-22-2010',3),
  (3,'Who Will Cry When You Die?','Robin Sharma','06-15-2006',4),
  (4,'Inferno','Dan Brown','05-05-2014',3),
  (5,'The Fault in our Stars','John Green','01-03-2015',3);

8.


, . . ? SELECT, FROM, WHERE, GROUP BY, .


:


SELECT members.firstname || ' ' || members.lastname AS "Full Name"

FROM borrowings
INNER JOIN members
ON members.memberid=borrowings.memberid
INNER JOIN books
ON books.bookid=borrowings.bookid

WHERE borrowings.bookid IN (SELECT bookid FROM books WHERE stock>  (SELECT avg(stock) FROM books)  )

GROUP BY members.firstname, members.lastname;

, , .


:


Full Name
Lida Tyler

, . , , .



Source: https://habr.com/ru/post/J305926/


All Articles