Notas de Luis

SQL language (General)

SQL General Data Types

Each column in a database table is required to have a name and a data type.

SQL developers have to decide what types of data will be stored inside each and every table column when creating a SQL table. The data type is a label and a guideline for SQL to understand what type of data is expected inside of each column, and it also identifies how SQL will interact with the stored data.

The following table lists the general data types in SQL:

  Data type            Description
  CHARACTER(n)         Character string. Fixed-length n
  VARCHAR(n) or        Character string. Variable length. Maximum length n
  CHARACTER VARYING(n)
  BINARY(n)            Binary string. Fixed-length n
  BOOLEAN              Stores TRUE or FALSE values
  VARBINARY(n) or      Binary string. Variable length. Maximum length n
  BINARY VARYING(n)
  INTEGER(p)           Integer numerical (no decimal). Precision p
  SMALLINT             Integer numerical (no decimal). Precision 5
  INTEGER              Integer numerical (no decimal). Precision 10
  BIGINT               Integer numerical (no decimal). Precision 19
                       Exact numerical, precision p, scale s. Example:
  DECIMAL(p,s)         decimal(5,2) is a number that has 3 digits before the
                       decimal and 2 digits after the decimal
  NUMERIC(p,s)         Exact numerical, precision p, scale s. (Same as
                       DECIMAL)
                       Approximate numerical, mantissa precision p. A
  FLOAT(p)             floating number in base 10 exponential notation. The
                       size argument for this type consists of a single
                       number specifying the minimum precision
  REAL                 Approximate numerical, mantissa precision 7
  FLOAT                Approximate numerical, mantissa precision 16
  DOUBLE PRECISION     Approximate numerical, mantissa precision 16
  DATE                 Stores year, month, and day values
  TIME                 Stores hour, minute, and second values
  TIMESTAMP            Stores year, month, day, hour, minute, and second
                       values
  INTERVAL             Composed of a number of integer fields, representing
                       a period of time, depending on the type of interval
  ARRAY                A set-length and ordered collection of elements
  MULTISET             A variable-length and unordered collection of
                       elements
  XML                  Stores XML data

SQL Data Type Quick Reference

However, different databases offer different choices for the data type definition.

The following table shows some of the common names of data types between the various database platforms:

  Data type      Access      SQLServer           Oracle   MySQL   PostgreSQL
  boolean        Yes/No      Bit                 Byte     N/A     Boolean
  integer        Number      Int                 Number   Int     Int
                 (integer)                                Integer Integer
  float          Number      Float               Number   Float   Numeric
                 (single)    Real
  currency       Currency    Money               N/A      N/A     Money
  string (fixed) N/A         Char                Char     Char    Char
  string         Text (<256) Varchar             Varchar  Varchar Varchar
  (variable)     Memo (65k+)                     Varchar2
                             Binary (fixed up to
  binary object  OLE Object  8K)                 Long     Blob    Binary
                 Memo        Varbinary (<8K)     Raw      Text    Varbinary
                             Image (<2GB)

Note: Data types might have different names in different database. And even if the name is the same, the size and other details may be different\! Always check the documentation\!

Microsoft Access Data Types

  Data type     Description                                        Storage
  Text          Use for text or combinations of text and numbers.
                255 characters maximum
                Memo is used for larger amounts of text. Stores up
  Memo          to 65,536 characters. Note: You cannot sort a memo
                field. However, they are searchable
  Byte          Allows whole numbers from 0 to 255                 1 byte
  Integer       Allows whole numbers between -32,768 and 32,767    2 bytes
  Long          Allows whole numbers between -2,147,483,648 and    4 bytes
                2,147,483,647
  Single        Single precision floating-point. Will handle most  4 bytes
                decimals
  Double        Double precision floating-point. Will handle most  8 bytes
                decimals
                Use for currency. Holds up to 15 digits of whole
  Currency      dollars, plus 4 decimal places. Tip: You can       8 bytes
                choose which country's currency to use
  AutoNumber    AutoNumber fields automatically give each record   4 bytes
                its own number, usually starting at 1
  Date/Time     Use for dates and times                            8 bytes
                A logical field can be displayed as Yes/No,
  Yes/No        True/False, or On/Off. In code, use the constants  1 bit
                True and False (equivalent to -1 and 0). Note:
                Null values are not allowed in Yes/No fields
  Ole Object    Can store pictures, audio, video, or other BLOBs   up to 1GB
                (Binary Large OBjects)
  Hyperlink     Contain links to other files, including web pages
  Lookup Wizard Let you type a list of options, which can then be  4 bytes
                chosen from a drop-down list

