Anda di halaman 1dari 24

c  cc

c

Pada bagian pertama dari tutorial ini, Anda telah melihat beberapa pernyataan SQL yang Anda
butuhkan untuk mulai membangun database. Halaman ini memberikan review dari mereka dan
menambahkan beberapa lagi yang Anda belum melihat belum.

‡ SQL dibagi menjadi dua kategori utama: bahasa definisi data (DDL) dan bahasa manipulasi
data (DML). Kedua kategori ini berisi laporan yang jauh lebih dari yang kita dapat hadir di sini,
dan masing-masing pernyataan di bawah ini jauh lebih kompleks daripada yang kita tampilkan di
pendahuluan ini. Jika Anda ingin menguasai materi ini, kami sangat menyarankan Anda mencari
referensi untuk perangkat lunak database SQL Anda sendiri sebagai suplemen untuk halaman ini.

     
Laporan DDL digunakan untuk membangun dan memodifikasi struktur tabel Anda dan objek
lain dalam database. Ketika Anda menjalankan sebuah pernyataan DDL, itu berlaku segera.

‡ membuat laporan yang tidak tepat tabel:

CREATE TABLE <table name> (


<attribute name 1> <data type 1>,
...
<attribute name n> <data type n>);

tipe data ini yang akan Anda gunakan paling sering adalah karakter string, yang mungkin disebut
VARCHAR atau CHAR untuk variabel atau string panjang tetap; tipe numerik seperti NOMOR
atau INTEGER, yang biasanya akan menentukan presisi dan DATE atau jenis terkait.

Tipe sintaks Data variabel dari sistem ke sistem; satu-satunya cara untuk memastikan adalah
untuk berkonsultasi dokumentasi untuk perangkat lunak Anda sendiri.

‡ Pernyataan yang mengubah tabel dapat digunakan seperti yang kamu lihat untuk menentukan
dasar dan asing kendala utama, serta untuk membuat modifikasi lain dengan struktur tabel.
Kunci kendala juga dapat ditentukan dalam pernyataan CREATE TABLE.

ALTER TABLE <table name>


ADD CONSTRAINT <constraint name> PRIMARY KEY (<attribute
list>);

Anda bisa menentukan nama kendala. Biasakanlah untuk mengikuti konvensi dari tablename_pk
(misalnya, Customers_pk), sehingga Anda dapat mengingat apa yang Anda lakukan nanti. Daftar
atribut berisi satu atau lebih atribut yang formulir ini PK; jika lebih dari satu, nama dipisahkan
oleh koma.
‡ Kendala kunci asing adalah sedikit lebih rumit, karena kita harus menentukan atribut kedua FK
di anak ini () meja, dan PK atribut yang mereka link ke dalam tabel induk.

ALTER TABLE <table name>


ADD CONSTRAINT <constraint name> FOREIGN KEY (<attribute
list>)
REFERENCES <parent table name> (<attribute list>);

Nama kendala dalam childtable_parenttable_fk bentuk (misalnya, Orders_Customers_fk). Jika


ada lebih dari satu atribut di FK, semuanya harus disertakan (dengan koma antara) di kedua
daftar atribut FK dan REFERENSI (tabel induk) daftar atribut.

Anda perlu definisi kunci terpisah asing untuk setiap hubungan di mana tabel ini adalah anak.

‡ Jika Anda benar-benar hal-hal yang mengacaukan dan ingin mulai dari awal, Anda selalu dapat
membuang objek apapun yang Anda buat dengan pernyataan drop. sintaks yang berbeda untuk
tabel dan kendala.

c  <table name>;

ALTER TABLE <table name>


c  
 
 <constraint name>;

Di sinilah kendala penamaan yang konsisten akan menolong, sehingga Anda hanya dapat
mengingat FK PK atau nama daripada mengingat sintaks untuk mencari nama-nama di meja lain.
Pernyataan DROP TABLE mendapat menyingkirkan kendala PK sendiri, tapi tidak akan bekerja
sampai Anda secara terpisah drop apapun kendala FK tabel anak (atau) yang mengacu pada satu
ini. Hal ini juga mendapat menghilangkan semua data yang terkandung di dalam tabel-dan
bahkan tidak menanyakan anda apakah anda benar-benar ingin melakukan ini!
‡ Semua informasi tentang obyek-obyek dalam skema Anda berisi, tidak mengherankan, dalam
satu set tabel yang disebut kamus data. Ada ratusan tabel ini sebagian besar sistem database,
tetapi semua itu akan memungkinkan Anda untuk melihat informasi tentang tabel sendiri, dalam
banyak kasus dengan antarmuka grafis. Bagaimana Anda melakukan hal ini sepenuhnya
tergantung pada sistem.

     
Laporan DML digunakan untuk bekerja dengan data dalam tabel. Ketika Anda tersambung ke
database yang paling multi-user (baik dalam sebuah program klien atau sambungan dari script
halaman Web), Anda sebenarnya bekerja dengan salinan pribadi dari meja Anda yang tidak
dapat dilihat oleh orang lain sampai Anda selesai (atau memberitahu sistem bahwa Anda sudah
selesai). Anda telah melihat pernyataan SELECT, melainkan dianggap sebagai bagian dari DML
meskipun hanya retreives data bukan modifikasi.

‡ Pernyataan insert digunakan, jelas, untuk menambahkan baris baru ke sebuah tabel.
INSERT INTO <table name>
VALUES (<value 1>, ... <value n>);

Daftar koma-delimited nilai-nilai harus sesuai dengan struktur tabel persis jumlah atribut dan tipe
data setiap atribut. Karakter jenis nilai-nilai selalu tertutup dalam tanda kutip tunggal, nilai-nilai
angka tidak pernah dalam tanda kutip; nilai tanggal sering (tetapi tidak selalu) dalam format
'yyyy-mm-dd' (misalnya, '2006-11-30 ').

Ya, Anda akan memerlukan sebuah pernyataan INSERT terpisah untuk setiap baris.
‡ Pernyataan update digunakan untuk mengubah nilai yang sudah ada di tabel.

UPDATE <table name>


SET <attribute> = <expression>
WHERE <condition>;

Ekspresi update dapat berupa sebuah konstanta, setiap nilai dihitung, atau bahkan hasil dari
perintah SELECT yang mengembalikan satu baris dan satu kolom. Jika klausa WHERE
dihilangkan, maka atribut tertentu diatur ke nilai yang sama dalam setiap baris tabel (yang
biasanya tidak apa yang ingin Anda lakukan). Anda juga dapat mengatur beberapa nilai atribut
pada saat yang sama dengan koma-delimited daftar atribut = pasangan ekspresi.

‡ The    statement does just that, for rows in a table.

DELETE FROM <table name>


WHERE <condition>;

Jika klausa WHERE dihilangkan, maka setiap baris tabel akan dihapus (yang lagi biasanya tidak
apa yang ingin Anda lakukan)-dan sekali lagi, Anda tidak akan mendapatkan "apakah Anda
benar-benar ingin melakukan ini" pesan?.

‡ Jika Anda menggunakan sistem multi-user yang besar, Anda mungkin perlu membuat
perubahan DML anda dapat dilihat oleh seluruh pengguna database. Meskipun ini mungkin
dilakukan secara otomatis saat Anda log out, Anda juga bisa cukup ketik:

COMMIT;

‡ Jika Anda telah mengacaukan perubahan dalam sistem semacam ini, dan ingin mengembalikan
salinan pribadi Anda dari database ke jalan itu sebelum Anda mulai (ini bekerja hanya jika Anda
belum mengetik COMMIT), ketik saja:

ROLLBACK;

Meskipun sistem single-user tidak mendukung komitmen dan pernyataan rollback, mereka
digunakan dalam sistem yang besar untuk mengontrol transaksi, yang merupakan urutan
perubahan ke database. Transaksi sering dibahas dalam kursus yang lebih maju.
°  

Jika Anda ingin orang lain dapat melihat atau memanipulasi data dalam tabel Anda, dan jika
sistem Anda izin ini, Anda harus secara eksplisit memberikan hak istimewa atau hak istimewa
yang sesuai (pilih, insert, update, atau menghapus) kepada mereka. Ini harus dilakukan untuk
meja masing-masing. Kasus yang paling umum di mana Anda akan menggunakan hibah ini
untuk tabel yang Anda ingin membuat tersedia untuk script yang berjalan pada server Web,
misalnya:

GRANT select, insert ON customers TO webuser;

      


  
c   

   


    
   
     



           

 
   

 
 

   
            
    
   
  



  c      
   
       !"

SELECT *
FROM customers
NATURAL JOIN orders;
Customers joined to Orders
               
Alvaro Monge 562-333-4141 2145 Main 90840 2003-07-14 Patrick
Wayne Dick 562-777-3030 1250 Bellflower 90840 2003-07-14 Patrick
Alvaro Monge 562-333-4141 2145 Main 90840 2003-07-18 Kathleen
Alvaro Monge 562-333-4141 2145 Main 90840 2003-07-20 Kathleen

U #$%$ & '#     


         



 
     
 
     


   
    
  (  


   ( 
  ) 
         


 
       *  
+
(  &
 
   
 

 *
         +
 
    
 
     
   
        
 
   
    
U, 
    
 
     
 

    
  
  -

 
                ,   
,  , 
  (     
        
   
  
-


( 
     
      ,
        
#   
U % $$!' ./0$.#0 
 
  
 

    $    


    
   
  
     $$!'./0$.#0   


$   
    
     
  
 


  1 
    

     
 (
 
     
  
2   (  
2         
         

        
  
     
   
 
  

Customers
           
Tom Jewett 714-555-1212 10200 Slater 92708
Alvaro Monge 562-333-4141 2145 Main 90840
Wayne Dick 562-777-3030 1250 Bellflower 90840
Orders
            
Alvaro Monge 562-333-4141 2003-07-14 Patrick
Wayne Dick 562-777-3030 2003-07-14 Patrick
Alvaro Monge 562-333-4141 2003-07-18 Kathleen
Alvaro Monge 562-333-4141 2003-07-20 Kathleen

U 
      
     
 ,
     
    ,  $     
  
 *  )   + 3 %
   ( 
 
      ( 
-  


  
   
  
  
       
     
     
 ,
   
 
 , $      
* )  +34  
    
 
 
 



     *   
 
)  +$    
 

   
    
    
 
  ,  ,  
  

 
, 3%
  ( 

 
   
   
 
 
U (  
    
 ,
   
   , %
  
 
  
 
 
     
  
 
 ,
  , 
1  
,
   

 
, 34 


  
    
 
   

U 
   

    
 
     ,        , 
c   
   
      
     
 


      

  
 , 
     
     
 ,        
   
, 
U &
  $      
       
   
        
  $  
    
  
            
 
  ( 
(  
#       $   





$*
  +    (          

 
 (
  

$ 
 
$    
 
  5  

š     
 
 š      
   
 
 $  
   
 
        
      
    &
 
   
  


  
  ß&   
 
 
   

  
        
     

          

U 6 
 $    

  
       
      
    
  


 *  +   
     
  
  
  
        
    5
   6 
   
   
  
   
(      
   
U,         
 
    
      
*
 ß7* ++   
 
 
  
 



 

   
  
       
  
               

 
  c   
  

     2 
  
       
    
    
   $  

 ,2 

(  

  $
8    ( 
        

2  & '#
U $    


 5
 
 
  
  
  
   
     
    
  
    

 (
        


 "            
    
$    
    
  (
 $  


 
   
  
     $      

 
 
  
     $  

    
    

  
         
  
    
$   

2 " 1
            1 


      
    

     
U 1 
 $   
      (       
 
 
           
  ,1 1* 
 
 + $    
  
 

  
 
  
 $    1 
   
 



 




 
   



U 
  
 
   
 (
   $     

 
         "
9 #   
#   :
#  #  7 ;$5 ;    #  !  7
;*   
  
 +
U'  
  
    
 
 ,$    



< < 
    ( 

 
   
  //2%1 


 
    <  <     
      ,  (  


  

       =6// $         
 


      
//2% 
$   
     $    (    $  

 
U1
 (                !   


                

  ,          ,
*$   
       ,    ,       
  


 

+
U 2   
   

   

         <

   ,11<  

( (  
$       
 
 $   
&
  $    
    

      
   
 

 $    
   
  
 
  
( ,
 *( 2'c(   
 

  
+  
    'c    (
  
        
  
, 
   
   ( 
  
    
   
 

  
 
 c  
  
               
       
    $   
    
> 
   
  *        +1 
 
     
   
   
 


           

SELECT *
FROM customers
NATURAL JOIN orders
NATURAL JOIN orderlines
NATURAL JOIN products;
‡ sistem database Anda mungkin tidak mendukung sintaks yang ALAMI BERGABUNG kami
tunjukkan di sini. Kita akan membahas masalah ini lebih lanjut ketika kita melihat bergabung
jenis. Alam beberapa bergabung dalam pekerjaan contoh kita benar karena ada non-pk/fk ada
atribut dalam tabel kita yang memiliki nama yang sama. Dalam lebih besar, database lebih rumit,
ini tidak mungkin benar.
2. Pilih baris yang Anda inginkan, dan pastikan bahwa semua informasi yang masuk akal dan
benar-benar apa yang Anda cari. (Yang satu ini masih terlalu lebar untuk halaman.)
Sumbangkan terjemahan yang lebih baik
SELECT *
FROM customers
NATURAL JOIN orders
NATURAL JOIN orderlines
NATURAL JOIN products
WHERE cFirstName = 'Alvaro' AND cLastName = 'Monge';

    



    $  

     
 
 
   
 , 
 
   
       

 
5  
       //2%     
 
  

     (     

SELECT cFirstName, cLastName, prodName


FROM customers
NATURAL JOIN orders
NATURAL JOIN orderlines
NATURAL JOIN products
WHERE cFirstName = 'Alvaro' AND cLastName = 'Monge';
Products purchased
       
Alvaro Monge Hammer, framing, 20 oz.
Alvaro Monge Hammer, framing, 20 oz.
Alvaro Monge Screwdriver, Phillips #2, 6 inch
Alvaro Monge Screwdriver, Phillips #2, 6 inch
Alvaro Monge Pliers, needle-nose, 4 inch

1    
    
 ?1 
  

       

5
    

 


    
        
  
  
 $      3
U &
  5
 $  
  
  
       
    
  
    
 

     
     
    
         
    



 
      (      
 

  
  
   $   
  
 


U
 (       $    
        //2%
   
   
 


  
 
-

   

  

     =6//
U !              //2%    
    
      
 

  
    
 
      
     
    

   

 

 ( 
 
  
   
    
 
  
          
  
 
  //2%!
   5



 
(        
    ( 

SELECT DISTINCT cFirstName, cLastName, prodName


FROM customers
NATURAL JOIN orders
NATURAL JOIN orderlines
NATURAL JOIN products
WHERE cFirstName = 'Alvaro' AND cLastName = 'Monge'
ORDER BY prodName;
Distinct products
       
Alvaro Monge Hammer, framing, 20 oz.
Alvaro Monge Pliers, needle-nose, 4 inch
Alvaro Monge Screwdriver, Phillips #2, 6 inch

U       


   $  
 


  
  
  
          
     %  (    


     
 (  $   
  
      ( 
  &
   

//2%
   
   c$'* 
+    
  

  
    
    
  

 "    (

'    
     $   
 ( 

    
   
    
        
           
    

   
 '   (
 
 


     
  


    
 
       
  * 
  +
6 

(     
     
 
 
 
    


SELECT cFirstName, cLastName, orderDate


FROM customers NATURAL JOIN orders;

U&

  
       
  $    &
   

   )     


                  
  (    
   
 
   
     
   
 

  
(
  6 
 

     ?!   

 
   

  

   
     
     
 
      $          
 

 
 

  (   
  
U     
 
     
   
      *    
      
+
     
c 
 

$         
  
   !/#00#$1$# *.     
       !/#00#$1$#


   +

(   
     
   
   
 
 

 & '#$$!'   !/#00#$1$#
 
  


SELECT cFirstName, cLastName, orderDate


FROM customers INNER JOIN orders
USING (custID);
U4  
  
  *  
  +
      
  
  #     !/#00#$1$#6 

   $     


    
          
  
     

 *
  
  + 6 

 (      $        * 
   +  
       
     (           

         
 '
       
      
  $  
    
               
      
(  
 $         

 
     )           >@@A    (     
 

     

 



SELECT cFirstName, cLastName, orderDate
FROM customers INNER JOIN orders
ON customers.custID = orders.custID;

U$    
 

 
      
 
  
 * 
    

+ 
    
      
$   
  
 '
       
      
  $       
(    

   

  
     
  
  
  
  
     



SELECT cFirstName, cLastName, orderDate


FROM customers c INNER JOIN orders o
ON c.custID = o.custID;

U     
  (

  

 
   >@@A 
 

          
c  
    

     
   >@BC    !
  $   
       


 
 (
  $         $       
 (  (     
      
   &
  

 $      
     

   

  
      =6//      


 
  "
SELECT cFirstName, cLastName, orderDate
FROM customers c, orders o
WHERE c.custID = o.custID;

Ñ  
       
  
           
       


  
 

,1   
 
  c   
 

 
  
  
  
    
  
 
  !
      
 

       
        *+ 
             
       
  
     
         (
  
  

   #!/#00#$1$#
   

SELECT cFirstName, cLastName, orderDate


FROM customers c LEFT OUTER JOIN orders o
ON c.custID = o.custID;
All customers and order dates
        
Tom Jewett
Alvaro Monge 2003-07-14
Alvaro Monge 2003-07-18
Alvaro Monge 2003-07-20
Wayne Dick 2003-07-14

U, 
   
   
  
  
  
 
 
 
    


  

 #
U1  <

<     
  c$'*  
 

 
 

  +% 




        
    



    
 
 

   
1 

     
   
(
            
"

SELECT cFirstName, cLastName, orderDate


FROM orders o RIGHT OUTER JOIN customers c
ON o.custID = c.custID;

U    (
        (
       

    



 

  

  * 
  
  
  

+ &
  
    (
  
  
   
      
 
       *
         

+
U  (  
     
    

 

 
 

 
 
    



  
 

 
 $    
 
   
   

         
     

/5  
 
.         
5  
 

         $    

   
 (
  $                   5  
  
  *.  
                  +  
 
    &   
         
5  
    $ 

  

 

Ê Ê Ê = (Ê Ê) Ê.

U 6 

     
   
   
       
    
  
  !
   (
 $   
"

SELECT cFirstName, cLastName, orderDate, UPC, quantity


FROM customers LEFT OUTER JOIN orders
USING (custID)
NATURAL JOIN orderlines;

$     
           
  !    

 
(
 $        
(      "

SELECT cFirstName, cLastName, orderDate, UPC, quantity


FROM customers LEFT OUTER JOIN
(orders NATURAL JOIN orderlines)
USING (custID);

&
 &
 
 
c
  $  (     (
 $         
   

 
      
        
  
  
   

 
  
 
 
 



    
 

   2 
  
 
   
 $  
   6 

 

     $  

 
c    >@@A
      

 (       
    


  =6//"

SELECT cFirstName, cLastName, orderDate


FROM customers, orders;

‡ If your system is backward-compatible (most are), you might actually try this just to prove to
yourself that the result is pure nonsense. However, if you ever have an occasion to really need a
Cartesian product of two tables, use the new  syntax to prove that you really mean it.
Notice that this example still produces nonsense.

SELECT cFirstName, cLastName, orderDate


FROM customers CROSS JOIN orders;

U &
  
    
     *
  +  $    
    


        
   

     
          

#   (
  $     


           
2 
  
         
        
   
    
$    
, 
    

 
  
   

U$  (    



   

 
 
      
            
           1 
   
 

   
 
   


%
 "  

1    
 
   
       
     

    
     
   

          
      
  c    
 
 
    

  *) 
 
 )  + 
  
 

       
 
  
1
 

   
 

        
        //2%
$          
   
   
  
 (  
  
   
   
  (  
 

         
 



          
         
 $         
    

           $  
1 

 
1
     
 

  

 
     
 (         ( 

        //2% 
 
   
          
    
  
    
   
2 " 1
 

   
     
  
   
   
 
 ( 
   
    ! &   (  
  
       (      
  
 

  

   
     
   
 1 
 
    
 
,1 
 
     
  //2%  
 
   
   (   
 
  

SELECT custID, orderDate, UPC, unitSalePrice * quantity


FROM orderlines;
Order line subtotals
           
5678 2003-07-14 51820 33622 11.949999809265
9012 2003-07-14 51820 33622 23.89999961853
9012 2003-07-14 11373 24793 21.25
5678 2003-07-18 81809 73555 18
5678 2003-07-20 51820 33622 23.89999961853
5678 2003-07-20 81809 73555 9
5678 2003-07-20 81810 63591 24.75

1  

          (     !
   

  
 D > EC   
       
    (  
   (   (  
, 
    
  


 
 
( 

 6 


          
        
  
   1 
  
  
  

   
      
$ 

 ( 

  *,      
   
  
       $
% (   


  
 
  $  +&
 $  

 
$  



 
    $    
     
  

SELECT custID, orderDate, UPC,


unitSalePrice * quantity AS subtotal
FROM orderlines;
Order line subtotals
      
5678 2003-07-14 51820 33622 11.949999809265
9012 2003-07-14 51820 33622 23.89999961853
9012 2003-07-14 11373 24793 21.25
5678 2003-07-18 81809 73555 18
5678 2003-07-20 51820 33622 23.89999961853
5678 2003-07-20 81809 73555 9
5678 2003-07-20 81810 63591 24.75

 
 $  
 
   

 
    

  
   
 ! 
( 
  

 
  //2%  (      
2 ",   

     (   
  (   
 
 
 

  
            (   

    
(  

 
 
 
1 
      

!      
  %      
   $         
 

    


SELECT SUM(unitSalePrice * quantity) AS totalsales


FROM orderlines;
Sales
   
132.74999904633

 (   
   
   
  *    

 
 
      !+ 1
   
       
 
   
 
  
   
  1
 
   

   0 ,.41 



    

    
   
      ,     
c  ,1   ,
   
  
 !
        //2%     
0 ,.4 

   
    
  
 c     
  $            (
 $       


SELECT custID, orderDate, SUM(unitSalePrice * quantity)
AS total
FROM orderlines
GROUP BY custID, orderDate;
Order totals
     
5678 2003-07-14 11.9499998092651
5678 2003-07-18 18
5678 2003-07-20 57.6499996185303
9012 2003-07-14 45.1499996185303

 
   
 
   
    (             
 !
  !'# *

 

   
    +  !$F *

  
   

      $G0 *

             +
 
2 #%

   
  
 (  
    
   
     
  
        D *
        

     
  +

SELECT COUNT(*)
FROM orders;
Orders
ëÑ !" #
4

1 
(   
   
 




 
  c   


  2 #% 
 

# 
c



      
 

 
  

  

SELECT prodname AS "product name",


COUNT(prodname) AS "times ordered"
FROM products NATURAL JOIN orderlines
GROUP BY prodname;
Product orders
      
Hammer, framing, 20 oz. 3
Pliers, needle-nose, 4 inch 1
Saw, crosscut, 10 tpi 1
Screwdriver, Phillips #2, 6 inch 2

     =6//   
    
 
   c/#0$# 0 ,   
 
   
 
 
(   #  (
 
 



 

       
  
  
       6$G'#0 
   
 
 

  
 
 
      ( 
 
 
"

SELECT prodname AS "product name",


COUNT(prodname) AS "times ordered"
FROM products NATURAL JOIN orderlines
GROUP BY prodname
HAVING COUNT(prodname) > 1;

D  

1    
         
  
        
  

 


  
 (   



 

   
  1    
         //2%  
   
 
       
    =6//       '#/%   ,c$%/  

  "
U  
        
         
    

U  
      
         
 
 
      
U 
         
    


  

U  
      
     
     
  
      
 
  
U  
    
 



 
   

      
   
        

 %
 " 
 1     $   
  




 
  
 $         
 $  


  c    

 $       
 
   
     

2 " 2 
        
 
             =  
c
 1
  
  
  
 

  
   
            
 
  "

SELECT cFirstName, cLastName


FROM customers
WHERE cZipCode = ???

U ?1
 
     
      =6//%
  
 
 

   
      (
   
 
    (   
      
 
    
   

?
U   
 (           

"

SELECT cZipCode
FROM Customers
WHERE cFirstName = 'Wayne' AND cLastName = 'Dick';
Zip code
 
Zip code
 
90840

U, 
   

  
      
1 
 
     
 


  

 H
2     
  $
       


     ( 
             
       
    "

U    
 
      
             
    

    
  

       
  =6//1 
  
       
//2% 5

 
  (        
 
 

 "

SELECT cFirstName, cLastName, cZipCode


FROM customers
WHERE cZipCode =
(SELECT cZipCode
FROM customers
WHERE cFirstName = 'Wayne' AND cLastName = 'Dick');
Customers
      
Alvaro Monge 90840
Wayne Dick 90840

    


       
 
  

 

  

 2 
          ( 
   
(     
  
       1
 
 

         
     
     
  //2% 
  
  
 

   
"

SELECT DISTINCT prodName, unitSalePrice


FROM Products NATURAL JOIN OrderLines
WHERE unitSalePrice > u  u
   
U 


   
  

       "

SELECT AVG(unitSalePrice)
FROM OrderLines;
Average
R "    #
10.621428

U 1
  
  5
 
 
   


           
 

    
  "

SELECT DISTINCT prodName, unitSalePrice


FROM Products NATURAL JOIN OrderLines
WHERE unitSalePrice >
(SELECT AVG(unitSalePrice)
FROM OrderLines);
Above average
       
Hammer, framing, 20 oz. 11.95
Saw, crosscut, 10 tpi 21.25


(  
  
 
  
 
 

 


  
 
    
   1
    
     
    




%
 " 
    

   
 
   ( 
.  
      

       
           
 '
 * 
  +&
       
    
 c  $  
      

 ( 
 
' 
   

 G 
    
 


      
  *  
 +!
        




 

 
      


  
 

U1      

 ( 
(
   $  
  
 
    

         
           



        
          
 
U $   
    
 
   
  

   

 
       
   


 

  (  
     
  
   
   (
         .
   
 
   

  
   (
  $       (   
           
     
 $

 
   

 
          ,      
     (  
 
 <,          
  
     
     

 ( <
         -
 
 
           
   

           

            
  
 
 
     
  

U 1 


   
         (             
  
   
           1
    
  
     

  


   
   !
   

   
    
    
    
     
 
   
 
  (    
 
      
( 

U 1
                     ,   
  
    

  

  c



      


 ;, ;       


  
  
        
    
 
     
  
  
         ( 

 
  
   
 
 
 
 
    
U !      (
 
     
  
  (    

5
 

      1   c/.4   
 


SELECT cLastName AS "Last Name", cFirstName AS "First


Name",
cPhone as "Phone", 'Customer' AS "Company"
FROM customers
UNION
SELECT repLName, repFName, repPhone, sCompanyName
FROM suppliers
ORDER BY "Last Name";
Phone list
     $   ë 
Bradley Jerry 888-736-8000 Industrial Tool Supply
Dick Wayne 562-777-3030 Customer
Jewett Tom 714-555-1212 Customer
Monge Alvaro 562-333-4141 Customer
O'Brien Tom 949-567-2312 Bosch Machine Tools

 
1     $     

    
    $  

       
 
$  

      
  &
       =6// 
         


   
   * 
 +      $  

         
  $  


     $   


           
   
U .       

     $       
    
 1     
 
 


             
  
  


 ,   
       
 

SELECT prodName, sCompanyName


FROM Products NATURAL JOIN Suppliers
WHERE sCompanyName <> 'Industrial Tool Supply';

U1  

      
    
    AEEA
1   

      
     ,             
 
"
>        
    AEEA * ( +
A        
 
    
  
 
       AEEA
        
 
 
    
         AEEA
I     
     
 
 
   
U&
 $      



  
  

SELECT DISTINCT cLastName, cFirstName, cStreet, cZipCode


FROM Customers NATURAL JOIN Orders
WHERE TO_CHAR(orderDate, 'YYYY') <> '2002';

$         
    >       A  
   
        
    I 
   
       
 
    

    
  

  

  
  ?
U1
 
   (     
    
   "
Úð Ê 
     Êð 
  =
Ú ð Ê í Ú

$          


 
 
U
     

     
   'c  1 
  
   %'c$1c'  
    =6//     
  
'c     
    
    AEEA

SELECT cLastName, cFirstName, cStreet, cZipCode


FROM Customers
WHERE custID NOT IN
(SELECT custID
FROM Orders
WHERE TO_CHAR(orderDate, 'YYYY') = '2002');

U 1
  (           !'#    
  
 
  
 

  

   
 
 ,  *.  5
  
          
 1/2$'  
!'#+  
 #' #   '
      
          

(  (
 


SELECT cLastName, cFirstName, cStreet, cZipCode


FROM Customers
MINUS
SELECT cLastName, cFirstName, cStreet, cZipCode
FROM Customers NATURAL JOIN Orders
WHERE TO_CHAR(orderDate, 'YYYY') = '2002';

       





       #' #$(  
#' #  


 
 
  
     
   
 '#%//2%   
  
   $        



  
  
      


   %     


melihat adalah hanya ada pertanyaan SELECT yang telah diberi nama dan disimpan dalam
database. Untuk alasan ini, melihat kadang-kadang disebut query bernama atau query disimpan.
Untuk membuat tampilan, Anda menggunakan sintaks SQL:

CREATE OR REPLACE VIEW < > AS


SELECT < 
  u>;

‡ Permintaan sendiri melihat disimpan dalam database, tetapi tidak benar-benar berjalan sampai
disebut dengan pernyataan lain SELECT. Untuk alasan ini, melihat tidak mengambil setiap ruang
disk untuk penyimpanan data, dan tidak berlebihan membuat salinan data yang sudah disimpan
dalam tabel bahwa referensi (yang terkadang disebut tabel dasar pandangan).
‡ Meskipun tidak diperlukan, pengembang banyak database mengidentifikasi pandangan dengan
nama seperti v_Customers atau Customers_view. Hal ini tidak hanya menghindari konflik nama
dengan tabel dasar, membantu dalam membaca ada pertanyaan yang menggunakan tampilan.
‡ Kata kunci OR REPLACE dalam sintaks yang ditunjukkan di atas adalah opsional. Meskipun
Anda tidak perlu menggunakannya pertama kali yang Anda buat melihat, termasuk mereka akan
menimpa versi lama melihat dengan Anda terbaru satu, tanpa memberikan pesan kesalahan.
‡ Sintaks untuk menghapus pandangan dari skema Anda adalah apa yang Anda harapkan:

DROP VIEW < >;

&& ' % 


Sebuah nama tampilan dapat digunakan dengan cara yang persis sama seperti nama tabel dalam
query SELECT. Setelah disimpan, melihat dapat digunakan lagi dan lagi, bukan menulis ulang
kali sama banyak permintaan.
‡ Penggunaan yang paling dasar akan melihat untuk * hanya SELECT dari itu, tetapi mungkin
juga mewakili pra-subquery ditulis atau cara sederhana untuk menulis bagian dari klausa DARI.
‡ Dalam banyak sistem, dilihat disimpan dalam bentuk pre-compiled. Hal ini dapat menghemat
waktu eksekusi untuk query, tetapi biasanya tidak cukup untuk pengguna manusia untuk
pemberitahuan.
‡ Salah satu kegunaan yang paling penting dilihat adalah dalam sistem multi-user yang besar, di
mana mereka memudahkan untuk mengontrol akses ke data untuk berbagai jenis pengguna.
Sebagai contoh yang sangat sederhana, anggaplah bahwa Anda memiliki tabel informasi
karyawan pada skema Karyawan = (employeeID, empFName, empLName, empPhone, jobTitle,
payrate, ManagerId). Jelas, Anda tidak bisa membiarkan semua orang dalam melihat perusahaan
di seluruh informasi ini, apalagi melakukan perubahan itu.
‡ Database Anda administrator (DBA) dapat menentukan peran untuk mewakili berbagai
kelompok pengguna, dan kemudian memberikan keanggotaan dalam satu atau lebih peran untuk
setiap account pengguna khusus (skema). Pada gilirannya, Anda dapat memberikan tingkat meja
atau melihat tingkat izin untuk peran serta pengguna tertentu. Misalkan DBA telah menciptakan
manajer peran dan penggajian bagi orang-orang yang menempati posisi tersebut. Dalam Oracle
®, ada juga peran yang telah ditentukan bernama publik, yang berarti setiap pengguna database.
‡ Anda dapat menciptakan pandangan terpisah bahkan hanya pada tabel Karyawan, dan
mengontrol akses ke mereka seperti ini:

CREATE VIEW phone_view AS


SELECT empFName, empLName, empPhone FROM Employees;
GRANT SELECT ON phone_view TO public;

CREATE VIEW job_view AS


SELECT employeeID, empFName, empLName, jobTitle,
managerID FROM Employees;
GRANT SELECT, UPDATE ON job_view TO managers;

CREATE VIEW pay_view AS


SELECT employeeID, empFName, empLName, payRate FROM
Employees;
GRANT SELECT, UPDATE ON pay_view TO payroll;

‡ Hanya sedikit orang yang dipercaya akan SELECT, UPDATE, INSERT, DELETE dan hak-hak
dasar di meja seluruh karyawan; semua orang sekarang harus persis akses yang mereka
butuhkan, namun tidak lebih.
‡ Ketika melihat adalah target pernyataan UPDATE, tabel nilai dasar berubah. Anda tidak dapat
mengubah nilai dihitung dalam tampilan, atau nilai apapun dalam tampilan yang didasarkan pada
query UNION. Anda juga dapat menggunakan pandangan sebagai sasaran dari pernyataan
INSERT atau DELETE, tergantung kendala integritas yang telah ditempatkan di atas tabel dasar.

   % 


Kadang-kadang, kecepatan eksekusi query adalah sangat penting bahwa pengembang yang
bersedia untuk perdagangan disk peningkatan penggunaan ruang untuk respon lebih cepat,
dengan menciptakan pandangan terwujud. Tidak seperti tampilan yang dibahas di atas,
pandangan yang muncul tidak membuat dan menyimpan tabel hasil di muka, diisi dengan data.
Skema tabel ini diberikan oleh klausa SELECT dari definisi tampilan.
‡ Teknik ini sangat berguna bila permintaan tersebut melibatkan banyak bergabung tabel besar,
SQL atau fitur lain yang dapat berkontribusi pada waktu eksekusi yang lama. Anda mungkin
pertemuan ini dalam proyek Web, di mana pengunjung situs hanya tidak dapat terus menunggu
sementara permintaan berjalan.
‡ Sejak melihat akan sia-sia jika dari tanggal, harus dijalankan kembali, minimal, ketika ada
perubahan ke salah satu tabel yang didasarkan pada. Sintaks SQL untuk membuat tampilan
terwujud mencakup banyak pilihan untuk saat pertama dijalankan, seberapa sering itu harus
dijalankan kembali, dan seterusnya. Ini membutuhkan referensi lanjutan manual untuk sistem
tertentu, dan berada di luar cakupan tutorial ini.

(   
Sebuah indeks, seperti yang diharapkan, adalah suatu struktur data yang menggunakan database
untuk menemukan catatan dalam tabel lebih cepat. Indeks akan dibangun di satu atau lebih
kolom tabel; indeks masing-masing menyimpan daftar nilai dalam field yang diurutkan menaik
atau menurun. Daripada catatan penyortiran di lapangan atau ladang selama eksekusi query,
sistem hanya dapat mengakses baris dalam urutan indeks.

 
    
 
 Bila Anda membuat indeks, Anda dapat membiarkan kolom
diindeks mengandung nilai ganda; indeks masih akan menampilkan semua baris dengan duplikat.
Anda juga dapat menentukan bahwa nilai-nilai dalam kolom yang diindeks harus unik, seperti
mereka harus dengan kunci primer. Bahkan, ketika Anda membuat batasan kunci primer di atas
meja, Oracle dan sistem yang paling lain secara otomatis akan membuat indeks yang unik pada
kolom primary key, serta tidak membiarkan nilai-nilai nol pada kolom tersebut. Salah satu alasan
yang baik bagi Anda untuk membuat indeks yang unik di bidang non-kunci utama adalah untuk
menegakkan integritas kunci calon, yang dinyatakan mungkin berakhir memiliki (omong
kosong) duplikasi nilai dalam baris yang berbeda.
Y Ê
 Ê 
Ê
    Mungkin seolah-olah Anda harus membuat indeks di setiap
kolom atau kelompok kolom yang akan pernah oleh digunakan dalam klausa ORDER BY
(misalnya: NamaBelakang, Nama depan). Namun, setiap indeks harus diperbaharui setiap kali
berturut-turut dimasukkan atau nilai dalam kolom yang diperbarui. Meskipun struktur indeks
seperti B atau B + pohon membiarkan ini terjadi sangat cepat, mungkin masih ada keadaan di
mana indeks terlalu banyak akan mengurangi kinerja sistem secara keseluruhan. Ini dan isu-isu
serupa sering dibahas dalam kursus yang lebih maju.

   Seperti yang Anda harapkan sekarang, SQL untuk membuat indeks adalah:

CREATE INDEX <indexname> ON <tablename> (<column>,


<column>...);

Untuk menegakkan nilai-nilai yang unik, tambahkan kata kunci UNIK:

CREATE UNIQUE INDEX <indexname> ON <tablename>


(<column>, <column>...);

Untuk menentukan tata urutan, tambahkan kata kunci ASC atau DESC setelah setiap nama
kolom, seperti yang Anda akan lakukan dalam klausa ORDER BY.
Untuk menghapus indeks, cukup masukkan:

DROP INDEX <indexname>;




Anda mungkin juga menyukai