SQL Workshop Day 2 Copyright © 2011 Accenture All Rights Reserved. Accenture, its logo, and High Performance Delivered are trademarks of Accenture. Day 2 Agenda SQL data selection • SQL • • • • • • • Data type Grouping functions Sets Oracle functions Practice DB link Practice © Accenture 2011. All Rights Reserved. 2 Selected data types VARCHAR2(size [BYTE | CHAR]) NUMBER[(precision [, scale]]) DATE © Accenture 2011. All Rights Reserved. Variable-length character string having maximum length size bytes or characters. Maximum size is 4000 bytes or characters, and minimum is 1 byte or 1 character. You must specify size for VARCHAR2. BYTE indicates that the column will have byte length semantics; CHAR indicates that the column will have character semantics. Number having precision p and scale s. The precision p can range from 1 to 38. The scale s can range from -84 to 127. Valid date range from January 1, 4712 BC to December 31, 9999 AD. The default format is determined explicitly by the NLS_DATE_FORMAT parameter or implicitly by the NLS_TERRITORY parameter. The size is fixed at 7 bytes. This datatype contains the datetime fields YEAR, MONTH, DAY, HOUR, MINUTE, and SECOND. It does not have fractional seconds or a time zone. 3 Group functions SELECT FROM [WHERE [GROUP [ORDER [column,] group_function(column), … table condition] BY column] BY column] • Group function returns one result per record group • Considers all values (DISTINCT can be used) • Ignores NULL values (use nvl) SELECT deptno, count(*), MAX(sal) FROM emp GROUP BY deptno © Accenture 2011. All Rights Reserved. 4 Group functions HAVING clause SELECT [column,] group_function(column), … FROM table [WHERE condition] [GROUP BY column] [HAVING group_condition] [ORDER BY column] • Use HAVING clause to restrict grouping results SELECT FROM GROUP HAVING © Accenture 2011. All Rights Reserved. deptno, count(*), MAX(sal) emp BY deptno count(*) > 2 5 Practice SQL_3 Please display list of the employees (name, salary and department number) which have the highest salary in department with more than 2 persons. © Accenture 2011. All Rights Reserved. 6 Sets Sets allow us to process the results of two or more queries as if they were one. We can combine the results from the different queries using the normal mathematical set operations. These are: union union all minus intersect © Accenture 2011. All Rights Reserved. 7 Sets Query 1 Query1 Union all Query2 © Accenture 2011. All Rights Reserved. Query 2 Query1 Minus Query2 Query1 Intersect Query2 8 Single row functions characters • • • • • • • • • • • • • • • ASCII Returns the ASCII decimal equivalent of a character CHR Returns the character given the decimal equivalent CONCAT Concatenates two strings; same as the operator || INITCAP Returns the string with the first letter of each word in uppercase INSTR Finds the numeric starting position of a string within a string INSTRB Same as INSTR, but counts bytes instead of characters LENGTH Returns the length of a string in characters LENGTHB Returns the length of a string in bytes LOWER Converts a string to all lowercase LPAD Left-fills a string to a set length using a specified character LTRIM Strips leading characters from a string RPAD Right-fills a string to a set length using a specified character RTRIM Strips trailing characters from a string REPLACE Performs substring search and replace SUBSTR Returns a section of the specified string, specified by numeric character positions • SUBSTRB Returns a section of the specified string, specified by numeric byte positions • TRIM Strips leading, trailing, or both leading and trailing characters from a string • UPPER Converts a string to all uppercase © Accenture 2011. All Rights Reserved. 9 Single row functions numeric • • • • • • • • • • • • • • • • • • • • • • • ABS Returns the absolute value ACOS Returns the arc cosine ASIN Returns the arc sine ATAN Returns the arc tangent ATAN2 Returns the arc tangent; takes two inputs BITAND Returns the result of a bitwise AND on two inputs CEIL Returns the next higher integer COS Returns the cosine COSH Returns the hyperbolic cosine EXP Returns the base of natural logarithms raised to a power FLOOR Returns the next smaller integer LN Returns the natural logarithm LOG Returns the logarithm MOD Returns the modulo (remainder) of a division operation POWER Returns a number raised to an arbitrary power ROUND Rounds a number SIGN Returns an indicator of sign: negative, positive, or zero SIN Returns the sine SINH Returns the hyperbolic sine SQRT Returns the square root of a number TAN Returns the tangent TANH Returns the hyperbolic tangent TRUNC Truncates a number © Accenture 2011. All Rights Reserved. 10 Single row functions date • ADD_MONTHS Adds a number of months to a date • CURRENT_DATE Returns the current date (same as SYSDATE) • CURRENT_TIMESTAMP Returns the current date and time in a TIMESTAMP datatype • DBTIMEZONE Returns the database’s time zone • EXTRACT Returns a component of a date/time expression • FROM_TZ Returns a timestamp with time zone for a given timestamp • LAST_DAY Returns the last day of a month • LOCALTIMESTAMP Returns the current date and time in the session time zone • MONTHS_BETWEEN Returns the number of months between two dates • NEW_TIME Returns the date/time in a different time zone • NEXT_DAY Returns the next day of a week following a given date • ROUND Rounds a date/time • SESSIONTIMEZONE Returns the time zone for the current session • SYS_EXTRACT_UTC Returns the UTC (GMT) for a timestamp with a time zone • SYSDATE Returns the current date/time • SYSTIMESTAMP Returns the current timestamp • TRUNCATE Truncates a date to a given granularity • TZ_OFFSET Returns the offset from UTC for a time zone name © Accenture 2011. All Rights Reserved. 11 Single row functions conversion • • • • • • • • • • • • • • • • • • • • ASCIISTR Converts characters to ASCII BIN_TO_NUM Converts a string of bits to a number CAST Converts datatypes CHARTOROWID Casts a character to ROWID datatype COMPOSE Converts to Unicode CONVERT Converts from one character set to another DECOMPOSE Decomposes a Unicode string HEXTORAW Casts a hexadecimal to a raw NUMTODSINTERVAL Converts a number to an interval day to second NUMTOTMINTERVAL Converts a number to an interval year to month RAWTOHEX Casts a raw to a hexadecimal ROWIDTOCHAR Casts a ROWID to a character TO_CHAR Converts and formats a date into a string TO_DATE Converts a string to a date, specifying the format TO_DSINTERVAL Converts a string to an interval day to second TO_MULTIBYTE Converts a single-byte character to its corresponding multibyte equivalent TO_NUMBER Casts a numeric string to a number, specifying the format TO_SINGLE_BYTE Converts a multibyte character to its corresponding singlebyte equivalent TO_YMINTERVAL Converts a string to an interval year to month UNISTR Converts UCS2 Unicode Copyright © 2010 2011. Accenture All Rights Reserved.Copyright © 2010 Accenture All Rights Reserved. Reserved. © Accenture All Rights Reserved. 12 Single row functions miscellaneous • • • • • • • • • • • • • • • • BFILENAME Returns a BFILE locator for the specified file and directory COALESCE Returns the first non-NULL in a list DECODE Inline case statement (an IF…THEN…ELSE function) DUMP Returns a raw substring in the specified encoding (octal/hex/character/decimal). EMPTY_BLOB Returns an empty BLOB locator EMPTY_CLOB Returns an empty CLOB locator GREATEST Sorts the arguments and returns the largest LEAST Sorts the arguments and returns the smallest NULLIF Returns NULL if two expressions are equal NVL Returns second parameter if first is null SYS_CONNECT_BY_PATH Returns root-to-node values in a CONNECT BY query SYS_CONTEXT Returns various session attributes, such as IP address, terminal, and current user UID Returns the numeric user ID for the current session USER Returns the username for the current session USERENV Deprecated in favor of SYS_CONTEXT VSIZE Returns the internal size in bytes for an expression © Accenture 2011. All Rights Reserved. 13 Aggregating Data using Group Functions • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • AVG Returns the statistical mean CORR Returns the coefficient of correlation of number pairs COUNT Returns the number of non-NULL rows COVAR_POP Returns the population covariance of number pairs COVAR_SAMP Returns the sample covariance of number pairs CUME_DIST Returns the cumulative distribution of values within groupings DENSE_RANK Returns the ranking of rows within an ordered group, without skipping ranks on ties FIRST Modifies other aggregate functions to return expressions based on ordering of the second column expression GROUP_ID Returns a group identifier used to uniquely identify duplicate groups GROUPING Returns 0 for nonsummary rows or 1 for summary rows KEEP Modifies other aggregate functions to return the first or last value in a grouping LAST Modifies other aggregate functions to return expressions based on ordering of the secondary column expression MAX Returns the largest value MIN Returns the smallest value PERCENT_RANK Returns the percentile ranking of the specified value PERCENTILE_CONT Returns the interpolated value that would fall in the specified percentile position using a continuous model PERCENTILE_DISC Returns the interpolated value that would fall in the specified percentile position using a discrete model RANK Returns the ranking of rows within an ordered group, skipping ranks when ties occur REGR_AVGX Returns average x value in non-NULL (y,x) pairs REGR_AVGY Returns average y value in non-NULL (y,x) pairs REGR_COUNT Returns number of non-NULL (y,x) pairs REGR_INTERCEPT Returns the linear regression y intercept REGR_R2 Returns the linear regression coefficient of determination REGR_SLOPE Returns the linear regression slope REGR_SXX Returns the sum of the squares of the independent variable expression REGR_SXY Returns the sum of the products of the independent variable expression and the dependent variable expression REGR_SYY Returns the sum of the squares of the dependent variable expression STDDEV Returns the standard deviation STDDEV_POP Returns the population standard deviation STDDEV_SAMP Returns the sample standard deviation SUM Adds all values and returns the result VAR_POP Returns the population variance VAR_SAMP Returns the sample variance VARIANCE Returns the sample variance or 1 for sample size 1 © Accenture 2011. All Rights Reserved. 14 Practice SQL_4 Please write the SQL statement which displays departments name and maximum earnings in these departments for which maximum earnings are smaller than average earnings of all workers and sorted ascending by name of departments. © Accenture 2011. All Rights Reserved. 15 Practice SQL_5 Please write the SQL statement which displays currency rate valid for a currency and day given in a parameter. Currency rates are kept in EXCHANGE_RATE table listed below EXCHANGE_RATE # CURRENCY VARCHAR2(3) # VALID_FROM DATE VALUE NUMBER Please note that not all dates are reflected in the table. Despite that the query shall work aslo for days when no data in the table exists. © Accenture 2011. All Rights Reserved. 16 Database Link A database link is a schema object in one database that enables you to access objects on another database. Local DataBase user SELECT * FROM emp@rem_db Local DataBase DB link: rem_db Remote DataBase SQL*Net EMP Table DataBase link SQL*Net © Accenture 2011. All Rights Reserved. 17 Database Link To create a private database link, you must have the CREATE DATABASE LINK system privilege. To create a public database link, you must have the CREATE PUBLIC DATABASE LINK system privilege. You must have the CREATE SESSION system privilege on the remote Oracle database. CREATE [PUBLIC] DATABASE LINK dblink_name CONNECT TO oracle_username IDENTIFIED BY password USING 'database_sid’ © Accenture 2011. All Rights Reserved. 18 Database Link Example: $ sqlplus jones/lion@SOL3 SQL> CREATE DATABASE LINK sol1.world CONNECT TO scott IDENTIFIED BY tiger USING 'SOL1'; With this DB-Link, you (jones/lion) can connect to the remote database SOL1 as user scott/tiger. This user must exist on the remote database SOL1. © Accenture 2011. All Rights Reserved. 19 Database Link After you have created a database link, you can use it in SQL statements to refer to tables and views on the other database by appending @dblink_name to the table or view name. SELECT * FROM emp@dblink_name It is possible to use in one SQL query tables from local and remote database. © Accenture 2011. All Rights Reserved. 20 Source code view All the PLSQL code (procedure, package, …) stored in the database is avaiable by a database view. TIP use user_source view. Useful columns of user_source view: name type line text © Accenture 2011. All Rights Reserved. – the name of the object – the type of the object – line of the source – content of the line Practice SQL_6 Please write the SQL statement (or set of statments) which will compare stored PLSQL code in 2 database schemas – local schema and schema in remote database. © Accenture 2011. All Rights Reserved. 22