MySQL Data Types

In MySQL there are three main data types : text, number, and Date/Time types.

Text types:

  Data type        Description
                   Holds a fixed length string (can contain letters,
  CHAR(size)       numbers, and special characters). The fixed size is
                   specified in parenthesis. Can store up to 255 characters
                   Holds a variable length string (can contain letters,
                   numbers, and special characters). The maximum size is
  VARCHAR(size)    specified in parenthesis. Can store up to 255 characters.
                   Note: If you put a greater value than 255 it will be
                   converted to a TEXT type
  TINYTEXT         Holds a string with a maximum length of 255 characters
  TEXT             Holds a string with a maximum length of 65,535 characters
  BLOB             For BLOBs (Binary Large OBjects). Holds up to 65,535
                   bytes of data
  MEDIUMTEXT       Holds a string with a maximum length of 16,777,215
                   characters
  MEDIUMBLOB       For BLOBs (Binary Large OBjects). Holds up to 16,777,215
                   bytes of data
  LONGTEXT         Holds a string with a maximum length of 4,294,967,295
                   characters
  LONGBLOB         For BLOBs (Binary Large OBjects). Holds up to
                   4,294,967,295 bytes of data
                   Let you enter a list of possible values. You can list up
                   to 65535 values in an ENUM list. If a value is inserted
                   that is not in the list, a blank value will be inserted.
  ENUM(x,y,z,etc.)
                   Note: The values are sorted in the order you enter them.
  
                   You enter the possible values in this format:
                   ENUM('X','Y','Z')
  SET              Similar to ENUM except that SET may contain up to 64 list
                   items and can store more than one choice

Number types:

  Data type       Description
  TINYINT(size)   -128 to 127 normal. 0 to 255 UNSIGNED*. The maximum number
                  of digits may be specified in parenthesis
  SMALLINT(size)  -32768 to 32767 normal. 0 to 65535 UNSIGNED*. The maximum
                  number of digits may be specified in parenthesis
  MEDIUMINT(size) -8388608 to 8388607 normal. 0 to 16777215 UNSIGNED*. The
                  maximum number of digits may be specified in parenthesis
                  -2147483648 to 2147483647 normal. 0 to 4294967295
  INT(size)       UNSIGNED*. The maximum number of digits may be specified
                  in parenthesis
                  -9223372036854775808 to 9223372036854775807 normal. 0 to
  BIGINT(size)    18446744073709551615 UNSIGNED*. The maximum number of
                  digits may be specified in parenthesis
                  A small number with a floating decimal point. The maximum
  FLOAT(size,d)   number of digits may be specified in the size parameter.
                  The maximum number of digits to the right of the decimal
                  point is specified in the d parameter
                  A large number with a floating decimal point. The maximum
  DOUBLE(size,d)  number of digits may be specified in the size parameter.
                  The maximum number of digits to the right of the decimal
                  point is specified in the d parameter
                  A DOUBLE stored as a string , allowing for a fixed decimal
  DECIMAL(size,d) point. The maximum number of digits may be specified in
                  the size parameter. The maximum number of digits to the
                  right of the decimal point is specified in the d parameter
  • The integer types have an extra option called UNSIGNED. Normally, the integer goes from an negative to positive value. Adding the UNSIGNED attribute will move that range up so it starts at zero instead of a negative number.

Date types:

  Data type   Description
              A date. Format: YYYY-MM-DD
  DATE()
              Note: The supported range is from '1000-01-01' to '9999-12-31'
              *A date and time combination. Format: YYYY-MM-DD HH:MI:SS
  DATETIME()
              Note: The supported range is from '1000-01-01 00:00:00' to
              '9999-12-31 23:59:59'
              *A timestamp. TIMESTAMP values are stored as the number of
              seconds since the Unix epoch ('1970-01-01 00:00:00' UTC).
  TIMESTAMP() Format: YYYY-MM-DD HH:MI:SS
  
              Note: The supported range is from '1970-01-01 00:00:01' UTC to
              '2038-01-09 03:14:07' UTC
              A time. Format: HH:MI:SS
  TIME()
              Note: The supported range is from '-838:59:59' to '838:59:59'
              A year in two-digit or four-digit format.
  
  YEAR()      Note: Values allowed in four-digit format: 1901 to 2155.
              Values allowed in two-digit format: 70 to 69, representing
              years from 1970 to 2069
  • Even if DATETIME and TIMESTAMP return the same format, they work very differently. In an INSERT or UPDATE query, the TIMESTAMP automatically set itself to the current date and time. TIMESTAMP also accepts various formats, like YYYYMMDDHHMISS, YYMMDDHHMISS, YYYYMMDD, or YYMMDD.

