We do, and in this book we provide you with an in-depth yet concise tutorial on using Structured Query Language SQL, the standard that defines how to create and manipulate databases and
Trang 1Chapter 3 - Modifying Data
Chapter 4 - Summarizing and Grouping Data
Chapter 5 - Performing Calculations and using
Functions Chapter 6 - Combining SQL Queries
Trang 2Chapter 13 - Triggers
Chapter 14 - Case Study: Building a Product Catalog Chapter 15 - Case Study: Implementing Role-Based
Security Appendix A - Executing SQL Statements
Appendix B - Setting up the InstantUniversity
Database Appendix C - Data Types
Trang 3Do you speak SQL? We do, and in this book we provide you with an in-depth yet concise tutorial on using
Structured Query Language (SQL), the standard that defines how to create and manipulate databases and the data they store SQL is a simple yet powerful
language, and you’ll be amazed at how many things you can do with just a few lines of code.
We teach you all the basic concepts and provide
practical examples relevant to your daily programming tasks Once you’ve mastered the fundamentals, this book will serve you well as a handy reference on SQL usage It covers all the major SQL statements you’re likely to need when programming databases and
Whether you’re just starting out with SQL, working
with an unfamiliar database, or in need of a desktop reference, this book will provide you with the help and information you need to build effective database
Trang 4About the Authors
Christian Darie is an independent IT consultant
specializing in Microsoft technologies Having worked with computers since he was a child, he won his first prize at the age of 12 in the first programming contest
nanotechnologist, so perhaps one day you might
recognize his name as he receives a Nobel Prize For now, though, Karli’s computing interests include all
things mobile and everything NET Karli is also a
snowboarding enthusiast and wishes he had a cat.
Trang 5in any form or by any means, electronic or mechanical, including
photocopying, recording, or by any information storage or retrieval
system, without the prior written permission of the copyright owner andthe publisher
ISBN (pbk): 1-59059-218-2
Printed and bound in the United States of America 10987654321
Trademarked names may appear in this book Rather than use a
trademark symbol with every occurrence of a trademarked name, we usethe names only in an editorial fashion and to the benefit of the trademarkowner, with no intention of infringement of the trademark
Technical Reviewers: Cristof Falk, Slavomir Furman, Brad Maiani,
Judith M Myerson, Johan Normén, David Schultz
Editorial Board: Dan Appleman, Craig Berry, Gary Cornell, Steven
Rycroft, Julian Skinner, Martin Streicher, Jim Sumser, Karen Watterson,Gavin Wray, John Zukowski
Lead Editor: Tony Davis
Assistant Publisher: Grace Wong
Trang 6<orders@springer-ny.comny.com Outside the United States: fax +49 6221 345229, email
>, or visit http://www.springer-<orders@springer.de>, or visit http://www.springer.de
For information on translations, please contact Apress directly at 2560Ninth Street, Suite 219, Berkeley, CA 94710 Phone 510-549-5930, fax510-549-5939, email <info@apress.com>, or visit
http://www.apress.com
The information in this book is distributed on an "as is" basis, withoutwarranty Although every precaution has been taken in the preparation ofthis work, neither the author(s) nor Apress shall have any liability to anyperson or entity with respect to any loss or damage caused or alleged to
be caused directly or indirectly by the information contained in this work
Trang 7Beginning ASP.NET E-Commerce with Visual Basic NET and Visual Studio NET He has authored MCAD preparation material and various
SkillDrill tests, such as C# Programming, Microsoft COM+, and DB2Development, which can be taken at http://www.skilldrill.com
Cristian is at Politehnica University of Bucharest, studying automaticcontrol and industrial informatics He can be contacted through
http://www.ChristianDarie.ro
My big thanks go to Dave, Julian, and Chris for being such great people
to work with
Trang 8for multicolored clothing He started out with the intention of becoming aworld-famous nanotechnologist, so perhaps one day you might recognizehis name as he receives a Nobel Prize For now, though, Karli's
computing interests include all things mobile and everything NET Karli isalso a snowboarding enthusiast and wishes he had a cat
JULIAN SKINNER studied Germanic etymology before joining the former
Wrox Press He has consequently spent most of the last four-and-a-halfyears reading, editing, and writing books about programming, focusing onMicrosoft technologies and, in particular, on C# and the NET Framework
He contributed many sections and code samples, and often entire
chapters, for the books he worked on at Wrox, mostly hiding behind therelative anonymity of an "additional material" credit, but he is credited as
a coauthor of, among other titles, Professional ADO.NET.
CHRIS HART is a developer and author based in Birmingham (in the
United Kingdom, not Alabama) Chris spent most of the last four years as
a member of the technical editorial team at the former Wrox Press andhas been programming on a variety of systems since the age of 10 Shespends most of her time working with Microsoft technologies and hasbeen heavily involved with NET since it was first released as an earlyalpha preview She's currently working for Business Post and is
developing NET Compact Framework/SQL CE applications and 2D
barcode scanning components in Delphi
KEVIN HOFFMAN started programming at the age of 10 when his
grandfather gave him a Commodore VIC-20 that he refurbished, and he'sbeen addicted to programming ever since He has worked on everything
Trang 9of NET when it was first handed out in early pre-beta form and has beencoding with it ever since He's currently employed in Houston, Texas,where he creates enterprise applications with the NET Framework for afinancial services company
Trang 10Structured query language (SQL) is the language of the database It's astandard that defines how to manipulate almost every aspect of
database, from creating the database and tables themselves to creating,reading, inserting, updating, and deleting data in the database This
standard is then implemented and extended differently by each databasesystem vendor
The current version of the SQL standard is SQL-99 Most major databaseplatforms now adhere fairly closely to this standard with a couple of
exceptions Microsoft Access, for example, has only recently (with
Access XP) adopted the SQL-92 standard Previous editions of Accesssupported only SQL-89
In this book, we'll walk through all the major SQL statements you're likely
to need when programming databases We'll highlight differences
between the standard and implementations used in five major databasesystems:
Trang 11This book is designed to meet the needs of both the novice SQL
programmer who needs a bit of syntactical help and the developer usingSQL day to day who needs a handy desktop SQL reference You don'tneed to have done much database programming before, but some
experience with databases will be useful You should also have one ofthe five database systems mentioned earlier to gain the most benefitsfrom this book
Trang 12This book covers the following topics:
Chapter 1, "Understanding SQL and Relational Databases":
Introduces and clarifies key concepts you'll use throughout thebook This chapter also looks at relational database design
HAVING statements This chapter also highlights differencesbetween platforms when it comes to displaying selected rows
Chapter 5, "Performing Calculations and Using Functions":
Describes many more available functions that can be used forperforming calculations, manipulating strings, working with datesand times, and so on It also covers creating your own functions
Chapter 8, "Hiding Complex SQL with Views": Discusses
creating views for storing queries It also discusses how you canuse views to grant restricted access to data to users withouthaving to worry about them harming the underlying data
Trang 13Chapter 11, "Users and Security": Discusses the key concepts
of user authentication and authorization, focusing on the use ofroles and permissions to restrict or enable certain database
Trang 14Appendix B, "Setting Up the InstantUniversity Database":
Describes how to create and populate the InstantUniversitysample database that's used throughout the examples in thisbook
Appendix C, "Data Types": Lists the different data types
available to SQL programmers on each of the different databaseplatforms
Trang 15To run the code in this book, you'll need to have one of the followingdatabase platforms installed on a compatible operating system:
Trang 16We always value hearing from our readers, and we want to know whatyou think about this book: what you liked, what you didn't like, and whatyou think we can do better next time
How to Tell us Exactly What You Think
You might just want to tell us how much you liked or loathed the book inquestion Or you might have ideas about how this whole process could
be improved In either case, you should e-mail
<support@apress.com> Please be sure to mention the book's ISBNand title in your message You'll always find a sympathetic ear, no matterwhat the problem is Above all you should remember that we do careabout what you have to say, and we will do our utmost to act upon it
What We Can't Answer
Obviously with an ever-growing range of books and an ever-changingtechnology base, there's an increasing volume of data requiring support.Although we endeavor to answer all questions about the book, we can'tsolve bugs in your own programs that you've adapted from our code.However, do tell us if you're especially pleased with the routine you
developed with our help
Trang 17The source code for this book is available to readers at
http://www.apress.com in the Downloads section
Trang 18We understand that errors can destroy the enjoyment of a book and cancause many wasted and frustrated hours, so we seek to minimize thedistress they can cause The following sections will explain how to findand post errata on our Web site to get book-specific help
Finding Errata
Before you send in a query, you might be able to save time by finding theanswer to your problem on our Web site at http://www.apress.com.Locate this book in the online catalog or within the book's category and
go to the book's Web page Check to see if there is a Corrections link Ifthere is, click the link to see the posted errata
Adding an Erratum to the Web Site
If you want to point out an erratum or directly query a problem in thebook, then click the Submit Errata link on the book's Web page Please
be sure to include your name and e-mail and the chapter number, pagenumber, and a brief description of the problem, as requested
We won't send you junk mail We need the details to save your time andours
Queries will be forwarded to the book's authors and editor You may
receive a direct e-mail reply, and/or the erratum will be posted to the Website so all readers can benefit
Trang 19For author and peer discussion, join the Apress discussion groups If youpost a query to our forums, you can be confident that many Apress
authors, editors, and industry experts are examining it At
forums.apress.com you'll find a number of different lists that will helpyou, not only while you read this book but also as you develop your ownapplications To sign up for the Apress forums, go to
forums.apress.com and select the New User link
Trang 20Chapter 1: Understanding SQL and Relational Databases
At the heart of almost every large-scale application, whether it be a Webapplication or a corporate intranet, is the database The modern
database has moved on a long way from the flat-file address-card style ofdatabase storage, and you now have the ability to store terabytes of
information about customers, products, contacts, and so on It's all verywell storing all of this data in a central database, but simply storing datadoesn't give you much in return if you can't find some way to organize,access, and work with this data Structured Query Language (SQL) is astandardized language designed to access and manipulate data stored inrelational databases and to work with the databases themselves
This chapter explains what SQL is and how it works You'll also be
looking at some relational database theory because to be able to workconfidently with SQL, you need to understand some of these core
concepts
Trang 21SQL is a language that's used for accessing and manipulating databasesand, more importantly for the programmer, the data that's contained indatabases SQL statements give you the power to manipulate all aspects
of your database using code instead of visual tools
Note SQL is pronounced either "ess-kue-ell" or "see-kwell"
depending on your preference We go for the latter, so no
complaints about us writing "a SQL statement" rather than "anSQL statement," please!
In essence, what you have is a "front end" that sends a SQL statement(or a set of SQL statements) to a "back-end" data store For a
contain All data in these databases is held in rows (also known as
records) that span the columns (fields) of a table within the database, and
the values for each column are of a specified data type Because the
data is stored in a similar structure on different platforms, you can usesimilar techniques to access and manipulate the data Furthermore, each
of these platforms uses SQL as the universal language to implement
these techniques In other words, SQL is the language that every
Trang 22What about your "front end"? Well, you have a variety of options here,too For example, your front end might be one of the following:
A Web page that allows a customer to enter information into a
Search box Based on the data entered, a SQL statement will beconstructed, sent to the back-end data store, and executed, andthe specific data that the customer requested will be returned anddisplayed on the Web page
And here you have the real beauty of SQL: Regardless of the languageused to create the front end—be it ASP.NET, Java, Visual Basic, C#, orvirtually any other language—SQL is the language that all of these frontends will use to communicate with a relational database
In addition to all this, you can also use SQL to administer the relationaldatabase itself—for example, to create or remove new database storagestructures or to access and modify the security settings for that database.The bottom line is that regardless of the language in which you program
or the particular database in which you store your data, knowledge ofSQL is an essential skill
Introducing the SQL Standard
SQL has quite a long history It was first invented at IBM in 1974–75 andwas used to communicate with mainframe databases Later, in 1979, thefirst commercial relational database product that supported SQL wasreleased by Oracle, and in 1986–87 the ANSI and ISO standards
Trang 23the language with which this book is most concerned It providesfour basic SQL statements:
SELECT statements that are used to read and extractdata from the database This portion of the language isoften given a subheading all its own, namely Data QueryLanguage (DQL); these SQL statements can correctly be
referred to as SQL queries.
INSERT statements that are used to insert new rows ofdata into the database
UPDATE statements that are used to modify existing rows
of data
DELETE statements that are used to remove rows of datafrom the database
Data Definition Language (DDL): This is used to create, modify,
or remove tables and other database objects It includes suchstatements as CREATE TABLE, ALTER TABLE, DROP TABLE,CREATE INDEX, and so on You'll investigate this component ofthe language in Chapter 12, "Working with Database Objects."
Data Control Language (DCL): This is used to manage
database security, manage which users have access to whichtables and what data, and so on You'll investigate this in Chapter
11, "Users and Security."
Trang 24How SQL Works
As its name suggests, a large part of the Structured Query Language is dedicated to the process of querying a relational database That is, you
can use SQL to ask certain "questions" of the database and have the
"answer" (a row or rows of data) returned For example, say you have adatabase that stores information about a particular university and thecourses it runs, the people who teach those courses, and so on Youmight ask the question "Which courses are offered by the university?" ASQL query such as the following might do the trick:
SELECT * FROM Courses
What this query is basically saying in database-speak is "Give me a list ofall of the information stored for all of the courses in the Courses table."This query would work against any relational database as long as it
contained a Courses table Now, the Courses table might hold a
variety of different information, and perhaps you're only interested in thename of the courses offered Then you might modify your SQL query asfollows:
SELECT CourseName FROM Courses
Now, this query would work against any relational database as long as ithad a Courses table that contained a column called CourseName
What it's saying is "Give me only the names of all the courses in the
Courses table." In other words, give you all the rows stored in the
database but only return the values stored in the CourseName column.Any other information stored in the table, such as the number of creditsrequired to pass each course (perhaps stored in a Credits column)would be ignored Finally, suppose you wanted to see data from all of thecolumns in the Courses table but only for Chemistry courses:
SELECT * FROM Courses WHERE CourseName = 'Chemistry'
Trang 25operations will require far more complex SQL code! Like any language,you have a lot of syntax and usage information to learn, but SQL doeshave one important advantage: Once you get used to it, the syntax issimple indeed and can often be interpreted even by people who havenever seen it before
One important point to take home from this discussion is that your SQLstatements merely define which data you want to retrieve You don't
specify how your database should go about retrieving them SQL is a
declarative language, not a procedural language (such as Java, VisualBasic, and so on) You just specify what you want to do in SQL and letyour Relational Database Management System (RDBMS) decide thebest way to actually do it
interface, RDBMSs include an Application Programming Interface (API)that can be used by other applications to access data
Each RDBMS will be capable of maintaining a large number of individualdatabases (in other words, the data storage constructs and the actualdata)
One crucial part of RDBMSs is the database engine This part of an
RDBMS is responsible for accessing data, as opposed to other parts thatmay relate to manipulating database manipulation more abstractly,
dealing with user input, displaying results, and so on As such, when youprogrammatically access databases stored by RDBMSs, you're really
Trang 26Often you'll use an additional layer of abstraction between your
applications and the database engine, that is called a data provider A
data provider is usually a service available to all code running on a
computer that mediates between your applications and the databaseengine you're using, making it easier to execute queries In some casesthis can be a great advantage because swapping between databasescan be as simple as using a different provider (one for SQL Server
instead of one for Oracle, for example) However, this isn't always thecase because there may be fundamental differences to overcome withsuch a migration
Different RDBMSs are optimized in different ways, and they provide avariety of functionality depending on their purpose More powerful (andtherefore more expensive) RDBMSs will provide better support for
concurrency (coping with multiple users accessing data at the same
time), provide more simultaneous connections, provide better
performance, provide stronger security, provide more versatile backupand failsafe procedures, allow transactions (where single operations mayinvolve several database accesses, and that operation is only successful
if all accesses complete), and generally just be a little more robust
Luckily, mastering the basic use of databases is a bit like learning to drive
a car Unless you learn on an automatic before switching to a manual,you'll be able to drive most vehicles You might not have the in-car stereoyou're used to, but you'll get by The main reason for all this is that prettymuch all RDBMSs that are currently available support SQL, which is ofcourse what this book is all about You only need to learn SQL once, andyou should find that everything is fine regardless of the RDBMS you use
Introducing SQL Dialects
The idea that you only need to learn SQL once pretty much holds true forall basic data manipulations Nevertheless, you'll notice differences asyou move from RDBMS to RDBMS For example, you should note that
Trang 27on each RDBMS One minor difference is that MySQL, DB2, and Oraclerequire semicolons at the end of SQL statements, but SQL Server doesn't(however, including a semicolon at the end of a statement won't causeany negative effects in SQL Server) This book includes these characters
at the end of every statement because omitting them would break thecode on the other platforms
Other times, it'll mean that the statement required to perform a certaintask is written slightly differently, depending on the RDBMS On theseoccasions, the code in this book may be presented more than once tohighlight differences between database platforms
Note The downloadable code for this book includes separate
directories containing SQL formatted for use in these differentenvironments You can access this code from the Downloadssection of the Apress Web site (http://www.apress.com)
You may also find that your RDBMS provides additional statements andfunctions that allow you to do some complex calculation in SQL, whichyou would otherwise have had to do in another language (obviously, thishelps a particular vendor market its own product) In general, this bookcovers these only where it's the only way (or only sensible way) to
achieve a certain task for that RDBMS
Furthermore, you'll find that some of the RDBMSs provide a language alltheir own, which you can use to program on that particular platform Forexample, Oracle provides the PL/SQL language, and SQL Server
provides the Transact-SQL language As you can probably tell from thenames, these languages encapsulate SQL but at the same time provideprocedural extensions to the language that allow you to perform morepowerful data operations You can "wrap" your SQL code in these
languages, which can perform any related business logic required to
make sure that the data manipulation conforms to your particular rules.You can then store this code in the database as a distinct programming
Trang 28triggers, which are covered in Chapters 9 and 13, respectively
Obviously in these cases, the code is RDBMS specific and must bepresented separately for each RDBMS—though MySQL and Accessdon't support stored procedures or triggers
To fully understand how SQL works, you need to look at how relationaldatabases work, so now you'll take a step back from SQL for a momentand explore relational databases in a bit more detail
Trang 29A database is an organized store of data Many applications, created in
any language, need access to a database For example, without a
database of customers and products, e-commerce applications simplyaren't possible
From the point of view of applications using data in a database, the
actual mechanism of storage is usually not important Whether the data isstored on disk, in memory, or in arrangements of trees on a desert islandsomewhere, the usage will be the same What we mean by this is that if
an application requests some data concerning a customer and
subsequently obtains that data, then where it came from doesn't matter
Of course, performance might be increased if you don't have to keepplanting trees
Three concepts you need to understand before learning about how data
is stored in a relational database are entities, attributes, and values An
entity represents some object in reality, such as a person or a product.Entities, as objects, represent a class of "things." A Customers entitydescribes all possible customers, and then each instance of that objectrepresents a specific customer Each instance of your Customers entitywill have identical attributes that define the meaning of that entity
instance could store the values Joe, Bloggs, 12 SQL Street,
Trang 30Obviously, tables require more than just a name before you can storedata in them What data can and can't go into a table, and in what form
it's stored, is defined by the schema information for the table A database
will typically include a single schema defining all the tables it contains,including information concerning columns and data types as describednext, relationships between tables, and so on Schemas are usually
stored in the RDBMS in some proprietary format, which is fine because
Trang 31Tables consist of a series of columns and rows Columns define whatdata can be stored in the table, and rows are where you store the actualdata
Columns
Each table in a database is made up of one or more named columns (also known as fields) Each column describes one particular facet of
circumstances—you don't necessarily need a customer phone number,for example In most RDBMSs it's also possible to have columns thataren't maintained by you, such as a column that receives an
automatically generated value for each data item, for example You'lllearn more about these topics later in this chapter
Bear in mind that the columns that make up a table uniquely define thattable If you were to take data from somebody else's Customers table(that is, a Customers table in another database), things might not fit
Trang 32anything you like in there, but using multiple columns makes more sense
in terms of identifying and using the different strings that make up a
complete address However, the exact columns used might not fit in withthe methods of addressing used worldwide For example, United
Kingdom addresses use postcodes rather than ZIP codes, which, whileserving the same purpose, are formatted differently This could causeproblems both for users (who might not know how to enter data in
columns with unfamiliar names) and administrators (who might rely onthe validation of address information prior to shipment)
Once the columns in a table have been defined, it can be awkward to addmore or remove redundant ones while maintaining data integrity, so awell-planned design at the start is essential
Each column in a database table has a specific data type This data type
determines what information can be stored in the column We'll return tothis topic shortly
Primary Keys
A fundamental tenet of storing data in a relational database is that youmust be able to uniquely identify each row of data that you store As
such, each table is required to have a column that's known as the
Trang 34Although in practice it's easier to say that FriendID is the primary keycolumn of Friend, technically this isn't accurate—a primary key isn't a
column but a constraint that applies to a column.
Constraints are rules that apply to data tables and that form part of theintegrity rules of the database The database itself takes care of its
integrity and makes sure that these rules aren't broken As with datatypes (when, for example, the database doesn't allow you to insert astring value on a numeric column), you won't be able to insert two
records with the same ID value if the ID column is set to be the primarykey
Sometimes choosing the primary key of a table can be a tough decision
to make, especially because, in most cases, it has deep impact on thedesign of the whole database The philosophy of database design says
that the primary key column should represent (uniquely identify) the table
rows It's common to have values assigned to this column automatically
by the RDBMS Alternatively, unique properties of records could be usedrather than a random value You could use the Social Security number of
a customer, for example However, this can make things more
complicated, and in general it's better to have a completely separate datafacet for the primary key
Primary keys can be formed by combing more than one column Thegroups of columns that form the primary key, taken as a unit, are
guaranteed to have unique values, even if the individual columns canhave repeating values in the table
There can be only one primary key on a table A value must be enteredfor every row of the primary key (it isn't allowed to contain NULL values—see later), and an index is automatically created on its constituent
columns Indexes affect database performance, and we'll talk more aboutthem in Chapter 12, "Working with Database Objects."
Trang 35Data Types
Data types are a fundamental topic we need to discuss simply becauseyou can't avoid them It's always necessary to specify a data type whencreating a new table field This might mean that a given column can onlyhold integer numbers, for example The data types used in RDBMSs tend
to be a little more versatile than this, though, often allowing you to specify
Trang 36precision to which a floating-point number is represented Alternatively,they might restrict data to positive values (we're still talking integers here
—we've yet to see a database that restricts string-type columns to valuessuch as "hardworking," "good sense of humor," or "team player") Often,you'll want to restrict the number of characters allowed to store strings.For example, you might decide to limit a Password field to eight
characters
Choosing which data types to use for different columns can impact theperformance and scalability of your database By restricting values, youcan ensure that less memory is taken up in the database because youdon't allocate memory for values that can't be used Data types also
provide a low-level error checking capability because trying to put a
"wrong" value in a database is likely to generate an error As with variabletypes in some programming languages, though, this won't always be thecase Sometimes a round peg will fit through a square hole even thoughthe square peg won't fit through the round hole, and you can't rely on thisaspect of database storage to validate all your data In any case, you canachieve far better and more powerful validation by other means
One important (and occasionally annoying) point here is that column datatypes tend to vary between RDBMSs This can make it difficult to transferdata between databases and might also result in having to change
source code in order to access the same data in a different database.Often the difference is minor—perhaps an integer data type in oneRDBMS is called int in another while retaining the same meaning—but
it can still break code if you're not careful Appendix C, "SQL Data
Types," of this book provides an overview of the data types supported byeach RDBMS and offers advice on "equivalent" types if a specific type inone RDBMS isn't supported (or called the same thing) in another
Although in some cases the actual names differ, the main data types aresupported by all databases Let's see which these are
Numbers
Trang 37database Numbers come in different sizes, shapes, and internal storageformats
Integers are usually represented by the INT or INTEGER data type
Depending on your database, you may have access to other integer datatypes (which differ by the minimum and maximum values allowed), such
as TINYINT, SMALLINT, MEDIUMINT, and BIGINT
Floating-point numbers are stored using the FLOAT, REAL, or NUMBER(for Oracle) data type
A common issue regarding numeric data types concerns accurately
storing monetary information With MySQL and DB2, the DECIMAL datatype is the way to go; with Oracle you use the general-purpose NUMBER,and SQL Server has a specialized Money data type, but DECIMAL (orNUMERIC) can also be used
maximum size defined for that column)
TEXT usually allows for much longer strings but acts considerably slowerthan CHAR and VARCHAR
When creating or altering columns of character data types, you need tospecify the maximum length of the string to be stored
Date and Time
Each database knows how to store dates and times
Trang 38NULLs
Apart from establishing the data types for your columns, you have todecide whether you have to enter a specific value into a column or
whether you're allowed to leave it empty In other words, can a columnstore NULL values?
What's NULL? Perhaps the best definition of NULL is "undefined"—simply
a column for which a value hasn't been specified The decision of
allowing NULL values is a strategic one: Columns that you mark to rejectNULL values will always have a value, and the database engine will
require you to specify a value for them when adding new rows On theother hand, if a column is nullable and you don't specify a value for itwhen adding a new row, NULL will be automatically assigned to it
SELECT * FROM Customer WHERE PhoneNumber = NULL
you won't get any results SQL works with a tri-valued logic: TRUE,
FALSE, and UNKNOWN For the previous query, the database engine willsearch through the rows and evaluate the values found in the
PhoneNumber column against the search condition WHERE
PhoneNumber = NULL It'll return a row only if the search conditionevaluates to TRUE However, when a NULL value is compared to anyother value— a definite value or another NULL—the answer is alwaysUNKNOWN
Trang 39Most databases support this option, using the DEFAULT constraint, whichwe'll discuss in detail in Chapter 12, "Working with Database Objects." Insome cases you can also supply a function for the default value WithSQL Server, for example, you can supply GETDATE (say, to a columnnamed DateInserted) that always returns the current date and time.This way, when a new row is inserted into the table, GETDATE is called,and the current date and time are supplied as the default value for theDateInserted column
Unique Constraints
Like a primary key, UNIQUE is also a constraint that doesn't allow
columns containing repeating values However, there are differences.You can have multiple unique columns in a table—as opposed to a singleprimary key
Note Unique columns can sometimes be set to accept NULLs on
SQL Server (in which case, the column can only accept one
NULL value) MySQL and Oracle can accept NULLs on unique columns and can accept more than one row having a NULL for
that column, but any data entered into that column on any row
Trang 40NULL values
UNIQUE columns are useful in cases where you already have a primarykey but you still have columns for which you want to have unique values.This might the case for a column named Email or MobilePhone in theCustomer table, in a scenario where CustomerID is the primary key
Defining Relationships between Tables
Of course, databases are about much more than stuffing specific types ofdata in specific columns of a particular table and being able to identifyeach row The power of relational databases comes, as the name
suggests, from the ability to define relationships between data in differenttables These related tables form the relational database (the databaseobject), which becomes an object with a significance of its own, ratherthan simply being a group of unrelated data tables Relational databasesstore information It's said that data becomes information only when yougive significance to it, and establishing relations with other pieces of data
is a good means of doing that Moving from the concept of a table to that
of relational databases isn't a huge leap, but it's a crucial step for anyserious SQL programmer
It helps to think of the entities (the real "things") that database tablesneed to describe For example:
You have customers who place orders for certain products.
Straight away, you start to see the sort of entities that you must describeand the relationships that exist between them You might be able to mapthese entities directly to tables, creating a Customers table, an Orderstable, and a Products table
In reality, although the underlying concept of identifying entities and theirinterrelationship is valid, it's likely to be slightly more complex than that.For example, how much information do you store in the Customerstable? Do you store customers' billing addresses there? What if they