DML select . select . :
select *
from < >
,
select * (1)
from student
, - student. , . , , , , .
7 student :
1_ | f_ name | m_ | r | gr_ nomer |
010001 | 11 | |||
010002 | 11 | |||
011005 | 12 | |||
011003 | 12 | |||
011004 | 12 | |||
011101 | 13 |
(1) .
. :
select < >
from < >
8 , , :
select nomer, l_nate
from student
, , , select. To :
r | 1_ |
011004 | |
010001 | |
011005 | |
011001 | |
010002 | |
011003 |
. as .
9 ,
select nomer, l_name as last_name
from student
student me , last_name:
nomer | last_name name |
011004 | |
010001 | |
011005 | |
011001 | |
010002 | |
011003 |
select .
10 ,
select ' ' + f_name + l_name as full_name from student
full_ name |
, as.
8 () SQL-, , (. 3), ,
.. |
.. |
|
|
, . , select , ( ). order by:
Select...
From...
order by < >
( ), : ASC - , DESC - . , . , , - ..
11 , , :
select nomer,
1 _ from student
order by nomer
,
nomer | l_ name |
010001 | |
010002 | |
011003 | |
011004 | |
011005 | |
011101 |
, , :
select l _ name, f _ name, m _ name
from student
order by l _ name desc, f _ name desc, m _ name desc
9 () ,
1. ;
2. , - .
10 (CD) - (. 5) , .
- , . - . , , , , , .
12 ,
select l name
from student
'' ''
l_ |
student , , - , , .
distinct, select:
select distinct...
from...
[order by...]
.
13 , , , , , :
select distinct l _ name
from student
order by l _ name
l_ name |
C |
11 () , , .
12 () , , .
13 (CD) - - .
|
|
14 () , , .
, where:
select...
from...
where <>
[order by... ]
: TRUE (), FALSE () UNKNOWN (). , , .
. and, or not :
and | T | U | F | or | T | U | F | not | |||
T | T | U | F | T | T | T | T | T | F | ||
U | U | U | F | U | T | U | U | U | U | ||
F | F | F | F | F | T | U | F | F | T |
(like, in, between) not , , . ,
not (a like b)
a not like b
not (a in (...))
a not in (...)
(=), (<>), (<, >, <=, >=). NULL, UNKNOWN ( ). .
14 , , 'ђ :
select *
from student
where l_name >= ' and l_name < 'T'
order by nomer
I name | f name | gr nomer | ||
011003 | 12 | |||
011004 | 12 | |||
011101 | 13 |
15 12 , :
select *
from student
where gr _ nomer = 12
, | 011005 | 12 | ||
011003 | 12 | |||
011004 | 12 |
16 , '011000' '011099', :
select *
from student
where nomer >= '011000' and nomer <= '011099'
order by nomer
15 () , 100.
16 () , .
17 () , 2003 1000000.
18 () , , 2002 .
19 () , .
20 (CD) , , .
( '011000' '011099') between... and:
|<> between <1> and <2>
17
select *
from student
where nomer between '011000' and '011099' order
by nomer
, 16.
21 () between , 10000 100000.
in:
|<> in (< >)
, .
18 , 11 13 , :
|
|
select *
from student
where gr_nomer in (11, 13)
order by nomer
22 (CD) , : , , , -, .
23 () - , , : , , , , , .
- like:
|<> like <>
, ('_'), ('%') ('[', ']') . , , :
' _' - ( ),
'%' - (, ) ,
, .
19 , , ', :
l_name like '%,'
, 'ђ, '' '', :
select *
from student
where l_name like >[]%
, :
select *
from student
where nomer like 1%
24 () , .
25 () , , , 20 50.
26 () , , @tversu.ru.
27 () , : 3, 5, 9.
28 (CD) , amore core 5 .
3.2 .
SQL . group by select:
select...
from...
[where... ]
group by < >
[order by...]
, . group by : , , . .
, select
select l_name...
group by l_name...
, l_name.
group by , select , . ,
select l_name, f_name
from student
group by l_name
, . , f _name '', ''.
, , : max , min , avg , sum - . . - count (*) - .
|
|
.
20
select gr_nomer, count(*) as gr_count
from student
group by gr_nomer
gr nomer | fr count |
11 | 2 |
12 | 3 |
13 | 1 |
, , : , .
21
select gr_nomer, min(nomer) as min_nomer,
max(nomer) as max_nomer
from student
group by gr _ nomer
gr nomer | min nomer | max nomer |
11 | 010001 | 010002 |
12 | 011003 | 011005 |
13 | 011101 | 011101 |
.
, , , , as.
22
select dis, avg(res) as res
from ball
group by dis
, ball :
stud nomer | dis | dat | form | res |
010001 | 04.01.2004 | 100 | ||
010001 | 08.01.2004 | 80 | ||
010001 | .01.2004 | 75 | ||
010002 | 04-01.2004 | 50 | ||
010002 | 08.01.20 04 | 10 | ||
010002 | .01.2004 | 80 | ||
011003 | 09.01.2004 | 30 | ||
011003 | 04.01.2004 | 10 | ||
011003 | i4.Ol.2OO4 | 90 | ||
0104 | 09.01.2004 | 60 | ||
0104 | 04-01.2004 | 60 | ||
0104 | .01.2004 | . | 10 | |
011005 | 09.01.2004 | 80 | ||
011005 | 04.01.2004 | 10 | ||
011005 | 14-01.2004 | 80 |
dis | res |
64 | |
10 | |
19 |
, , . , :
select dis, sum(res) / count(*) as res
from ball
group by dis
, , , : .
29 () .
30 () , .
31 () .
32 () .
33 () .
group by where . where, - .
23 , , , , :
select dis, avg(res) as res
from ball
where form='
group by dis
, form , res .
dis | res |
56,6666 | |
70 | |
77,5 |
- , . , where , ( form). , where .
34 () .
35 () , 1000 10000.
, group by select . , .
24 ,
select max(nomer) as max _ nomer
from student
_ r |
011101 |
, student.
|
|
25
select avg(res) as res
from ball where form = ''
:
res |
67 |
.
36 () .
37 () .
38 () .
, where . , , having:
select...
from...
[where...]
group by...
having <>
[order by... ]
having , having , , .
26 , ,, , -, 100,
select dis, avg(res)
from ball
group by dis
having max(res) = 100
:
dis | |
64 |
, , , .
27 , :
select gr_nomer, count(*) as cnt
from student
group by gr_nomer
order by count(*) DESC
gr nomer | cnt |
12 | 3 |
11 | 2 |
13 | 1 |
39 () , 1000. , , .
40 ()
, 100 200. .
41 () , , 10. .
42 () , , 10000. .
select .
, , ( ). , , . , .
. . .
.
: cross join :
[from < > cross join < >
|from < >, < >
28 ,
select *
from student cross join ball
select *
from student, ball
.
. . , student ball, . . where :
select...
from < >, < >
where < >
29
select *
from student, ball
where nomer = stud_nomer
inner join... on:
select...
from < > inner join < >
on < >
30 :
select *
from student inner join ball (2)
on nomer = stud_nomer
, . 1.
, . , . , nomer stud_nomer . , select , .
l _name | f_ name | m_name | nomer | gr_nomer | stud_nomer | dis | dat | form | res |
04.01.2004 | |||||||||
08.01.2004 | |||||||||
14.01.2004 | |||||||||
04.01.2004 | |||||||||
08.01.2004 | |||||||||
14.01.2004 | SO | ||||||||
09.01.2004 | |||||||||
04.01.2004 | |||||||||
14.01.2004 | |||||||||
09.01.2004 | |||||||||
04.01.2004 | |||||||||
14.01.2004 | |||||||||
09.01.2004 | |||||||||
04.01.2004 | |||||||||
14.01.2004 |
.1
31 , , , :
select student.*, dis, res
from student inner join ball
on nomer = stud_nomer
:
l_ name | f_name | m- | er | gr_ nomer | dis | res |
010001 | 11 | 100 | ||||
010001 | 11 | 80 | ||||
010001 | 11 | 75 | ||||
010002 | 11 | 50 | ||||
010002 | 11 | 70 | ||||
010002 | 11 | 80 | ||||
011005 | 12 | 80 | ||||
011005 | 12 | 70 | ||||
011005 | 12 | 80 | ||||
011003 | 12 | 30 | ||||
011003 | 12 | 70 | ||||
011003 | 12 | 90 | ||||
0U004 | 12 | 60 | ||||
004 | 12 | 60 | ||||
011004 | 12 | 70 |
|< >. *
, student.
43 () , , .
44 (CD) , - , , .
.
32 , , . :
select s1.nomer as first, s2. nomer as second
from student s1 inner join student s2
on s1.gr_nomer = s2.gr_nomer
student , gr_nomer . :
first | second |
010002 | 010001 |
010001 | 010001 |
010002 | 010002 |
010001 | 010002 |
011004 | 011005 |
011003 | 011005 |
011005 | 011005 |
011004 | 011003 |
011003 | 011003 |
011005 | 011003 |
011004 | 011004 |
011003 | 011004 |
011101 | 011101 |
011005 | 011004 |
( ) select: () :
|< > < >
select. si s2. , , , , , gr_nomer nomer. , , :
|< >. < >
, , . , , .
33 ball r stud_nomer, (2) :
select *
from student inner join ball
on student.nomer = ball.nomer
45 (CD) , , .
32. , , - - .
34 , , :
select s1. nomer as first, s2. nomer as second
from student s1 inner join student s2
on s1. gr_nomer = s2. gr_nomer
where s1.nomer < s2.nomer
:
first | second |
010001 | 010002 |
011003 | 011004 |
011003 | 011005 |
011004 | 011005 |
46 (CD) 45.
47 () , , ( ) .
48 () , , .
49 (CD) , -, .
50 () , 50.
, :
< > inner join < >
on <>
inner join < >
on <>...
35 , professor :
dis name | gr | prof |
11 | ||
11 | ||
11 | ||
12 | ||
12 | ||
12 | ||
11 | ||
12 |
, , :
select nomer, prof
from student inner join ball (3)
on nomer = stud_nomer
inner join professor
on dis = dis_name and gr_nomer gr
nomer | prof |
010001 | |
010001 | |
010001 | |
010002 | |
010002 | |
010002 | |
011005 | |
011005 | |
011005 | |
011003 | |
011003 | |
011003 | |
011004 | |
011004 | |
011004 |
, :
select nomer, prof
from student, ball, professor (4)
where nomer = stud_nomer and
dis = dis_name and gr_nomer = gr
, , . :
select nomer, prof
from student inner join
ball inner join professor on dis = dis_name
on nomer = stud_nomer and gr_nomer = gr
, ball professor, student. (3) , : student ball, professor. (4) ().
51 () , .
52 () , .
53 () , ' , .
54 () , , .
55 () , , .
56 () , , .
, , . , , : .
, - . .
, . :
< > left outer join < >
on <>
< > right outer join < >
on <>
< > full outer join < >
on <>
, - , - .
, . - , , , . , , NULL, .
36 , , :
select prof, avg(res)
from professor left outer join
(ball inner join student
on nomer = stud_nomer)
on dis_name=dis and gr_nomer = gr
group by prof
: professor, , ball student. :
prof | |
80 | |
11 | |
15 | |
64 | |
NULL | |
66 |
NULL NULL, , avg NULL, NULL .
57 () , 01.01.2004-01.02.2004-
58 () , ( , ) 01.01.2004-01.02.2004-
, NULL,
|is null
37 , , :
select dis_name, gr, prof
from professor left outer join
(ball inner join student
on nomer = stud_nomer)
on dis_name=dis and gr_nomer = gr
where res is null
res NULL , ball.
dis name | gr | prof |
11 | ||
12 |
59 () , 01.01.2000 01.01.2005 .
60 () , , 2000 .
61 () , , , , .
, .
38 , , :
b | ||||
a1 | b1 | b2 | c1 | 2 |
1 | 1 | 11 | 1 | 12 |
a left outer join b on a1 =b1
left outer join on a1 = c1 and b2 = c2
a1 | b1 | b2 | c1 | c2 |
1 | 1 | 11 | NULL | NULL |
:
a left outer join
left outer join on 2 = c2 on al = cl and al =
:
al | 2 | cl | c2 | |
1 | NULL | NULL | NULL | NULL |
, , .
, , NULL , . .
3.4 .
SQL ( ). where having:
(exists(<SQL-3anpoc>)
, , SQL- , , . :
<> < > any (<SQL-3anpoc>)
<> < > all
(<SQL-3anpoc>)
SQL- , . , , . , , , . , . .
39 , :
select l_name, gr_nomer, nomer, dis, res from student inner join ball
on nomer = stud_nomer where res = all(select max(res) from ball)
l_ name | gr nomer | nomer | dis | res |
11 | 010001 | 100 |
. .
40 , , , :
select l_name, gr_nomer, nomer, dis, res from student inner join ball on nomer = stud_nomer where res = all(select max(res) from ball b where ball.dis = b.dis)
I name | gr nomer | nomer | dis | res |
12 | 011003 | 90 | ||
11 | 010001 | 80 | ||
11 | 010001 | 100 |
dis ball . , . ball , , , , dis.
41 , :
select l_name, gr_nomer, nomer, dis, res from student inner join ball
on nomer = stud_nomer where res > any(select min(res) from ball b where ball.dis = b.dis)
I name | gr nomer | nomer | dis | res |
11 | 010002 | 50 | ||
12 | 011004 | 60 | ||
12 | 011005 | 80 | ||
11 | 010001 | 100 | ||
11 | 010002 | 70 | ||
12 | 011003 | 70 | ||
12 | 011005 | 70 | ||
11 | 010001 | 80 | ||
11 | 010001 | 75 | ||
11 | 010002 | 80 | ||
12 | 011005 | 80 | ||
12 | 011003 | 90 |
42 ^ exists:
on nomer = stud_nomer where not exists (select * from ball b where b.res > ball.res)
select * from student inner join ball
on nomer = stud_nomer where not exists(select * from ball b where ball.dis = b.dis and b.res > ball.res)
select * from student inner join ball
on nomer = stud_nomer where exists (select * from ball b where ball.dis = b.dis and b.res < ball.res)
62 () - exists: , ( ).
63 () - exists: , ( ).
64 () - exists: -, .
65 () - exists: , .
66 () - exists: , ( ) .
67 () , - exists: , .
68 () - exists: , . ( ) .
69 () - exists: , ( )