SQL Server Data Types

String types:

  Data type      Description                               Storage
  char(n)        Fixed width character string. Maximum     Defined width
                 8,000 characters
  varchar(n)     Variable width character string. Maximum  2 bytes + number
                 8,000 characters                          of chars
  varchar(max)   Variable width character string. Maximum  2 bytes + number
                 1,073,741,824 characters                  of chars
  text           Variable width character string. Maximum  4 bytes + number
                 2GB of text data                          of chars
  nchar          Fixed width Unicode string. Maximum 4,000 Defined width x 2
                 characters
  nvarchar       Variable width Unicode string. Maximum
                 4,000 characters
  nvarchar(max)  Variable width Unicode string. Maximum
                 536,870,912 characters
  ntext          Variable width Unicode string. Maximum
                 2GB of text data
  bit            Allows 0, 1, or NULL
  binary(n)      Fixed width binary string. Maximum 8,000
                 bytes
  varbinary      Variable width binary string. Maximum
                 8,000 bytes
  varbinary(max) Variable width binary string. Maximum 2GB
  image          Variable width binary string. Maximum 2GB

Number types:

  Data type    Description                                      Storage
  tinyint      Allows whole numbers from 0 to 255               1 byte
  smallint     Allows whole numbers between -32,768 and 32,767  2 bytes
  int          Allows whole numbers between -2,147,483,648 and  4 bytes
               2,147,483,647
               Allows whole numbers between
  bigint       -9,223,372,036,854,775,808 and                   8 bytes
               9,223,372,036,854,775,807
               Fixed precision and scale numbers.
  
               Allows numbers from -10^38 +1 to 10^38 –1.
  
               The p parameter indicates the maximum total
               number of digits that can be stored (both to the
  decimal(p,s) left and to the right of the decimal point). p   5-17 bytes
               must be a value from 1 to 38. Default is 18.
  
               The s parameter indicates the maximum number of
               digits stored to the right of the decimal point.
               s must be a value from 0 to p. Default value is
               0
               Fixed precision and scale numbers.
  
               Allows numbers from -10^38 +1 to 10^38 –1.
  
               The p parameter indicates the maximum total
               number of digits that can be stored (both to the
  numeric(p,s) left and to the right of the decimal point). p   5-17 bytes
               must be a value from 1 to 38. Default is 18.
  
               The s parameter indicates the maximum number of
               digits stored to the right of the decimal point.
               s must be a value from 0 to p. Default value is
               0
  smallmoney   Monetary data from -214,748.3648 to 214,748.3647 4 bytes
  money        Monetary data from -922,337,203,685,477.5808 to  8 bytes
               922,337,203,685,477.5807
               Floating precision number data from -1.79E + 308
               to 1.79E + 308.
  
  float(n)     The n parameter indicates whether the field      4 or 8 bytes
               should hold 4 or 8 bytes. float(24) holds a
               4-byte field and float(53) holds an 8-byte
               field. Default value of n is 53.
  real         Floating precision number data from -3.40E + 38  4 bytes
               to 3.40E + 38

Date types:

  Data type      Description                                      Storage
  datetime       From January 1, 1753 to December 31, 9999 with   8 bytes
                 an accuracy of 3.33 milliseconds
  datetime2      From January 1, 0001 to December 31, 9999 with   6-8 bytes
                 an accuracy of 100 nanoseconds
  smalldatetime  From January 1, 1900 to June 6, 2079 with an     4 bytes
                 accuracy of 1 minute
  date           Store a date only. From January 1, 0001 to       3 bytes
                 December 31, 9999
  time           Store a time only to an accuracy of 100          3-5 bytes
                 nanoseconds
  datetimeoffset The same as datetime2 with the addition of a     8-10 bytes
                 time zone offset
                 Stores a unique number that gets updated every
                 time a row gets created or modified. The
  timestamp      timestamp value is based upon an internal clock
                 and does not correspond to real time. Each table
                 may have only one timestamp variable

Other data types:

  Data type        Description
  sql_variant      Stores up to 8,000 bytes of data of various data types,
                   except text, ntext, and timestamp
  uniqueidentifier Stores a globally unique identifier (GUID)
  xml              Stores XML formatted data. Maximum 2GB
  cursor           Stores a reference to a cursor used for database
                   operations
  table            Stores a result-set for later processing

SQL Server Date Functions

The following table lists the most important built-in date functions in SQL Server:

Function Description GETDATE() Returns the current date and time DATEPART() Returns a single part of a date/time DATEADD() Adds or subtracts a specified time interval from a date DATEDIFF() Returns the time between two dates CONVERT() Displays date/time data in different formats

SQL Date and Time Data Types and Functions

Function Description FORMAT() Formats how a field is to be displayed NOW() Returns the current system date and time

SQL Dates

The most difficult part when working with dates is to be sure that the format of the date you are trying to insert, matches the format of the date column in the database.

As long as your data contains only the date portion, your queries will work as expected. However, if a time portion is involved, it gets more complicated.

SQL Date Data Types

MySQL comes with the following data types for storing a date or a date/time value in the database:

 * DATE - format YYYY-MM-DD
 * DATETIME - format: YYYY-MM-DD HH:MI:SS
 * TIMESTAMP - format: YYYY-MM-DD HH:MI:SS
 * YEAR - format YYYY or YY

SQL Server comes with the following data types for storing a date or a date/time value in the database:

 * DATE - format YYYY-MM-DD
 * DATETIME - format: YYYY-MM-DD HH:MI:SS
 * SMALLDATETIME - format: YYYY-MM-DD HH:MI:SS
 * TIMESTAMP - format: a unique number

Note: The date types are chosen for a column when you create a new table in your database\!

For an overview of all data types available, go to our complete Data Types reference.

SQL Working with Dates

You can compare two dates easily if there is no time component involved\!

Assume we have the following “Orders” table:

  OrderId ProductName                                             OrderDate
  1       Geitost                                                 2008-11-11
  2       Camembert Pierrot                                       2008-11-09
  3       Mozzarella di Giovanni                                  2008-11-11
  4       Mascarpone Fabioli                                      2008-10-29

Now we want to select the records with an OrderDate of “2008-11-11” from the table above.

We use the following SELECT statement:

  SELECT * FROM Orders WHERE OrderDate='2008-11-11'

The result-set will look like this:

  OrderId ProductName                                             OrderDate
  1       Geitost                                                 2008-11-11
  3       Mozzarella di Giovanni                                  2008-11-11

Now, assume that the “Orders” table looks like this (notice the time component in the “OrderDate” column):

  OrderId ProductName                                    OrderDate
  1       Geitost                                        2008-11-11 13:23:44
  2       Camembert Pierrot                              2008-11-09 15:45:21
  3       Mozzarella di Giovanni                         2008-11-11 11:12:01
  4       Mascarpone Fabioli                             2008-10-29 14:56:59

If we use the same SELECT statement as above:

  SELECT * FROM Orders WHERE OrderDate='2008-11-11'

we will get no result\! This is because the query is looking only for dates with no time portion.

Tip: If you want to keep your queries simple and easy to maintain, do not allow time components in your dates\!

SQL Aggregate Functions

SQL aggregate functions return a single value, calculated from values in a column.

  Function Description
  AVG()    Returns the average value
  COUNT()  Returns the number of rows
  FIRST()  Returns the first value
  LAST()   Returns the last value
  MAX()    Returns the largest value
  MIN()    Returns the smallest value
  ROUND()  Rounds a numeric field to the number of decimals specified
  SUM()    Returns the sum

SQL String Functions

  Function            Description
  CHARINDEX           Searches an expression in a string expression and
                      returns its starting position if found
  CONCAT()
  LEFT()
  LEN() / LENGTH()    Returns the length of the value in a text field
  LOWER() / LCASE()   Converts character data to lower case
  LTRIM()
  SUBSTRING() / MID() Extract characters from a text field
  PATINDEX()
  REPLACE()
  RIGHT()
  RTRIM()
  UPPER() / UCASE()   Converts character data to upper case

SQL ISNULL(), NVL(), IFNULL() and COALESCE() Functions

