-- Database by Doug -- Douglas Kline -- 8/28/2018 -- Numeric Expressions - expressions that return a numeric data type -- beginner level -- simple numeric expression examples -- and things to keep in mind -- I might say 'db' -- which is shorthand for 'database engine' -- this is the server software that interprets -- your SQL and performs actions -- you can ask your database engine (db) to be your calculator: SELECT 1 + 2 -- if you are familar with spreadsheets -- and how to type formulas -- it is very similar SELECT 1 + 2 -- an expression is something that the db -- will read, translate, and perform -- so in the expression above -- it reads a 1, then a plus sign, then a 2 -- interprets it as addition -- performs the addition -- and returns the results -------------------------------------------------- SELECT 1 + 2 -- there are certain items in the expression -- the plus sign (+) is an *operator* -- more specifically, it is a *binary* operator -- it defines an operation on two items (thus binary) -- more specifically, the items on its left and right -- the plus sign says to the db: -- take the items on my left and right and add them -- it is an instruction to the db SELECT 1 + 2 -- the 1 and 2 are the *operands* of the operator -- they are the items that the operator applies to -- the 1 and 2 are also examples of *literals* -- in other words 1 literally means the number 1 -- in coding, it means: not code, a value -- here is an example of a unary operator (one operand) SELECT -5 -- here, the literal value 5 -- is modified to become negative -- by the minus sign operator ------------------------------------------------------------ -- how does the db know what *is* an expression, and what *isn't* -- in this example SELECT 1 + 2 -- the db is *expecting* an expression to be in this position -- (after the word SELECT) -- so expressions are mainly known by their -- location/position in your SELECT statement --------------------------------------------------------- -- notice that usual order of operations is followed -- * and / come before + and - -- otherwise it is left-to-right, -- unless you add parentheses -- then sub-expressions in parentheses are evaluated first SELECT 1 + 2 * 6 SELECT (1 + 2) * 6 SELECT (3 - 1) / 2 ------------------------------------------------------ -- notice that operators sometimes change meaning -- depending on their context SELECT 1 / 3 -- does integer division SELECT 1.0 / 3.0 -- floating point division SELECT 1 / 3.0 -- floating point division SELECT 1.0 / 3 -- floating point division -- if both operands (items on either side of the operator) -- are whole numbers, do integer division -- otherwise do floating point division ----------------------------------------------------------------------------- -- here's an operator that might be new to you: % SELECT 5 % 3 -- modulus operator - gives the remainder after integer division SELECT 8 % 3 -- same answer SELECT (8 / 3) * 3 + 8 % 3 -- equals 8 ----------------------------------------------------------------------------- -- what if your data is not a literal? -- in other words, it comes out of the db SELECT unitsInstock -- this is an expression, just very simple FROM Products SELECT unitsInStock + unitsOnOrder -- effective inventory FROM Products -- plus is still the operator -- the operands are UnitsInStock and unitsOnOrder -- the expression is evaluated on each record, separately ----------------------------------------------------- -- but what if the data type is not right for -- the operations I want to do? -- specifically, the data is whole numbers -- but I want to do floating point division SELECT unitsInStock, reOrderLevel, unitsinstock / reOrderLevel FROM Products WHERE reOrderLevel <> 0 -- to avoid division by zero -- but I'd really like to see the results as a floating point/decimal -- you have to convert *prior* to dividing SELECT unitsInStock, reOrderLevel, CONVERT(real,unitsinstock) / reOrderLevel FROM Products WHERE reOrderLevel <> 0 -- to avoid division by zero -- the unitsInStock is converted to a real (aka floating point number) -- before it gets divided -- since one of the items operands -- is a floating point number, it does floating point division ------------------------------------------------------------- -- perhaps a more realistic and useful expression SELECT ProductID, ProductName, unitsInStock * unitprice AS [Dollar Value in Inventory] FROM Products ORDER BY ProductID -- note that unitprice is a money data type, -- and the unitsInstock is a whole number -- so the result is shown as a money data type -- (note the 2 digits to the right of the decimal) -- we can show this explicitly: SELECT SQL_VARIANT_PROPERTY(unitPrice, 'BaseType'), SQL_VARIANT_PROPERTY(unitsInStock, 'BaseType'), SQL_VARIANT_PROPERTY(unitsInStock * unitPrice, 'BaseType') FROM Products ----------------------------------------------------------------------- -- in summary -- expressions are instructions for the db to create new values -- expressions are known by their location in the statement -- expressions have operators and operands -- Database by Doug -- Douglas Kline -- 8/28/2018 -- Numeric Expressions
Thursday, October 4, 2018
Numeric Expressions in SQL
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment