Home
        A Primer on SQL (1st Edition)
         Contents
1.       Listing  Inserting new data into the proglang_tblcopy table    When you run this through your SQL interface  3 new rows would be inserted into the table  Notice the  ordering of the third row  it is not the same sequence we used to create the table  Also Perl has not been  standardized by an international body  so we do not specify the field name itself while doing the INSERT  operation     To verify the results of these statements and to make sure that the correct data went into the correct fields   we run a simple query as before              SELECT   FROM proglang_tblcopy                 id   language author year   standard  Prolog Colmerauer   1972 ISO  Perl Wall 1987  null   3 APL Iverson 1964 ANSI                         Figure  Result of the query run on proglang_tblcopy    3 2  Primary Key Constraint    A primary key is used to make each record unique in atleast one way by forcing a field to have unique  values  They do not have to be restricted to only one field  a combination of them can also be defined as a  primary key for a table  In our programming languages table  the id field is a good choice for applying the  primary key constraint  We will now modify our CREATE TABLE statement to incorporate this                                                              CREATE TABLE proglang_tbltmp     id INTEGER NOT NULL PRIMARY KEY   language VARCHAR 20  NOT NULL    author VARCHAR  25  NOT NULL    year INTEGER NOT NULL    standard VARCHAR 10  NULL            Listi
2.      language   year  APL 1964  Prolog 1972  Perl 1987                Figure  Output of the ordered SELECT query    The astute reader will notice that the output of our ORDER BY clause was ascending  To reverse this  we  add the argument DESC to our ORDER BY clause as below           SELECT language  year FROM proglang_tbl ORDER BY year DESC           Listing  Usage of the ORDER BY clause with the DESC argument                language   year  Perl 1987  Prolog 1972  APL 1964                Figure  Output of the ordered SELECT query in descending order    5 3  Ordering using field abbreviations    A useful shortcut in SQL involves ordering a query result using an integer abbreviation instead of the  complete field name  The abbreviations are formed starting with 1 which is given to the first field specified    in the query  2 to the second field and so on  Rewriting our above query to sort the output by descending  year  we get           SELECT language  year FROM proglang_tbl ORDER BY 2 DESC                 language year  Perl 1987  Prolog 1972  APL 1964                         Figure  Output of the ordered SELECT query in descending order using field abbreviations    The 2 argument given to the ORDER BY clause signifies ordering by the second field specified in the query   namely year     5 4  Putting conditions with WHERE    We have already seen how to select a subset of data available in a table by limiting the fields queried   We will now limit the number of records retri
3.  But what if we wanted to restrict how many characters we wished to match  What if our goal was to write a  query which displays the languages ending in the letter    but are only 3 characters in length  The first con   dition could have been satisfied using the pattern  l  but to satisfy both conditions in the same query we  use the _ wildcard  A pattern like    would result in returning both Perl and Tcl but we modify our pattern    suitably to return only the latter               32                                      SELECT   FROM proglang_tbl WHERE language LIKE    __1      id   language author year   standard  4 Tcl Ousterhout 1988  null           Figure  output for _ wildcard matching    Note that the result did not include Perl since we explicitly gave two underscores to match 2 characters  only  Also it did not match APL since SQL data is case sensitive and   is not equal to L      33     9  AGGREGATION AND GROUPING    9 1  Aggregate Functions    An aggregate function is used to compute summarization information from a table or tables  We have  already seen the COUNT agrregate function which counts the records matched  Similarly there are other  aggregation functions in SQL like AVG for calculating averages  SUM for computing totals and MAX  MIN  for finding out maxima and minima values respectively        9 2  Using DISTINCT with COUNT    We have already seen the COUNT function  but we can further control its output using the optional  argument DISTINCT  This allow
4.  Consider  the example of the programming languages table   every programming language that has been created  must  have an author  whether a single person  or a couple or a committee   Similarly it should have a year when  it was introduced  be it the year it first appeared as a research paper or the year a working compiler for it  was written  In such cases  it makes sense to create your table in such a way that certain fields do not accept  a NULL  empty  value     We now modify our previous CREATE TABLE statement so that we can apply the NULL constraint to some  fields                                                           CREATE TABLE proglang_tblcopy    id INTEGER NOT NULL   language VARCHAR 20  NOT NULL   author VARCHAR  25  NOT NULL   year INTEGER NOT NULL   standard VARCHAR 10  NULL            Listing  Creating a table with NULL constraints    We see in this case that we have achieved our objective of creating a table in which the field   s id  language   author and year cannot be empty for any row  but the new field standard can take empty values  We now go  about trying to insert new rows into this table using an alternative INSERT syntax     3 1  Selective fields INSERT    From our last encounter with the INSERT statement  we saw that we had to specify the data to be  inserted in the same order as specified during the creation of the table in question  We now look at another  variation which will allow us to overcome this limitation and handle inserting rows wi
5.  DESCRIBE command which allows you to view a table definition  While the information this command  show may vary from one DBMS to another  they at least show the field name  its data type and whether or     19     not NULL values are allowed for the particular field  The general synatax of the command is given below           DESCRIBE  lt table name gt                     Listing  the general syntax of the DESCRIBE statement     20     5  WRITING BASIC QUERIES    A query is a SQL statement that is used to extract a subset of data from your database and presents it  in a readable format  As we have seen previously  the SELECT command is used to run queries in SQL   You can further add clauses to your query to get a filtered  more meaningful result  Since the majority of  operations on a database involve queries  it is important to understand them in detail  While this chapter  will only deal with queries run on a single table  you can run a SELECT operation on multiple tables in a  single statement     5 1  Selecting a limited number of columns    We have already seen how to extract all the data from a table when we were verifying our results in  the previous chapters  But as you might have noted   a query can be used to extract a subset of data too  We  first test this by limiting the number of fields to show in the query output by not specifying the   selection  criteria  but by naming the fields explicitly                    SELECT language  year FROM proglang_tbl          
6.  Listing  selecting a subset of fields from a table       language   year  Prolog 1972  Perl 1987  APL 1964                         Figure  Output of running the chosen fields SELECT query    You can see that the query we constructed mentioned the fields we wish to see  i e  language and year   Also note that the result of this query is useful by itself as a report for looking at the chronology of pro   gramming language creation  While this is not a rule enforced by SQL or a relation database management  system  it makes sense to construct your query in such a way that the meaning is self evident if the output is  meant to be read by a human  This is the reason we left out the field id in the query  since it has no inherent  meaning to the reader except if they wish to know the sequential order of the storage of records in the table     5 2  Ordering the results    You might have noticed that in our previous query output  the languages were printed out in the same  order as we had inserted them  But what if we wanted to sort the results by the year the language was cre   ated in  The chronological order might make more sense if we wish to view the development of program   ming languages through the decades  In such cases  we take the help of the ORDER BY clause  To achieve  our purpose  we modify our query with this additional clause                          SELECT language  year FROM proglang_tbl ORDER BY year           Listing  Usage of the ORDER BY clause    ey           
7.  and removing redundancies is called Nor   malization  There are even levels of normalization called normal forms which dictate on how to acheive  the desired design     7 2  Atomicity    In the programming language examples we   ve seen  our assumption has always been that a language  has a single author  But there are countless languages where multiple people contributed to the core design  and should rightfully be acknowledged in our table  How would we go about making such a record  Let us  take the case of BASIC which was designed by John Kemeny and Thomas Kurtz  The easiest option to add  this new record into the table is to fit both author   s in the author field      2J                             id   language author year   standard  1 Prolog Colmerauer 1972 ISO  2 Perl Wall 1987  null   3 APL Iverson 1964 ANSI  4 Tcl Ousterhout 1988  null   5 BASIC Kemeny  Kurtz   1964 ANSI                   Figure  a record with a non atomic field value    You can immediately see that it would be difficult to write a query to retrieve this record based on the  author field  If the data written as Kemeny  Kurtz or Kurtz  Kemeny or even Kemeny  amp  Kurtz  it would be  extremely difficult to put the right string in the WHERE conditional clause of the query  This is often the  case with multiple values  and the solution is to redesign the table structure to make all field value atomic     7 3  Repeating Groups    Another simple  but ultimately wrong  approach that comes to mind is to 
8.  created a reference to the Janguage_id  inserting a row in the author   s table which does not  yet have a language entry would also result in an error  called a Referential Integrity violation           INSERT INTO authors_tbl  author_id  author  language_id  VALUES  5      Kemeny     5           E_US1906 Cannot INSERT into table   authors_tbl     because the values do  not match those in table     newlang_tb1      violation of REFERENTIAL  constraint     Sautho_r0000010c00000000                          However when done sequentially  i e  the language first and then its corresponding entry in the author table   everything works out           INSER INTO newlang_tbl  id  language  year  standard  VALUI    BASIC     1964     ANSI            Fl  n     5              INSER INTO authors_tbl  author_id  author  language_id  VALUES  5      Kemeny     5                  Listing  making entries for BASIC in both the tables    The other statements to get fully populated tables are given below                                                                                         INSERT INTO newlang_tbl  id  language  year  standard  VALUES  1    Prolog     1972  TISOY    INSERT INTO newlang_tbl  id  language  year  VALUES  2     Perl      1987     INSERT INTO newlang_tbl  id  language  year  standard  VALUES  3      APL     1964        ANSI        INSERT INTO newlang_tbl  id  language  year  VALUES  4        Tcl     1988    INSERT INTO authors_tbhl  author_id  author  language_id  V
9.  for Perl and Tcl are left out since they do not satisfy the  HAVING conditional of being created before 1980        Note  The output of the previous query demonstrating the GROUP BY and HAVING clause is not accord   ing to the SQL standard  Ingres 10 1 would display the result as above in its default configuration  but  other database management systems adhering to the standard would swap the Fortran and APL records   This is because in the GROUP BY order first dictates grouping by standard and then year  1957  lt  1964      This illustrates an important point  every relational database vendor   s implementation differs from the  SQL standard in one way or another               36     10  UNDERSTANDING JOINS    10 1  What is a Join     A join operation allows you to retrieve data from multiple tables in a single SELECT query  Two  tables can be joined by a single join operator  but the result can be joined again with other tables  There  must exist a same or similar column between the tables being joined     When you design an entire database system using good design principles like normalization  we often  require the use of joins to give a complete picture to a user   s query  For example  we split our programming  languages table into two   one holding the author details and the other holding information about the lan   guages itself  To show a report listing authors and which programming language they created  we would  have to use a join                          author_
10.  something else to practice on while reading this book  it would be a good idea to keep the database  vendor   s user manual handy     Since this text deals largely with teaching SQL in a product independent manner  rather than the teaching of  Ingres per se  details with respect to installation and specific operations of the product will be kept to a min   imum  Emphasis is instead placed on a few specific steps that will help you to get working on Ingres as fast  as possible     The current version of Ingres during the writing of the book was 10 1 and the Community Edition has  been used on a Windows box for the chapters to follow  The installation itself is straightforward like any  other Windows software  However if you are unsure on any option  ask your DBA  database administrator   in case one is available  or if you are practicing on a home box   select the    Traditional Ingres    mode and  install the Demo database when it asks you these questions  Feel free to refer to the Ingres installation guide  that is available on the web at the following location  http   docs actian com ingres 10 0 installation guide    If your installation is successful  you should be able to start the Ingres Visual DBA from the Start Menu   This utility is a graphical user interface to manage your Ingres databases  but we will keep the usage of this  to a minimum since our interest lies in learning SQL rather than database administration     2 1  Creating your own database    Most database 
11.  standard  1 Prolog Colmerauer   1972 ISO  2 Perl Wall 1987  null   3 APL Iverson 1964 ANSI  4 Tel Ousterhout 1988  null                          Figure  a table with NULL values    6 2  Inserting data into a table from another table    You can insert new records into a table from another one by using a combination of INSERT and  SELECT  Since a query would return you some records  combining it with an insertion command would  enter these records into the new table  You can even use a WHERE conditional to limit or filter the records  you wish to enter into the new table  We will now create a new table called stdlang_tbl  which will have  only two fields   language and standard  In this we would insert rows from the proglang_tbl table which  have a non null value in the standard field  This will also demonstrate our first use of a boolean operator    NOT      24                    CREATE TABLE stdlang_tbl  language varchar  20   standard varchar                INSERT INTO stdlang_tbl SELECT language  standard FROM proglang_tbl  WHERE standard IS NOT NULL                             Listing  Using INSERT and SELECT to conditionally load data into another table    When you view the contents of this table  you will notice that it has picked up the two languages which  actually had a standard column value        language   standard  Prolog ISO  APL ANSI                      Figure  Contents of the stdlang_tbl table    6 3  Updating existing data    To modify some data in a record 
12.  table unique  and its advantages will become clearer in chapters to come  But for now consider this  what if a language  creator made two languages in the same year  we would have a difficult time narrowing down on the  records  An id field usually serves as a good primary key since it   s guaranteed to be unique  but usage of  other fields for this purpose is not restricted     Just like programming languages  SQL also has data types to define the kind of data that will be stored in  its fields  In the table given above  we can see that the fields Janguage and author must store English lan   guage characters  Thus their data type during table creation should be specified as varchar which stands for  variable number of characters     The other commonly used data types you will encounter in subsequent chapters are     Fixed length characters char  Integer values int  Decimal numbers decimal    Date data type date    2  GETTING YOUR DATABASE READY    The best way to learn SQL is to practice writing commands on a real relational database  In this book  SQL is taught using a product called Ingres  The reasons for choosing Ingres are simple   it comes in a  free and open source edition  it   s available on most major platforms and it   s a full fledged enterprise class  database with many features  However  any relational database product that you can get your hands on  should serve you just fine  There might be minor incompatibilities between different vendors  so if you  choose
13.  we use the UPDATE command  While it cannot add or delete  records  those responsibilities are delegated to other commands   if a record exists it can modify its data  even affecting multiple fields in one go and applying conditions  The general syntax of an UPDATE state   ment is given below              UPDATE  lt table_name gt  SET   lt column1 gt     lt value gt     lt column2 gt     lt value gt     lt column3 gt     lt value gt                       WHERE  lt condition gt            Listing  General Syntax of the UPDATE command    Let us now return to our proglang_tbl table and add a new row about the Forth programming language           INSERT INTO proglang_tbl VALUES  5      Forth        Moore     1973  NULL      We later realize that the language actually was created near 1972  instead of 1973  and it actually has been  standardized in 1994 by the ANSI  Thus we write our update query to reflect the same        UPDATE proglang_tbl SET year   1972   standard      ANSI    WHERE language    Forth                              Listing  Updating multiple fields in a single statement    If you   ve typed the statement correctly and no errors are thrown back  the contents of the record in question  would have been modified as intended  Verifying the result of the same involves a simple query the likes of  which we have seen in previous examples     6 4  Deleting data from tables    You can use the DELETE command to delete records from a table  This means that you can choose  w
14.  would modify our existing field              ALTER TABLE proglang_tbl ALTER author varchar  30                     Listing  Altering the author field    4 4  Verifying the result in Ingres    While one option to verify the result of our ALTER TABLE command is to run an INSERT statement  with the author   s name greater than 25 characters and verify that we get no errors back  it is a tedious  process  In Ingres specifically  we can look at the Ingres Visual DBA application to check the columns tab  in the testdb database  However  another way to verify the same using a console tool is the isgl command  line tool available through the Ingres Command Prompt we used earlier for database creation     To launch isq   which stands for Interactive SQL  using the Ingres command prompt we type        isql testdb             The first argument we write is the database we wish to connect to  The result of running this command is an  interactive console window where you would be able to write SQL statements and verify the results much  like Visual SQL  The difference between the two  other than the obvious differences in the user interface  is     18     that isql allows you access to the HELP command  which is what we will be using to verify the result of  our ALTER TABLE statement  In the interaction window that opens up  we write the HELP command as  below and the subsequent box shows the output of the command     HELP TABLE          proglang_tbl                          Name  progla
15. 3     Algol     1            Listing  creating and populating our language influence table                   id   language   influenced_by  1 Fortran  null   Pascal 3  3 Algol 1                Figure  contents of inflang_tbl    Our goal is to now write a self join query to display which language influenced which one  i e  resolve the  influenced_by column           SELECT ll language  12 language AS influenced  FROM inflang_tbl 11  inflang_tbl 12  WHERE l1 id   12 influenced_by                           7              Listing  running a self join query    Notice the use of table aliases to qualify the join condition columns as separate and the use of the AS  keyword which renames the column in the output        language   influenced  Algol Pascal  Fortran Algol                      Figure  result of our self join query     40     APPENDIX  Major Database Management Systems    1  Ingres  Actian Corporation     A full featured relational database management system available as a proprietary or an open source edition   http   www actian com products ingres    2  Oracle Database  Oracle Corporation     An enterprise level database management system with a free to use Express Edition   http   www oracle com technetwork products express edition overview index html    3  IBM DB2  IBM Corporation     A powerful relational database management system with a free edition called DB2 Express C   http   www 01 ibm com software data db2 express     4  PostgreSQL    Open Source relational da
16. A Primer on SQL  ist Edition     Rahul Batra    18 October 2012    TABLE OF CONTENTS    i   ii   iii   1   2   3   4   5   6   7   8   9   10   iv     v     Licensing   Preface   Acknowledgements   An Introduction to SQL  Getting your Database ready  Constraints   Operations on Tables  Writing Basic Queries  Manipulating Data  Organizing your Data   Doing more with Queries  Aggregation and Grouping  Understanding Joins  Appendix  Major Database Management Systems  Glossary    To Mum and Dad    LICENSING    Copyright  c  2012 by Rahul Batra  This material may be distributed only subject to the terms and condi   tions set forth in the Open Publication License  v1 0 or later  the latest version is presently available at  http   www opencontent org openpub       Distribution of substantively modified versions of this document is prohibited without the explicit permis   sion of the copyright holder     Distribution of the work or derivative of the work in any standard  paper  book form is prohibited unless  prior permission is obtained from the copyright holder     All trademarks and trade names are the properties of their respective owners     Open Publication License  v1 0  8 June 1999    I  REQUIREMENTS ON BOTH UNMODIFIED AND MODIFIED VERSIONS    The Open Publication works may be reproduced and distributed in whole or in part  in any medium physi   cal or electronic  provided that the terms of this license are adhered to  and that this license or an incorpora   tion of it by re
17. ALUES  6   TRULtZ Opo    INSERT INTO authors_tbhl  author_id  author  language_id  VALUES  1    Colmerauer     1     INSERT INTO authors_tbhl  author_id  author  language_id  VALUES  2   WaLL p 2     INSERT INTO authors_tbl  author_id  author  language_id  VALUES  3       Ousterhout     4     INSERT INTO authors_tbl  author_id  author  language_id  VALUES  4   Iverson     3             30     8  DOING MORE WITH QUERIES    We have already seen some basic queries  how to order the results of a query and how to put condi   tions on the query output  Let us now see more examples of how we can modify our SELECT statements to  suit our needs     8 1  Counting the records in a table    Sometimes we just wish to know how many records exist in a table without actually outputting the  entire contents of these records  This can be achieved through the use of a SQL function called COUNT   Let us first see the contents of the proglang_tbl table                       id   language author year   standard  1 Prolog Colmerauer   1972 ISO  2 Perl Wall 1987  null   3 APL Iverson 1964 ANSI  4 Tcl Ousterhout 1988  null                          Figure  contents of our programming languages table             SELECT COUNT     FROM proglang_tbl                 Listing  Query to count number of records in the table    The output returned will be a single record with a single field with the value as 4  The function COUNT  took one argument i e  what to count and we provided it with   which means the en
18. LEDGEMENTS    This work would not have been completed without the support of my family and friends  A big thank  you is in order for my lovely wife Pria  who not only acted as an editor but also constantly supported and  cheered me on to complete it  Many thanks to my parents too  who got me a computer early in life to start  tinkering around with and for constantly encouraging me to pursue my dreams     Thanks also go out to my sister and niece  may you have a beautiful life ahead  and my friends for bringing  much happiness into my life  Finally I would like to acknowledge the contribution of my teachers who  helped me form my computing knowledge     1  AN INTRODUCTION TO SQL    A database is nothing but a collection of organized data  It doesn   t have to be in a digital format to  be called a database  A telephone directory is a good example  which stores data about people and organi   zations with a contact number  Software which is used to manage a digital database is called a Database  Management System  DBMS      The most prevalent database organizational model is the Relational Model  developed by Dr  E F Codd in  his groundbreaking research paper   A Relational Model of Data for Large Shared Data Banks  In this  model  data to be stored is organized as rows inside a table with the column headings specifying the corre   sponding type of data stored  This is not unlike a spreadsheet where the first row can be thought of as col   umn headings and the subsequent rows st
19. NCT clause did not count NULL values as  truly distinct values     9 3  Using MIN to find minimum values    The MIN function is fairly straightforward  It looks at a particular set of rows and finds the minimum  value of the column which is provided as an argument to it  For example  in our example table we wish to     34     find out from which year do we have records of programming languages  Analyzing the problem at hand   we see that if we apply the aggregate function MIN to the field year in our table  we should get the desired  output                 SELECT MIN  year  from proglang_tbl      gt  1957             Listing  finding out the earliest year value in our table    The MAX function similarly finds the largest value in the column provided to it as an argument     9 4  Grouping Data    The GROUP BY clause of a SELECT query is used to group records based upon their field values   This clause is placed after the WHERE conditional  For example  in our sample table we can group data by  which committee decided on their standard                    SELECT language  standard FROM proglang_tbl WHERE standard IS NOT NULL  GROUP BY standard  language                    Listing  Grouping records by its fields                            language   standard  APL ANSI  Fortran ANSI  PL I ECMA  Prolog ISO       Figure  output for grouping records    The interesting thing to note here is the rule that the columns listed in the SELECT clause must be present  in the GROUP BY clause  
20. ROM  you provide email noti   fication to the authors of your intent to redistribute at least thirty days before your manuscript or media  freeze  to give the authors time to provide updated documents  This notification should describe modifica   tions  if any  made to the document  All substantive modifications  including deletions  be either clearly  marked up in the document or else described in an attachment to the document  Finally  while it is not  mandatory under this license  it is considered good form to offer a free copy of any hardcopy and CD ROM  expression of an Open Publication licensed work to its author s      VI  LICENSE OPTIONS    The author s  and or publisher of an Open Publication licensed document may elect certain options by  appending language to the reference to or copy of the license  These options are considered part of the  license instance and must be included with the license  or its incorporation by reference  in derived works     A  To prohibit distribution of substantively modified versions without the explicit permission of the  author s    Substantive modification  is defined as a change to the semantic content of the document  and  excludes mere changes in format or typographical corrections     To accomplish this  add the phrase     Distribution of substantively modified versions of this document is pro   hibited without the explicit permission of the copyright holder     to the license reference or copy     B  To prohibit any publication 
21. This leads us to the following two corollaries     1  You cannot group by a column which is not present in the SELECT list   2  You must specify all the columns in the grouping clause which are present in the SELECT list     Another useful way to use grouping is to combine the operation with an aggregate function  Supposing we  wish to count how many standards a particular organization has in our table  This can be achieved by com   bining the GROUP BY clause with the COUNT aggregate function as given below              SELECT standard  count     FROM proglang_tbl GROUP BY standard                 Listing  using GROUP BY with aggregate functions     35                       standard   col2  ANSI 2  ECMA 1  ISO 1   null  2             Figure  query output showing the count of standard organizations in our table    9 5  The HAVING Clause    Like a WHERE clause places conditions on the fields of a query  the HAVING clause places condi     tions on the groups created by GROUP BY  It must be placed immediately after the GROUP BY but before  the ORDER BY clause        n       ELECT language  standard  year FROM proglang_tbl  ROUP BY standard  year  language HAVING year  lt  1980              Q          Listing  demonstration of the HAVING clause                      language   standard   year  APL ANSI 1964  Fortran ANSI 1957  PL I ECMA 1964  Prolog ISO 1972                Figure  output of the HAVING clause demonstration query    From the output we can clearly see that the records
22. age author year       Prolog Colmerauer   1972  Perl Wall 1987                      Figure  Output of the SELECT query with a WHERE and ORDER BY    Notice that the output only shows programming languages developed after 1970  atleast according to our  database   Also since the ordering is done by a varchar field  the sorting is done alphabetically in an  ascending order      23     6  MANIPULATING DATA    In this chapter we study the Data Manipulation Language  DML  part of SQL which is used to  make changes to the data inside a relational database  The three basic commands of DML are as follows     INSERT Populates tables with new data  UPDATE Updates existing data  DELETE Deletes data from tables    We have already seen a few examples on the INSERT statement including simple inserts and selective field  insertions  Thus we will concentrate on other ways to use this statement     6 1  Inserting NULL   s    In previous chapters  we have seen that not specifying a column value while doing selective field  INSERT operations results in a null value being set for them  We can also explicitly use the keyword NULL  in SQL to signify null values in statements like INSERT        INSERT INTO proglang_tbl VALUES  4     Tcl           Ousterhout     11988    NULL                      Listing  Inserting NULL values    Running a query to show the contents of the entire table helps us to verify the result           SELECT   FROM proglang_tbl                       id   language author year  
23. all contain a notice specifying the inclusion of the Open Publication material and appropriate copyright  notice     SEVERABILITY  If any part of this license is found to be unenforceable in any jurisdiction  the remaining  portions of the license remain in force     NO WARRANTY  Open Publication works are licensed and provided  as is  without warranty of any kind   express or implied  including  but not limited to  the implied warranties of merchantability and fitness for a  particular purpose or a warranty of non infringement     IV  REQUIREMENTS ON MODIFIED WORKS    All modified versions of documents covered by this license  including translations  anthologies  compila   tions and partial documents  must meet the following requirements  The modified version must be labeled  as such    The person making the modifications must be identified and the modifications dated    Acknowledgement of the original author and publisher if applicable must be retained according to normal  academic citation practices    The location of the original unmodified document must be identified    The original author   s  or authors     name s  may not be used to assert or imply endorsement of the resulting  document without the original author   s  or authors     permission     V  GOOD PRACTICE RECOMMENDATIONS    In addition to the requirements of this license  it is requested from and strongly recommended of redistribu   tors that  If you are distributing Open Publication works on hardcopy or CD 
24. d any corresponding data  back to the name proglang_tbl  We achieve this by creating a copy of the ta   ble using a combination of both CREATE TABLE and SELECT commands and learn a new clause AS                 CREATE TABLE  lt New Table gt  AS SELECT  lt Selection gt  FROM  lt Old Table gt                              Listing  general syntax for creating a new table from an existing one    Since our proglang_tbluk contains no records  we will push some sample data in it so that we can later ver   ify whether the records themselves got copied or not  Notice that we would have to give the field names  explicitly  else the second row  which contains no standard field value  would give an error similar to    num   ber of target columns must equal the number of specified values    in Ingres        Z  n  is  ys    J  H  2   a    T TO proglang_tbluk  id  language  author  year  standard   VALUES  1     Prolog        Colmerauer      1972      MISO               Z  ep   ea     INSERT INTO proglang_tbluk  id  language  author  year   VALUES  2   Perl      Warr   1987                                                      Z  n  eg  ys    J  H  Z   7    INSI TO proglang_tbluk  id  year  standard  language  author   VALUES  3   1964      ANSI              APL         Iverson                                 Listing  inserting some data into the proglang_tbluk table    To create an exact copy of the existing table  we use the same selection criteria as we have seen before       star   This w
25. ers and groups specific rights     2 2  Table Creation    We have already explored the concept of a table in a relational model  It is now time to create one  using a standard SQL command   CREATE TABLE     Note  the SQL standard by definition allows commands and keywords to be written in a case insensitive  manner  In this book we would use uppercase letters while writing them in statements  which is a widely  accepted practice        CREATE TABLE  lt Table Name gt     lt Field 1 gt   lt Data Type gt     lt Field 2 gt   lt Data Type gt                         lt Field N gt   lt Data Type gt                Listing  General Syntax of a CREATE TABLE statement    This is the simplest valid statement that will create a table for you  devoid of any extra options  We   ll fur   ther this with clauses and constraints as we go along  but for now let us use this general syntax to actually  create the table of programming languages we introduced in Chapter 1     The easiest way to get started with writing SQL statements in Ingres is to use their Visual SQL application  which gives you a graphical interface to write statements and view output  The usual place to find it on a  Windows system is Start   gt  Programs   gt  Ingres   gt  Ingres II   gt  Other Utilities     When you open it up  it gives you a set of dropdown boxes on the top half of the window where you can  select the database you wish to work upon and other such options  Since we   ll be using the same database  we created 
26. eved in a query using conditions  The WHERE clause is used    to achieve this and it can be combined with explicit field selection or ordering clauses to provide meaning   ful output     27     For a query to run successfully  it must have atleast two parts   the SELECT and the FROM clause  After  this we place the optional WHERE condition and then the ordering clause  Thus  if we wanted to see the  programming language  and it   s author  which was standardized by ANSI  we   d write our query as below                                      SELECT language  author FROM proglang_tbl WHERE standard       ANSI           Listing  Using a WHERE conditional    As you may have noticed  the query we forulated specified the language and author fields  but the condition  was imposed on a separate field altogether   standard  Thus we can safely say that while we can choose  what columns to display  our conditionals can work on a record with any of its fields        language   author  APL Iverson                   Figure  Output of the SELECT query with a WHERE conditional clause    You are by no means restricted to use    equals  for your conditions  It is perfectly acceptable to choose  other operators like  lt  and  gt   You can also include the ORDER BY clause and sort your output  An example  is given below                       SELECT language  author  year FROM proglang_tbl WHERE year  gt  1970  ORDER BY author                    Listing  Combining the WHERE and ORDER BY       langu
27. ference  with any options elected by the author s  and or publisher  is displayed in the repro   duction     Proper form for an incorporation by reference is as follows  Copyright  c   lt year gt  by  lt author   s name or  designee gt   This material may be distributed only subject to the terms and conditions set forth in the Open  Publication License  vX Y or later  the latest version is presently available at http   www opencon   tent org openpub      The reference must be immediately followed with any options elected by the author s  and or publisher of  the document  see section VI      Commercial redistribution of Open Publication licensed material is permitted    Any publication in standard  paper  book form shall require the citation of the original publisher and  author  The publisher and author   s names shall appear on all outer surfaces of the book  On all outer sur   faces of the book the original publisher   s name shall be as large as the title of the work and cited as posses   sive with respect to the title     II  COPYRIGHT    The copyright to each Open Publication is owned by its author s  or designee     HI  SCOPE OF LICENSE    The following license terms apply to all Open Publication works  unless otherwise explicitly stated in the  document     Mere aggregation of Open Publication works or a portion of an Open Publication work with other works or  programs on the same media shall not cause this license to apply to those other works  The aggregate work  sh
28. g our regu   lar FROM WHERE combination  The SQL 92 standard introduced the JOIN keyword to allow us to form  join queries  Since it was introduced earlier  the FROM WHERE syntax is more common  But now that the  majority of database vendors have implemented most of the SQL 92 standard  the JOIN syntax is also in  widespread use  Below is the JOIN syntax equivalent of the query we just wrote to display which author  created which programming language           SELECT author  language FROM authors_tbl JOIN newlang_tbl  ON language_id   id                       Listing  Rewriting our query using the JOIN SQL 92  syntax    Notice that instead separating the two tables using a comma  thereby making it a list   we use the JOIN  keyword  The columns which participate in the join condition are preceded by the ON keyword  The  WHERE clause can then be used after the join condition specification  ON clause  to specify any further  conditions if needed     10 3  Resolving ambiguity in join columns    In our example the join condition fields had distinct names   id and whatlanguage_id But   newlang_tbl  we kept the key field   s name as language_id  This would create an ambiguity in the join  condition  which would become the confusing language_id   language_id  To resolve this  we need to  qualify the column by prepending it by the table name it belongs to and a   period            H    SELECT author  language FROM authors_tbl JOIN newlang_tbl  ON authors_tbl language_id   newlang_tbl 
29. ge  Kemeny BASIC  Kurtz BASIC  Colmerauer BASIC  Wall BASIC  Ousterhout BASIC  Iverson BASIC  Kemeny Prolog  Kurtz Prolog  Colmerauer Prolog  Wall Prolog  Ousterhout Prolog  Iverson Prolog  Kemeny Perl  Kurtz Perl  Colmerauer Perl  Wall Perl  Ousterhout Perl                   Figure  the cartesian product of our tables    Another way to rewrite this query is to actually use the JOIN keyword with a preceding argument CROSS  as shown below                       SELECT author  language FROM authors_tbl CROSS JOIN newlang_tbl           Listing  rewriting the query using CROSS JOIN     39     10 5  Self Joins    Sometimes a table within its own columns has meaningful data but one  or more  of its fields refer to  another field in the same table  For example if we have a table in which we capture programming languages  which influenced other programming languages and denote the influence relationship by the language id  to  show the resolved output we would have to join the table with itself  This is also called a ConsiderSELF  JOIN                          CREATE TABLE inflang_tbl  id INTEGER PRIMARY KEY   language VARCHAR  20  NOT NULL   influenced_by INTEGER                   H  Z  ep   ea     ERT INTO inflang_tbl  id  language   VALUES  1     Fortran                                                                                       INSERT INTO inflang_tbl  id  language  influenced_by   ALUES  2   Pascal     3    INSERT INTO inflang_tbl  id  language  influenced_by   VALUES  
30. hich records you want to delete based on a condition  or delete all records but you cannot delete certain  fields of a record using this statement  The general syntax of the DELETE statement is given below      25                 DELE          H             E FROM  lt table_name gt  WHERE           lt condition gt         Listing  General syntax of DELETE    While putting a conditional clause in the DELETE is optional  it is almost always used  Simply because not  using it would cause all the records to be deleted from a table  which is a rarely valid need  We now write    the full statement to delete the record corresponding to Forth from the table                          DELETE FROM proglang_tbl WHERE          language       Forth           Listing  Deleting a record from the proglang_tbl table                                  id   language author year   standard  1 Prolog Colmerauer   1972 ISO  2 Perl Wall 1987  null   3 APL Iverson 1964 ANSI  4 Tcl Ousterhout 1988  null        Figure  table contents after the record deletion              26     7  ORGANIZING YOUR DATA    The number of fields you wish to store in your database would be a larger value than the five column  table we saw earlier chapters  Also  some assumptions were made intrinsically on the kind of data we will  store in the table  But this is not always the case in real life  In reality the data we encounter will be com   plex  even redundant  This is where the study of data modelling techniques and databa
31. id author language_id  1 Colmerauer 1  2 Wall 2  3 Ousterhout 4  4 Iverson 3  5 Kemeny 5  6 Kurtz 5                   Figure  authors_tbl contents       id   language   year   standard   Prolog 1972 ISO  Perl 1987  null   APL 1964 ANSI  Tcl 1988  null    BASIC 1964 ANSI                   MN  BR  QW  NM                         Figure  newlang_tbl contents    We now form a query to show our desired output   the list of all authors with the corresponding language  they developed  We choose our join column as the language_id field from the authors table  This corre   sponds to the id field in the languages table           SELECT author  language FROM authors_tbl  newlang_tbl  WHERE language_id   id                                   Listing  running a join operation on our two tables     37                          author language  Colmerauer Prolog  Wall Perl  Iverson APL  Ousterhout Tcl  Kemeny BASIC  Kurtz BASIC                Figure  result of our join query    The output of our query combines a column from both tables giving us a better report  The language_id    id is called the join condition  Since the operator used in the join condition is an equality operator      this  join is called as an equijoin  Another important thing to note is that the columns participating in the join  condition are not the ones we choose to be in the result of the query        10 2  Alternative Join Syntax    You would have noticed that we formed our join query without much special syntax  usin
32. ileges     Besides these  your database management system may give you other sets of commands to work more effi   ciently or to provide extra features  But it is safe to say that the ones above would be present in almost all  DBMS   s you encounter     1 2  Explaining Tables    A table in a relational database is nothing but a matrix of data where the columns describe the type of  data and the row contains the actual data to be stored  Have a look at the figure below to get a sense of the  visualization of a table in a database        id   language author year  1 Fortran Backus 1955  Lisp McCarthy   1958  3 Cobol Hopper 1959                               Figure  a table describing Programming Languages    The above table stores data about programming languages  It consists of 4 columns  id  language  author  and year  and 3 rows  The formal term for a column in a database is a field and a row is known as a record     There are two things of note in the figure above  The first one is that  the id field effectively tells you noth   ing about the programming language by itself  other than its sequential position in the table  The second is  that though we can understand the fields by looking at their names  we have not formally assigned a data  type to them i e  we have not restricted  not yet anyways  whether a field should contain alphabets or num   bers or a combination of both     The id field here serves the purpose of a primary key in the table  It makes each record in the
33. ill select all the fields from the existing table and create the new table with them alongwith  any records  It is possible to use only a subset of fields from the old table by modifying the selection criteria  and we will see this later     eye                   CREATE TABLE proglang_tbl AS SELECT   FROM proglang_tbluk                                Listing  recreating a new table from an existing one    We now run a simple SELECT query to see whether our objective was achieved or not              SELECT   FROM proglang_tbl                 id   language author year   standard  Prolog Colmerauer   1972 ISO  Perl Wall 1987  null   3  APL Iverson 1964 ANSI                         Figure  Result of the query run on proglang_tbl    4 3  Modifying tables    After a table has been created  you can still modify its structure using the ALTER TABLE command   What we mean by modify is that you can change field types  sizes  even add or delete columns  There are  some rules you have to abide by while altering a table  but for now we will see a simple example to modify  the field author for the proglang_tbl table                 ALTER TABLE  lt Table name gt   lt Operation gt   lt Field with clauses gt               Listing  General syntax of a simple ALTER TABLE command    We already know that we are going to operate on the proglang_tbl table and the field we wish to modify is  author which should now hold 30 characters instead of 25  The operation to choose in this case is ALTER  which
34. ing language details    Once you have removed the non atomicity of fields and repeating groups alongwith assigning unique id   s to  your tables  your table structure is now in the first normal form  The author table   s language_id field which  refers to the id field of the language table is called a foreign key constraint                                                              CREATE TABLE newlang_tbl  id INTEGER NOT NULL PRIMARY KEY   language VARCHAR 20  NOT NULL   year INTEGER NOT NULL   standard VARCHAR  10  NULL            Listing  creating the new programming languages table                                                                   CREATE TABLE authors_tbl  author_id INTEGER NOT NULL   author VARCHAR  25  NOT NULL   language_id INTEGE REFERENCES  newlang_tbl id                Listing  creating the authors table    Notice that in the author   s table we   ve made a foreign key constraint by making the  anguage_id field refer   ence the id field of the new programming languages table using the keyword REFERENCES  You can  only create a foreign key reference a primary or unique key  otherwise during the constraint creation time  we would recieve an error similar to the following                       Th referenced columns in table       E       E_PS0490 CREATE ALTER TABLE      newlang_tbl     do not form a unique constraint  a foreign key may only reference  columns in a unique or primary key constraint      Thu May 17 15 28 45 2012      29     Since we have
35. language_id                             Listing  Resolving the naming ambiguity by qualifying the columns    Another way to solve such ambiguity is to qualify the columns using table aliases  The concept is to give a  short name to a table and then use this to qualify the columns instead of a long  unwieldy table name      38           n       ELECT author  language FROM authors_tbl a JOIN newlang_tbl l  ON a language_id   l id                       Listing  using table aliases    Here the authors table is given the alias a and the languages table is given the alias    It is generally consid   ered a good practice to qualify column names of a join condition regardless of whether there is a name  ambiguity or not     10 4  Cross Joins    You might think what would happen if we left out the join condition from our query  Well what hap   pens in the background of running a join query is that first all possible combinations of rows are made from  the tables participating in the join  Then the rows which satisfy the join condition are chosen for the output   or further processing   If we leave out the join condition  we get as the output all possible combinations of  records  This is called a CROSSJOIN or CartesianProduct of the tables usually denoted by the sign X                    SELECT author  language FROM authors_tbl  newlang_tbl              Listing  query for showing the cartesian product of our tables                                                          author langua
36. management systems  including Ingres  allow you to create multiple databases  For  practice purposes it   s advisable to create your own database  so that you are free to perform any operations  on it     Most database systems differ in the way they provide database creation facilities  Ingres achieves the same  by providing you multiple ways to do this  including through the Visual DBA utility  However for didactic  purposes  we will instead use a command operation to create our database  Open up the Ingres Command  Prompt from the program menu  usually found inside Start Menu  gt Programs  gt Ingres for Microsoft Win   dows systems   and enter the command as below        C  Documents and Settings rahulb gt createdb testdb  Creating database    testdb      Creating DBMS System Catalogs   Modifying DBMS System Catalogs   Creating Standard Catalog Interface   Creating Front end System Catalogs  Creation of database    testdb    completed successfully              Listing  using createdb and its sample output    The command createdb is used to create a database which will serve as a holding envelope for your tables   In the example and output shown above  we created a database called testdb for our use  You  or more  specifically your system login  are now the owner of this database and have full control of entities within it   This is analogous to creating a file in an operating system where the creator gets full access control rights     10     and may choose to give other us
37. n their purpose  How   ever  there are a couple of differences between them     1  A primary key field cannot take on a NULL value  whereas a field with a unique constraint can   However  there can be only one such record since each value must be unique due to the very  definition of the constraint     2  You are allowed to define only one primary key constraint but you can apply the unique con   straint to as many fields as you like      16     4  OPERATIONS ON TABLES    You might have noticed that we keep on making new tables whenever we are introducing a new con   cept  This has had the not so desirable effect of populating our database with many similar tables  We will  now go about deleting unneeded tables and modifying existing ones to suit our needs     4 1  Dropping Tables    The deletion of tables in SQL is achieved through the DROP TABLE command  We will now drop  any superfluous tables we have created during the previous lessons        DROP TABLE proglang_tbl   DROP TABLE proglang_tblcopy   DROP TABLE proglang_tbltmp                                      Listing  dropping the temporary tables we created    4 2  Creating new tables from existing tables    You might have noticed that we have dropped the proglang_tbi table and we now have with us only  the proglang_tbluk table which has all the necessary constraints and fields  The latter   s name was chosen  when we were discussing the unique key constraint but it now seems logical to migrate this table structure   an
38. ng  a CREATE TABLE statement with a primary key    ID fields are usually chosen as primary fields  Note that in this particular table  the language field would  have also worked  since a language name is unique  However  if we have a table which describes say people    since two people can have the same name  we usually try to find a unique field like their SSN number or  employee ID number      15     3 3  Unique Key Constraint    A unique key like a primary key is also used to make each record inside a table unique  Once you  have defined the primary key of a table  any other fields you wish to make unique is done through this con   straint  For example  in our database it now makes sense to have a unique key constraint on the language  field  This would ensure none of the records would duplicate information about the same programming lan   guage                                                                 CREATE TABLE proglang_tbluk     id INTEGER NOT NULL PRIMARY KEY   language VARCHAR 20  NOT NULL UNIQUE   author VARCHAR  25  NOT NULL    year INTEGER NOT NULL    standard VARCHAR 10  NULL               Listing  a CREATE TABLE statement with a primary key and a unique constraint    Note that we write the word UNIQUE in front of the field and omit the KEY in this case  You can have as  many fields with unique constraints as you wish     3 4  Differences between a Primary Key and a Unique Key    You might have noticed that the two constraints discussed above are similar i
39. ng_tbl   Owner  rahulb   Created  20 feb 2012 17 04 28  Location  ii_database   Type  user table   Version  II10 0   Page size  8192   Cache priority  0   Alter table version  4   Alter table totwidth  76   Row width  76   Number of rows  3   Storage structure  heap   Compression  none   Duplicate Rows  allowed   Number of pages  3   Overflow data pages  0   Journaling  nabled after the next checkpoint       Base table for view  no          Permissions  none   Integrities  none   Optimizer statistics  none   Column Information    Column Name Type Length Nulls Defaults Key Seq  id integer 4 no no   language varchar 20 no no   author varchar 30 yes null   year integer 4 no no   standard varchar 10 yes nul                    Secondary indexes  none       Figure  the result of running the HELP TABLE command    While there is a lot of information in the result  we are currently interested in the Column Information sec   tion which now displays the new length of the author field  i e  30  But it is also important to note that our  ALTER TABLE statement just removed the not null constraint from the field  To retain the same  we would  have to specify the constraint in the ALTER TABLE command since the default behavior is to allow NULL  values     4 5  Verifying the result in other DBMS   s    The HELP command we just saw is specific to the Ingres RDBMS  it is not a part of the SQL stan   dard  To achieve the same objective on a different RDBMS like Oracle  you are provided with the 
40. of this work or derivative works in whole or in part in standard  paper  book  form for commercial purposes unless prior permission is obtained from the copyright holder     To accomplish this  add the phrase    Distribution of the work or derivative of the work in any standard   paper  book form is prohibited unless prior permission is obtained from the copyright holder     to the  license reference or copy     PREFACE    Welcome to the first edition of A Primer on SQL  As you would be able to see  the book is fairly  short and is intended as an introduction to the basics of SQL  No prior experience with SQL is necessary   but some knowledge of working with computers in general is required  My purpose of writing this was to  provide a gentle tutorial on the syntax of SQL  so that the reader is able to recognize the parts of queries  they encounter and even be able to write simple SQL statements and queries themselves  The book however  is not intended as a reference work or for a full time database administrator since it does not have an exaus   tive topic coverage     For the curious  the book was typeset using Troff and its ms macro set  Give it a whirl  its quite powerful     Your questions  comments  criticism  encouragement and corrections are most welcome and you can e mail  me at rhlbatra aht hotmail dot com  TIl try answering all on topic mails and will try to include sugges   tions  errors and omissions in future editions     Rahul Batra  8th October 2012     ACKNOW
41. ontained within your  database  You might have noticed that the INSERT and CREATE TABLE commands were referred to as  statements  but a fetching operation with SELECT falls under the query category     Most of your day to day operations in a SQL environment would involve queries  since you   d be creating  the database structure once  modifying it only on a need basis  and inserting rows only when new data is  available  While a typical SELECT query is fairly complex with many clauses  we will begin our journey by  writing down a query just to verify the contents of our table  The general syntax of a simple query is given  below           SELECT  lt Selection gt  FROM  lt Table Name gt                        Listing  General Syntax of a simple SQL query        Qe    Transforming this into our result verification query is a simple task  We already know the table we wish to  query   proglang_ tbl and for our selection we would use    star   which will select all rows and fields from  the table              SELECT   FROM proglang_tbl     The output of this query would be all the  3  rows displayed in a matrix format just as we intended  If you  are running this through Visual SQL on Ingres  you would get a message at the bottom saying   Total  Fetched Row s   3      13     3  CONSTRAINTS    A constraint is a rule that you apply or abide by while doing SQL operations  They are useful in  cases where you wish to make the data inside your database more meaningful and or structured 
42. oring the actual data     SQL stands for Structured Query Language and it is the de facto standard for interacting with relational  databases  Almost all database management systems you   ll come across will have a SQL implementation   SQL was standardized by the American National Standards Institute  ANSI  in 1986 and has undergone  many revisions  However  all DBMS   s do not strictly adhere to the standard defined but rather remove some  features and add others to provide a unique feature set  Nonetheless  the standardization process has been  helpful in giving a uniform direction to the vendors in terms of their interaction language     1 1  SQL Commands Classification    SQL is a language for interacting with databases  It consists of a number of commands with further  options to allow you to carry out your operations with a database  While DBMS   s differ in the command  subset they provide  usually you would find the classifications below     1  Data Definition Language  DDL   CREATE TABLE  ALTER TABLE  DROP TABLE etc   These commands allow you to create or modify your database structure     2  Data Manipulation Language  DML   INSERT  UPDATE  DELETE  These commands are used to manipulate data stored inside your database   3  Data Query Language  DQL   SELECT   Used for querying or selecting a subset of data from a database     4  Data Control Language  DCL   GRANT  REVOKE etc   Used for controlling access to data within a database  commonly used for granting user priv
43. previously  testdb   go ahead and select the options as specified below     Default User  lt your username gt   Default Server INGRES  Database testdb    The actual SQL statement you would be writing to create your table is given below                       CREATE TABLE proglang_tbl    id INTEGER    language VARCHAR 20    author VARCHAR  25     year INTEGER                            Listing  Creating the programming languages table    Press the    Go    or F5 button when you   re done entering the query in full  If you get no errors back from Vis   ual SQL  then congratulations are in order since you   ve just created your first table     The statement by itself is simple enough since it resembles the general syntax of CREATE TABLE we dis   cussed beforehand  It is interesting to note the data types chosen for the fields  Both id and year are speci   fied as integers for simplicity  even though there are better alternatives  The language field is given a space      i    of 20 characters to store the name of the programming language while the author field can hold 25 charac   ters for the creator   s name     The semicolon at the last position is the delimiter for SQL statements and it marks the end of a statement     2 3  Inserting data    The table we have just created is empty so our task now becomes insertion of some sample data  inside it  To populate this data in the form of rows we use the DML command INSERT  whose general syn   tax is given below        INSERT INTO  l
44. purposes    While creating a column alias will not permanantly rename a field  it will show up in the resultant output                    id   language creator   1 Prolog Colmerauer  2 Perl Wall   3 APL Iverson   4 Tcl Ousterhout                   Figure  the column alias output    8 3  Using the LIKE operator    While putting conditions on a query using WHERE clauses  we have already seen comparison opera   tors   and JS NULL  Now we take a look at the LIKE operator which will help us with wildcard compar   isons  For matching we are provided with two wilcard characters to use with LIKE     1     Percent  Used to match multiple characters including a single character and no character     2  _  Underscore  Used to match exactly one character     We will first use the   character for wildcard matching  Let us suppose we wish to list out languages that  start with the letter P                                   SELECT   FROM proglang_tbl WHERE language LIKE  P            Listing  using the LIKE operator and   wildcard    The output of the above query should be all language records whose name begins with the letter capital P   Note that this would not include any language that starts with the small letter p              id   language author year   standard  Prolog Colmerauer   1972 ISO  2 Perl Wall 1987  null                          Figure  all languages starting with P    We can see that using the   wildcard allowed us to match multiple characters like erl in the case of Perl  
45. s us to count only non duplicate values of the input specified  To illustrate  this concept  we will now insert some rows into our proglang_tbl table           INSERT INTO proglang_tbl  id  language  author  year  standard  VALUES   5     Fortran      Backus  1957  ANSI                            INSERT INTO proglang_tbl  id  language  author  year  standard  VALUES   6     PL I        IBM     1964   ECMA                        Listing  Inserting some new rows in our programming languages table    Note the new data choice that we are populating  With Fortran we are adding a new programming language  that has a standard by the ANSI  With PL I we now have a third distinctive standards organisation   ECMA   PL I also shares the same birth year as APL  1964  giving us a duplicate year field  Now let us run a query  to check how many distinct year and standard values we have           SELECT COUNT  DISTINCT year  FROM proglang_tbl                       Listing  Counting distinct year values          SELECT COUNT  DISTINCT standard  FROM proglang_tbl                       Listing  Counting distinct standard values    The first query result is straightforward  We have 6 rows but two of them share a common year value  thus  giving us the result 5  In the second result  out of 6 rows only 4 of them have values  Two rows have a  NULL value in them meaning those languages have no standard  Among the 4 rows  two of them share a  common value  giving us the result   3  Note that the DISTI
46. se design come in   While it is advised that the reader refer to a more comprehensive treatise on this subject  nonetheless we  will try to study some good relational database design principles since the study would come in handy  while learning SQL statements for multiple tables     7 1  Normalization    Let us suppose we have a database of employees in a fictional institution as given below  If the data   base structure has not been modelled but has been extracted from a raw collection of information available   redundancy is expected                                      employee_id name skill manager_id location  1 Socrates Philosophy  null  Greece  2 Plato Writing 1 Greece  3 Aristotle Science 2 Greece  4 Descartes   Philosophy  null  France  4 Descartes   Philosophy  null  Netherlands          Figure  the fictional firm   s database    We can see that Descartes has two rows because he spent his life in both France and Netherlands  At a later  point we decide that we wish to classify him with a different skill  we would have to update both rows since  they should contain an identical  primary  skill  It would be easier to have a separate table for skills and and  somehow allow the records which share the same skill to refer to this table  This way if we wish to reflect  that both Socrates and Descartes were thinkers in Western Philosophy renaming the skill record in the sec   ond table would do the trick     This process of breaking down a raw database into logical tables
47. split the author field into  two parts   author  and author2  If a language has only one author  the author2 field would contain a null  value  Can you spot the problem that will arise from this design decision                                      id   language author1 author2   year   standard  1 Prolog Colmerauer  null  1972 ISO  2 Perl Wall  null  1987  null   3 APL Iverson  null  1964 ANSI  4 Tcl Ousterhout  null  1988  null   5 BASIC Kemeny Kurtz 1964 ANSI             Figure  a table with a repeating group    This imposes an artificial constraint on how many authors a language can have  It seems to work fine for a  couple of them  but what if a programming language was designed by a committee of a dozen or more peo   ple  At the database design time  how do we fix the number of authors we wish to support  This kind of  design is referred to as a repeating group and must be actively avoided     7 4  Splitting the table    The correct design to remove the problems listed above is to split the table into two   one holding the  author details and one detailing the language      28                          author_id author language_id  1 Colmerauer 1  2 Wall 2  3 Ousterhout 4  4 Iverson 3  5 Kemeny 5  6 Kurtz 5                   Figure  a table holding author details       id   language   year   standard   Prolog 1972 ISO  Perl 1987  null   APL 1964 ANSI  Tcl 1988  null    BASIC 1964 ANSI                   aj BR  WB  NM                         Figure  a table holding programm
48. t Table Name gt   VALUES     Valuel         Value2     i                         Listing  General syntax of INSERT TABLE    Fitting some sample values into this general syntax is simple enough  provided we keep in mind the struc   ture of the table we are trying to insert the row in  For populating the proglang_tbl with rows like we saw  in chapter 1  we would have to use three INSERT statements as below           INSERT INTO proglang_tbl VALUES  1     Fortran         Backus     1955    INSERT INTO proglang_tbl VALUES  2     Lisp         McCarthy     1958    INSERT INTO proglang_tbl VALUES  3   Cobol      Hopper     1959                                          Listing  Inserting data into the proglang_tbl table    If you do not receive any errors from Ingres Visual SQL  or the SQL interface for your chosen DBMS    then you have managed to successfully insert 3 rows of data into your table  Notice how we   ve carefully  kept the ordering of the fields in the same sequence as we used for creating our table  This strict ordering  limitation can be removed and we will see how to achieve that in a little while     2 4  Writing your first query    Let us now turn our attention to writing a simple query to check the results of our previous operations  in which we created a table and inserted three rows of data into it  For this  we would use a Data Query  Language  DQL  command called SELECT     A query is simply a SQL statement that allows you to retrieve a useful subset of data c
49. tabase management system with tons of features   http   www  postgresql  org     5  MySQL  Oracle Corporation     Popular and easy to use open source DBMS   http   www mysql com     6  Firebird    Full featured  open source relational DBMS   http   www firebirdsql org     7  SQLite  D  Richard Hipp     Popular  small and free to use embeddable database system   http   sqlite org     8  Access  Microsoft Corporation     Personal relational database system with a graphical interface   http   office microsoft com access    GLOSSARY    Alias    Cross Join    Database    DBMS    Field    Foreign Key    Normalization    Record    SQL    Table     41     A temporary name given to a table in the FROM clause     A join listing all possible combination of rows without filtering     A collection of organized data  Can be stored in a digital format like on a computer     Database Management System  A software to control and manage digital databases     A column in a table     A column in a table that matches a primary key column in another table     Breaking down a raw database into tables and removing redundancies     A row of a table     Structured Query Language  A language used to interact with databases     A matrix like display abstraction of data in row column format     
50. th embedded NULL  values in their fields        INSERT INTO  lt Table_Name gt     lt Field Name 1 gt     lt Field Name 2 gt             lt Field Name N gt    VALUE    lt Value For Field 1 gt     lt Value For Field 2 gt                               lt Value For Field N gt          Listing  General Syntax of INSERT with selected fields    Since we specify the field order in the statement itself  we are free to reorder the values sequence in the  same statement thus removing the first limitation  Also  if we wish to enter a empty  NULL  value in any of  the fields for a record  it is easy to do so by simply not including the field   s name in the first part of the  statement  The statement would run fine without specifying any fields you wish to omit provided they do  not have a NOT NULL constraint attached to them  We now write some INSERT statements for the  proglang_tblcopy table  in which we try to insert some languages which have not been standardized by any     14     organizations and some which have been        H  Z  uv  isa    ERT INTO proglang_tblcopy  id  language  author  year  standard   VALUES  1     Prolog        Colmerauer      1972      ISO            H  Z  n  ea    ERT INTO proglang_tblcopy  id  language  author  year   VALUES  2   Perl      Wall      1987                                        H  Z  ep   ea   ys    1    INTO proglang_tblcopy  id  year  standard  language  author   VALUES  3   1964     ANSI         APL      Iverson                             
51. tire record  Thus we  achieved our purpose of counting records in a table     What would happen if instead of giving an entire record to count  we explicitly specify a column  And  what if the column had null values  Let   s see this scenario by counting on the standard field of the table           SELECT COUNT  standard  FROM proglang_tbl                    Listing  Query to count number of standard field values in the table    The output in this case would be the value 2  because we only have two records with non null values in the  standard field     8 2  Column Aliases    Queries are frequently consumed directly as reports since SQL provides enough functionality to give mean   ing to data stored inside a RDBMS  One of the features allowing this is Column Aliases  which let you  rename column headings in the resultant output  The general syntax for creating a column alias is given  below              SELECT  lt columnl gt   lt aliasl gt    lt column2 gt   lt alias2 gt      from  lt table gt                  Listing  General Syntax for creating column aliases     31     For example  we wish to output our programming languages table with a few columns only  But we do not  wish to call the authors of the language as authors  The person wanting the report wishes they be called  creators  This can be simply done by using the query below                    SELECT id  language  author creator from proglang_tbl           Listing  Renaming the author field to creator for reporting 
    
Download Pdf Manuals
 
 
    
Related Search
    
Related Contents
Istruzioni per l`uso  400Amp True RMS AC/DC Clamp Meter  DISPOSITIVI DI DEUMIDIFICAZIONE  191 KB - Bureau de la sécurité des transports du Canada  lectures (pour anartiste #6) art histoire individualisme  The CVC3 User's Manual  User Manual - ADFWeb.com  Calibration and Switching Module, CSM, User`s Manual  Important Notes v1.2 snom 220    Copyright © All rights reserved. 
   Failed to retrieve file