SQL Interview Questions and Answers: What Is SQL and Where Does It Come From?
SQL Interview Questions and Answers: What Is SQL and Where Does It Come From?
com
In common usage SQL also encompasses DML (Data Manipulation Language), for INSERTs, UPDATEs,
DELETEs and DDL (Data Definition Language), used for creating and modifying tables and other database
structures.
The development of SQL is governed by standards. A major revision to the SQL standard was completed in
1992, called SQL2. SQL3 support object extensions and are (partially?) implemented in Oracle8 and 9.
What are the difference between DDL, DML and DCL commands?
DDL is Data Definition Language statements. Some examples:
How does one escape special characters when building SQL queries?
The LIKE keyword allows for string searches. The '_' wild card character is used to match exactly one
character, '%' is used to match zero or more occurrences of any characters. These characters can be escaped
in SQL. Example:
SELECT name FROM emp WHERE id LIKE '%\_%' ESCAPE '\';
Method 1:
Note 2: If you are comparing NOT-NULL columns, use the NVL function. Remember that NULL is not
equal to NULL. This should not be a problem as all key columns should be NOT NULL by definition.
How does one get the time difference between two date columns?
Look at this example query:
select floor(((date1-date2)*24*60*60)/3600)
|| ' HOURS ' ||
floor((((date1-date2)*24*60*60) -
floor(((date1-date2)*24*60*60)/3600)*3600)/60)
|| ' MINUTES ' ||
round((((date1-date2)*24*60*60) -
floor(((date1-date2)*24*60*60)/3600)*3600 -
(floor((((date1-date2)*24*60*60) -
floor(((date1-date2)*24*60*60)/3600)*3600)/60)*60)))
|| ' SECS ' time_difference
from ...
If you don't want to go through the floor and ceiling math, try this method (contributed by Erik Wile):
select to_char(to_date('00:00:00','HH24:MI:SS') +
(date1 - date2), 'HH24:MI:SS') time_difference
from ...
Note that this query only uses the time portion of the date and ignores the date itself. It will thus never
return a value bigger than 23:59:59.
NOW NOW_PLUS_30_SECS
-------------------- --------------------
03-JUL-2002 16:47:23 03-JUL-2002 16:47:53
thestudentdaily.com
SELECT f1 FROM t1
WHERE rowid = (
SELECT rowid FROM t1
thestudentdaily.com
WHERE rownum <= 10
MINUS
SELECT rowid FROM t1
WHERE rownum < 10);
Alternatively...
SELECT * FROM emp WHERE rownum=1 AND rowid NOT IN
(SELECT rowid FROM emp WHERE rownum < 10);
Please note, there is no explicit row order in a relational database. However, this query is quite fun and may
even help in the odd situation.
Another solution is to use the MINUS operation. For example, to display rows 5 to 7, construct a query like
this:
SELECT *
FROM tableX
WHERE rowid in (
SELECT rowid FROM tableX
WHERE rownum <= 7
MINUS
SELECT rowid FROM tableX
WHERE rownum < 5);
Please note, there is no explicit row order in a relational database. However, this query is quite fun and may
even help in the odd situation.
SELECT *
FROM emp
WHERE (ROWID,0) IN (SELECT ROWID, MOD(ROWNUM,4)
FROM emp);
Method 2: Use dynamic views (available from Oracle7.2):
SELECT *
FROM ( SELECT rownum rn, empno, ename
FROM emp
) temp
WHERE MOD(temp.ROWNUM,4) = 0;
Please note, there is no explicit row order in a relational database. However, these queries are quite fun and
may even help in the odd situation.
thestudentdaily.com
The SCOTT/TIGER database schema contains a table EMP with a self-referencing relation (EMPNO and
MGR columns). This table is perfect for tesing and demonstrating tree-structured queries as the MGR
column contains the employee number of the "current" employee's boss.
The LEVEL pseudo-column is an indication of how deep in the tree one is. Oracle can handle queries with
a depth of up to 255 levels. Look at this example:
One way of working around this is to use PL/SQL, open the driving cursor with the "connect by prior"
statement, and the select matching records from other tables on a row-by-row basis, inserting the results
into a temporary table for later retrieval.
Some examples:
From Oracle 8i one can also use CASE statements in SQL. Look at this example:
SELECT ename, CASE WHEN sal>1000 THEN 'Over paid' ELSE 'Under
paid' END
FROM emp;
How can one dump/ examine the exact content of a database column?
SELECT DUMP(col1)
FROM tab1
WHERE cond1 = val1;
DUMP(COL1)
-------------------------------------
thestudentdaily.com
Typ=96 Len=4: 65,66,67,32
For this example the type is 96, indicating CHAR, and the last byte in the column is 32, which is the ASCII
code for a space. This tells us that this column is blank-padded.
Other workarounds:
From Oracle8 you can just type "password" from SQL*Plus, or if you need to change another user's
password, type "password user_name".
You can use the above technique to prevent sequence number loss before a SHUTDOWN ABORT, or any
other operation that would cause gaps in sequence values.