Look at the following “Products” table:

  P_Id ProductName UnitPrice UnitsInStock                       UnitsOnOrder
  1    Jarlsberg   10.45     16                                 15
  2    Mascarpone  32.56     23
  3    Gorgonzola  15.67     9                                  20

Suppose that the “UnitsOnOrder” column is optional, and may contain NULL values.

We have the following SELECT statement:

  SELECT ProductName,UnitPrice*(UnitsInStock+UnitsOnOrder)
  FROM Products

In the example above, if any of the “UnitsOnOrder” values are NULL, the result is NULL.

Microsoft’s ISNULL() function is used to specify how we want to treat NULL values.

  The NVL(), IFNULL(), and COALESCE() functions can also be used to achieve
  the same result.

In this case we want NULL values to be zero.

Below, if “UnitsOnOrder” is NULL it will not harm the calculation, because ISNULL() returns a zero if the value is NULL:

MS Access

  SELECT
  ProductName,UnitPrice*(UnitsInStock+IIF(ISNULL(UnitsOnOrder),0,UnitsOnOrder))
  FROM Products

SQL Server

  SELECT ProductName,UnitPrice*(UnitsInStock+ISNULL(UnitsOnOrder,0))
  FROM Products

Oracle

Oracle does not have an ISNULL() function. However, we can use the NVL() function to achieve the same result:

  SELECT ProductName,UnitPrice*(UnitsInStock+NVL(UnitsOnOrder,0))
  FROM Products

MySQL

  MySQL does have an ISNULL() function. However, it works a little bit
  different from Microsoft's ISNULL() function.

In MySQL we can use the IFNULL() function, like this:

  SELECT ProductName,UnitPrice*(UnitsInStock+IFNULL(UnitsOnOrder,0))
  FROM Products

or we can use the COALESCE() function, like this:

  SELECT ProductName,UnitPrice*(UnitsInStock+COALESCE(UnitsOnOrder,0))
  FROM Products

SQL Arithmetic Operators

  Operator                Description
  +                       Add
  -                       Subtract
  *                       Multiply
  /                       Divide
  %                       Modulo

SQL Bitwise Operators

  Operator                 Description
  &                        Bitwise AND
   OR
  ^                        Bitwise exclusive OR

SQL Comparison Operators

  Operator Description
  =        Equal to
  >        Greater than
  <        Less than
  >=       Greater than or equal to
  <=       Less than or equal to
  <>       Not equal to

SQL Compound Operators

  Operator Description
  +=       Add equals
  -=       Subtract equals
  *=       Multiply equals
  /=       Divide equals
  %=       Modulo equals
  &=       Bitwise AND equals
  ^-=      Bitwise exclusive equals
   equals

SQL Logical Operators

  Note: ALL and ANY are not supported in Web SQL databases. Chrome, Safari
  and Opera are using Web SQL in our examples.
  
  Operator Description
  ALL      TRUE if all of the subquery values meet the condition
  AND      TRUE if all the conditions separated by AND is TRUE
  ANY      TRUE if any of the subquery values meet the condition
  BETWEEN  TRUE if the operand is within the range of comparisons
  EXISTS   TRUE if the subquery returns one or more records
  IN       TRUE if the operand is equal to one of a list of
           expressions
  LIKE     TRUE if the operand matches a pattern
  NOT      Displays a record if the condition(s) is NOT TRUE
  OR       TRUE if any of the conditions separated by OR is TRUE
  SOME     TRUE if any of the subquery values meet the condition

SQL Quick Reference From W3Schools

  • AND / OR
  • ALTER TABLE
  • AS (alias)
  • BETWEEN
  • CREATE DATABASE
  • CREATE TABLE
  • CREATE INDEX
  • CREATE VIEW
  • DELETE
  • DROP DATABASE
  • DROP INDEX
  • DROP TABLE
  • EXISTS
  • GROUP BY
  • HAVING
  • IN
  • INSERT INTO
  • INNER JOIN
  • LEFT JOIN
  • RIGHT JOIN
  • FULL JOIN
  • LIKE
  • ORDER BY
  • SELECT
  • SELECT \*
  • SELECT DISTINCT
  • SELECT INTO
  • SELECT TOP
  • TRUNCATE TABLE
  • UNION
  • UNION ALL
  • UPDATE
  • WHERE
computing/databases/sql.txt · Última modificación: por 127.0.0.1