.


:




:

































 

 

 

 


.




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: , ( )





:


: 2017-03-18; !; : 861 |


:

:

,
==> ...

1564 - | 1517 -


© 2015-2024 lektsii.org - -

: 0.389 .