SQL Tutorial Topics
SQL Tutorial Topics
SQL Tutorial Topics
1. SQL Statements
o o o o o o o o o
2.
SQL SELECT SQL INSERT SQL UPDATE SQL DELETE SQL CREATE TABLE SQL ALTER TABLE SQL RENAME SQL TRUNCATE SQL DROP
SQL Clauses
o o o o
3.
SQL Operators
o o o
4.
SQL Logical Operators SQL Comparison Operators SQL LIKE, IN, ISNULL, BETWEEN..AND
o o o o o
5.
Primary Key Constraint Foreign Key Constraint Not Null Constraint Unique Key Constraint Check Constraint
o o o o o o o o
SQL Commands SQL Aliases SQL Group Functions SQL JOINS SQL VIEWS SQL Subquery SQL Index SQL GRANT, REVOKE
SQL Tutorial
SQL (Structured Query Language) is used to modify and access data or information from a storage area called database. This beginner sql tutorial website teaches you the basics of SQL and how to write SQL queries. I will be sharing my knowledge on SQL and help you learn SQL better. The sql concepts discussed in this tutorial can be applied to most of database systems. The syntax used to explain the concepts is similar to the one used in Oracle database.
SQL Introduction
SQL stands for Structured Query Language and can be pronounced as SQL or sequel (Structured English Query Language). It is a query language used for accessing and modifying information in the database. IBM first developed SQL in 1970s. Also it is an ANSI/ISO standard. It has become a Standard Universal Language used by most of the relational database management systems (RDBMS). Some of the RDBMS systems are: Oracle, Microsoft SQL server, Sybase etc. Most of these have provided their own implementation thus enhancing it's feature and making it a powerful tool. Few of the sql commands used in sql programming are SELECT Statement, UPDATE Statement, INSERT INTO Statement, DELETE Statement, WHERE Clause, ORDER BY Clause, GROUP BY Clause, ORDER Clause, Joins, Views, GROUP Functions, Indexes etc.
My SQL DataBase
In a simple manner, SQL is a non-procedural, English-like language that processes data in groups of records rather than one record at a time. Few functions of SQL are: store data modify data retrieve data modify data delete data create tables and other database objects delete data
id
first_na last_na ag subject games me me e Sharma 10 Science Cricket Bhagwat12 Maths Football
10 Rahul 0 10 Anjali 1
Chandra 15
Economi Chess cs
NOTE: These database tables are used here for better explanation of SQL commands. In reality, the tables can have different columns and different data. For example, consider the table student_details. To select the first name of all the students the query would be like:
NOTE: The commands are not case sensitive. The above SELECT statement can also be written as "select first_name from students_details;" You can also retrieve data from more than one column. For example, to select first name and last name of all the students.
INSERT INTO employee (id, name, dept, age, salary location) VALUES (105, 'Srinath', 'Aeronautics', 27, 33000);
NOTE:When adding a row, only the characters or date values should be enclosed with single quotes. If you are inserting data to all the columns, the column names can be omitted. The above insert statement can also be written as,
[(column1, column2, ... columnN)] SELECT column1, column2, ...columnN FROM table_name [WHERE condition];
For Example: To insert a row into the employee table from a temporary table, the sql insert query would be like,
INSERT INTO employee (id, name, dept, age, salary location) SELECT emp_id, emp_name, dept, age, salary, location
FROM temp_employee;
If you are inserting data to all the columns, the above insert statement can also be written as,
NOTE:In the Update statement, WHERE clause identifies the rows that get affected. If you do not include the WHERE clause, column values for all the rows get affected. For Example: To update the location of an employee, the sql update query would be like,
UPDATE employee
UPDATE employee
The SQL TRUNCATE command is used to delete all the rows from the table and free the space containing the table.
table_name - is the name of the table. column_name1, column_name2.... - is the name of the columns datatype - is the datatype for the column like char, date, number etc.
For Example: If you want to create the employee table, the statement would be like,
( id number(5), name char(20), dept char(10), age number(2), salary number(10), location char(10) );
In Oracle database, the datatype for an integer column is represented as "number". In Sybase it is represented as "int". Oracle provides another way of creating a table.
The SQL RENAME command is used to change the name of the table or a database object. If you change the object's name any reference to the old name will be affected. You have to manually change the old name to the new name in every reference.
( id NUMBER(6), name VARCHAR(20) ); INSERT INTO employees( id, name ) values( 1, 'name 1'); INSERT INTO employees( id, name ) values( 2, 'name 2'); INSERT INTO employees( id, name ) values( 3, 'name 3');
SELECT * FROM employees;
SELECT Output:
id
name
id
name
table_name -- the table name which has to be updated. NOTE:The WHERE clause in the sql delete command is optional and it identifies the rows in the column that gets deleted. If you do not include the WHERE clause all the rows in the table is deleted, so be careful while writing a DELETE query without WHERE clause. For Example: To delete an employee with id 100 from the employee table, the sql delete query would be like,
So SQL offers a feature called WHERE clause, which we can use to restrict the data that is retrieved. The condition you provide in the WHERE clause filters the rows retrieved from the table and gives you only those rows which you expected to see. WHERE clause can be used along with SELECT, DELETE, UPDATE statements.
Syntax for a WHERE clause with Select statement is: SELECT column_list FROM table-name WHERE condition;
column or expression - Is the column of a table or a expression comparison-operator - operators like = < > etc. value - Any user value or a column name for comparison For Example: To find the name of a student with id 100, the query would be like:
WHERE id = 100;
Comparison Operators and Logical Operators are used in WHERE Clause. These operators are discussed in the next chapter. NOTE: Aliases defined for the columns in the SELECT statement cannot be used in the WHERE clause to set conditions. Only aliases created for tables can be used to reference the columns in the table.
new_salar y ---------------
Priya
30000 360000
NOTE: Aliases defined in the SELECT Statement can be used in WHERE Clause.
SQL ORDER BY
The ORDER BY clause is used in a SELECT statement to sort results either in ascending or descending order. Oracle sorts query results in ascending order by default.
id 100
name dept
age
For Example: If you want to sort the employee table by salary of the employee, the sql query would be.
Hrithik Harsha
35000 35000
The query first sorts the result according to name and then displays it. You can also use more than one column in the ORDER BY clause If you want to sort the employee table by the name and salary, the query would be like,
name
salary
-------------------------Soumya 20000 Ramesh 25000 Priya Harsha Hrithik 30000 35000 35000
NOTE:The columns specified in ORDER BY clause should be one of the columns selected in the SELECT column list. You can represent the columns in the ORDER BY clause by specifying the position of a column in the SELECT list, instead of writing the column name. The above query can also be written as given below,
name salary
new_salar y
---------- ---------- ------------Hrithik 35000 37000 Harsha 35000 37000 Priya 30000 36000
dept salary ---------------- -------------Electrical 25000 Electronics 55000 Aeronautics 35000 InfoTech 30000
NOTE: The group by clause should contain all the columns in the select list expect those used along with the group functions.
SELECT location, dept, SUM (salary) FROM employee GROUP BY location, dept;
The output would be like:
location dept salary ------------- --------------- ----------Bangalore Electrical 25000 Bangalore Electronics 55000 Mysore Aeronautics 35000 Mangalore InfoTech 30000
SELECT dept, SUM (salary) FROM employee GROUP BY dept HAVING SUM (salary) > 25000
The output would be like:
When WHERE, GROUP BY and HAVING clauses are used together in a SELECT statement, the WHERE clause is processed first, then the rows that are returned after the WHERE clause is executed are grouped based on the GROUP BY clause. Finally, any conditions on the group functions in the HAVING clause are applied to the grouped rows before the final output is displayed.
The following table describes how logical "OR" operator selects a row.
NO
NO
NO
first_nam last_nam age e e ------------Rahul Anajali Shekar ------------- -----Sharma Bhagwat Gowda 10 12 15
The following table describes how logical "AND" operator selects a row.
Chandra Chess
The following table describes how logical "NOT" operator selects a row.
Nested Logical Operators: You can use multiple logical operators in an SQL statement. When you combine the logical operators in a SELECT statement, the order in which the statement is processed is 1) NOT 2) AND 3) OR For example: If you want to select the names of the students who age is between 10 and 15 years, or those who do not play football, the
SELECT first_name, last_name, age, games FROM student_details WHERE age >= 10 AND age <= 15 OR NOT games = 'Football'
The output would be something like,
first_na last_na age games me me ------------Rahul Priya ------------ ------- ----------Sharma 10 Chandra 15 Cricket Chess
In this case, the filter works as follows: Condition 1: All the students you do not play football are selected. Condition 2: All the students whose are aged between 10 and 15 are selected. Condition 3: Finally the result is, the rows which satisfy atleast one of the above conditions is returned. NOTE:The order in which you phrase the condition is important, if the order changes you are likely to get a different result
SQL Operators
There are two type of Operators, namely Comparison Operators and Logical Operators. These operators are used mainly in the WHERE clause, HAVING clause to filter the data to be selected.
Comparison Operators:
Comparison operators are used to compare the column data with specific values in a condition. Comparison Operators are also used along with the SELECT statement to filter data based on specific conditions. The below table describes each comparison operator.
Description equal to is not equal to less than greater than greater than or equal to less than or equal
to
Logical Operators:
There are three Logical Operators namely AND, OR and NOT. Logical operators are discussed in detail in the next section
Logical Operator Description s OR AND NOT For the row to be selected at least one of the conditions must be true. For a row to be selected all the specified conditions must be true. For a row to be selected the specified condition must be false.
The following table describes how logical "OR" operator selects a row.
first_nam last_nam age e e ------------Rahul Anajali Shekar ------------- -----Sharma Bhagwat Gowda 10 12 15
The following table describes how logical "AND" operator selects a row.
Chandra Chess
The following table describes how logical "NOT" operator selects a row.
You can use multiple logical operators in an SQL statement. When you combine the logical operators in a SELECT statement, the order in which the statement is processed is 1) NOT 2) AND 3) OR For example: If you want to select the names of the students who age is between 10 and 15 years, or those who do not play football, the
SELECT first_name, last_name, age, games FROM student_details WHERE age >= 10 AND age <= 15 OR NOT games = 'Football'
The output would be something like,
first_na last_na age games me me ------------Rahul Priya ------------ ------- ----------Sharma 10 Chandra 15 Cricket Chess
In this case, the filter works as follows: Condition 1: All the students you do not play football are selected. Condition 2: All the students whose are aged between 10 and 15 are selected. Condition 3: Finally the result is, the rows which satisfy atleast one of the above conditions is returned. NOTE:The order in which you phrase the condition is important, if the order changes you are likely to get a different result.
Comparisio Description n Operators LIKE IN column value is similar to specified character(s). column value is equal to any one
of a specified set of values. column value is between two BETWEEN...A values, including the end values ND specified in the range. IS NULL column value does not exist.
For example: To select all the students whose name begins with 'S'
The above select statement searches for all the rows where the first letter of the column first_name is 'S' and rest of the letters in the name can be any character. There is another wildcard character you can use with LIKE operator. It is the underscore character, ' _ ' . In a search string, the underscore signifies a single character. For example: to display all the names with 'a' second character,
first_name ------------Rahul
last_name ------------Sharma
NOTE:Each underscore act as a placeholder for only one character. So you can use more than one underscore. Eg: ' __i% '-this has two underscores towards the left, 'S__j%' - this has two underscores between character 'S' and 'i'.
first_nam last_nam age e e ------------Rahul Anajali Shekar ------------- -----Sharma Bhagwat Gowda 10 12 15
SQL IN Operator:
The IN operator is used when you want to compare a column with more than one value. It is similar to an OR condition. For example: If you want to find the names of students who are studying either Maths or Science, the query would be like,
You can include more subjects in the list like ('maths','science','history') NOTE:The data used to compare is case sensitive.
column_name1, column_name2 are the names of the columns which define the primary Key. The syntax within the bracket i.e. [CONSTRAINT constraint_name] is optional. For Example: To create an employee table with Primary Key constraint, the query would be like. Primary Key at column level:
( id number(5) PRIMARY KEY, name char(20), dept char(10), age number(2), salary number(10), location char(10) );
or
( id number(5) CONSTRAINT emp_id_pk PRIMARY KEY, name char(20), dept char(10), age number(2), salary number(10), location char(10) );
Primary Key at column level:
( id number(5), name char(20), dept char(10), age number(2), salary number(10), location char(10), CONSTRAINT emp_id_pk PRIMARY KEY (id) );
Primary Key at table level:
( id number(5), NOT NULL, name char(20), dept char(10), age number(2), salary number(10), location char(10),
( product_id number(5) CONSTRAINT pd_id_pk PRIMARY KEY, product_name char(20), supplier_name char(20), unit_price number(10) );
CREATE TABLE order_items
( order_id number(5) CONSTRAINT od_id_pk PRIMARY KEY, product_id number(5) CONSTRAINT pd_id_fk REFERENCES, product(product_id), product_name char(20), supplier_name char(20), unit_price number(10) );
Foreign Key at table level:
( order_id number(5) , product_id number(5), product_name char(20), supplier_name char(20), unit_price number(10) CONSTRAINT od_id_pk PRIMARY KEY(order_id), CONSTRAINT pd_id_fk FOREIGN KEY(product_id) REFERENCES product(product_id) );
2) If the employee table has a 'mgr_id' i.e, manager id as a foreign key which references primary key 'id' within the same table, the query would be like,
( id number(5) PRIMARY KEY, name char(20), dept char(10), age number(2), mgr_id number(5) REFERENCES employee(id), salary number(10), location char(10) );
( id number(5), name char(20) CONSTRAINT nm_nn NOT NULL, dept char(10), age number(2), salary number(10), location char(10) );
( id number(5) PRIMARY KEY, name char(20), dept char(10), age number(2), salary number(10), location char(10) CONSTRAINT loc_un UNIQUE );
Unique Key at table level:
( id number(5) PRIMARY KEY, name char(20), dept char(10), age number(2), salary number(10), location char(10), CONSTRAINT loc_un UNIQUE(location) );
( id number(5) PRIMARY KEY, name char(20), dept char(10), age number(2), gender char(1) CHECK (gender in ('M','F')), salary number(10), location char(10) );
Check Constraint at table level:
( id number(5) PRIMARY KEY, name char(20), dept char(10), age number(2), gender char(1), salary number(10), location char(10), CONSTRAINT gender_ck CHECK (gender in ('M','F')) );
1.
SQL Commands:
SQL commands are instructions used to communicate with the database to perform specific task that work with data. SQL commands can be used not only for searching the database but also to perform various other functions like, for example, you can create tables, add data to tables, or modify data, drop the table, set permissions for users. SQL commands are grouped into four major categories depending on their functionality:
Data Definition Language (DDL) - These SQL commands are used for creating, modifying, and dropping the structure of database objects. The commands are CREATE, ALTER, DROP, RENAME, and TRUNCATE.
Data Manipulation Language (DML) - These SQL commands are used for storing, retrieving, modifying, and deleting data. These commands are SELECT, INSERT, UPDATE, and DELETE.
Transaction Control Language (TCL) - These SQL commands are used for managing changes affecting the data. These commands are COMMIT, ROLLBACK, and SAVEPOINT. Data Control Language (DCL) - These SQL commands are used for providing security to database objects. These commands are GRANT and REVOKE.
SQL Alias
SQL Aliases are defined for columns and tables. Basically aliases is created to make the column selected more readable. For Example: To select the first name of all the students, the query would be like:
There are more than one tables involved in a query, Functions are used in the query, The column names are big or not readable, More than one columns are combined together
SQL DISTINCT(): This function is used to select the distinct rows. For Example: If you want to select all distinct department names from employee table, the query would be:
SQL MAX(): This function is used to get the maximum value from a column. To get the maximum salary drawn by an employee, the query would be:
SQL MIN(): This function is used to get the minimum value from a column. To get the minimum salary drawn by an employee, he query would be:
SQL AVG(): This function is used to get the average value of a numeric column. To get the average salary, the query would be
SQL SUM(): This function is used to get the sum of a numeric column To get the total salary given out to the employees,
SQL Joins
SQL Joins are used to relate information in different tables. A Join condition is a part of the sql query that retrieves rows from two or more tables. A SQL Join condition is used in the SQL WHERE Clause of select, update, delete statements. The Syntax for joining two tables is:
SELECT col1, col2, col3... FROM table_name1, table_name2 WHERE table_name1.col2 = table_name2.col1;
If a sql join condition is omitted or if it is invalid the join operation will result in a Cartesian product. The Cartesian product returns a number of rows equal to the product of all rows in all the tables being joined. For example, if the first table has 20 rows and the second table has 10 rows, the result will be 20 * 10, or 200 rows. This query takes a long time to execute. Lets use the below two tables to explain the sql join conditions. database table "product";
product_id product_name supplier_name unit_price 100 Camera Nikon 300 101 Television Onida 100 102 Refrigerator Vediocon 150 103 Ipod Apple 75 104 Mobile Nokia 50
database table "order_items";
total_units 30 5 25 10
SQL Joins can be classified into Equi join and Non Equi join. 1) SQL Equi joins It is a simple sql join condition which uses the equal sign as the comparison operator. Two types of equi joins are SQL Outer join and SQL Inner join. For example: You can get the information about a customer who purchased a product and the quantity of product. 2) SQL Non equi joins It is a sql join condition which makes use of some comparison operator other than the equal sign like >, <, >=, <=
For example: If you want to display the product information for each order the query will be as given below. Since you are retrieving the data from two tables, you need to identify the common column between these two tables, which is theproduct_id. The query for this type of sql joins would be like,
product product_n order_i total_un _id ame d its -------------------------100 101 Camera Television 5103 10 ------------------------
5 25 30
NOTE:If the (+) operator is used in the left side of the join condition it is equivalent to left outer join. If used on the right side of the join condition it is equivalent to right outer join.
first_na last_na subject me me ------------Anajali Shekar Rahul ------------ -----------Bhagwat Maths Gowda Maths
Sharma Science
SQL Views
A VIEW is a virtual table, through which a selective portion of the data from one or more tables can be seen. Views do not contain data of their own. They are used to restrict access to the database or to hide data complexity. A view is stored as a SELECT statement in the database. DML operations on a view like INSERT, UPDATE, DELETE affects the data in the original table upon which the view is based. The Syntax to create a sql view is
view_name is the name of the VIEW. The SELECT statement is used to define the columns and rows that you want to display in the view. For Example: to create a view on the product table the sql query would be like
SQL Subquery
Subquery or Inner query or Nested query is a query in a query. A subquery is usually added in the WHERE Clause of the sql statement. Most of the time, a subquery is used when you know how to search for a value using a SELECT statement, but do not know the exact value. Subqueries are an alternate way of returning data from multiple tables. Subqueries can be used with the following sql statements along with the comparision operators like =, <, >, >=, <= etc.
Subquery Example:
1) Usually, a subquery should return only one record, but sometimes it can also return multiple records when used with operators like IN, NOT IN in the where clause. The query would be like,
2) Lets consider the student_details table which we have used earlier. If you know the name of the students who are studying science subject, you can get their id's by using this query below,
FROM student_details WHERE first_name IN (SELECT first_name FROM student_details WHERE subject= 'Science');
Output:
id -------100 102
In the above sql statement, first the inner query is processed first and then the outer query is processed.
3) Subquery can be used with INSERT statement to add rows of data from one or more tables to another table. Lets try to group all the students who study Maths in a table 'maths_group'.
SELECT id, first_name || ' ' || last_name FROM student_details WHERE subject= 'Maths'
4) A subquery can be used in the SELECT statement as follows. Lets use the product and order_items table defined in the sql_joins section.
select p.product_name, p.supplier_name, (select order_id from order_items where product_id = 101) as order_id from product p where p.product_id = 101
product_name -----------------Television
Correlated Subquery
A query is called correlated subquery when both the inner query and the outer query are interdependent. For every row processed by the inner query, the outer query is processed as well. The inner query depends on the outer query before it can be processed.
SQL Index
Index in sql is created on existing tables to retrieve the rows quickly. When there are thousands of records in a table, retrieving information will take a long time. Therefore indexes are created on columns which are accessed frequently, so that the information can be retrieved quickly. Indexes can be created on a single column or a group of columns. When a index is created, it first sorts the data and then it assigns a ROWID for each row. Syntax to create Index:
ON table_name (column_name1,column_name2...);
Syntax to create SQL unique Index:
ON table_name (column_name1,column_name2...);
index_name is the name of the INDEX. table_name is the name of the table to which the indexed column belongs. column_name1, column_name2.. is the list of columns which make up the INDEX. In Oracle there are two types of SQL index namely, implicit and explicit.
Implicit Indexes:
They are created when a column is explicity defined with PRIMARY KEY, UNIQUE KEY Constraint.
Explicit Indexes:
They are created using the "create index.. " syntax. NOTE: 1) Even though sql indexes are created to access the rows in the table quickly, they slow down DML operations like INSERT, UPDATE, DELETE on the table, because the indexes and tables both are updated along when a DML operation is performed. So use indexes only on columns which are used to search the table frequently. 2) Is is not required to create indexes on table which have less data. 3) In oracle database you can define up to sixteen (16) columns in an INDEX.
DCL commands are used to enforce database security in a multiple user database environment. Two types of DCL commands are GRANT and REVOKE. Only Database Administrator's or owner's of the database object can provide/remove privileges on a database object.
GRANT privilege_name
user_name is the name of the user to whom an access right is being granted. PUBLIC is used to grant access rights to all users. ROLES are a set of privileges grouped together. WITH GRANT OPTION - allows a user to grant access rights to other users. For Example: GRANT SELECT ON employee TO user1;This command grants a SELECT permission on employee table to user1.You should use the WITH GRANT option carefully because for example if you GRANT SELECT privilege on employee table to user1 using the WITH GRANT option, then user1 can GRANT SELECT privilege on employee table to another user, such as user2 etc. Later, if you REVOKE the SELECT privilege on employee from user1, still user2 will have SELECT privilege on employee table.
REVOKE privilege_name
System Description Privileges CREATE object allows users to create the specified object in their own schema.
CREATE ANY allows users to create the specified object object in any schema.
The above rules also apply for ALTER and DROP system privileges.
Object Description Privileges INSERT SELECT UPDATE EXECUTE allows users to insert rows into a table. allows users to select data from a database object. allows user to update data in a table. allows user to execute a stored procedure or a function.
Roles: Roles are a collection of privileges or access rights. When there are many users in a database it becomes difficult to grant or revoke privileges to users. Therefore, if you define roles, you can grant or revoke privileges to users, thereby automatically granting or revoking privileges. You can either create Roles or use the system roles pre-defined by oracle. Some of the privileges granted to the system roles are as given below:
System Privileges Granted to the Role Role CREATE TABLE, CREATE VIEW, CONNECT CREATE SYNONYM, CREATE SEQUENCE, CREATE SESSION etc. CREATE PROCEDURE, CREATE SEQUENCE, CREATE TABLE, CREATE RESOURC TRIGGER etc. The primary usage of E the RESOURCE role is to restrict access to database objects. DBA ALL SYSTEM PRIVILEGES
Creating Roles:
The Syntax to create a role is:
[IDENTIFIED BY password];
For Example: To create a role called "developer" with password as "pwd",the code will be as follows
[IDENTIFIED BY pwd];
It's easier to GRANT or REVOKE privileges to the users through a role rather than assigning a privilege directly to every user. If a role is identified by a password, then, when you GRANT or REVOKE privileges to the role, you definitely have to identify it with the password. We can GRANT or REVOKE privilege to a role as below. For example: To grant CREATE TABLE privilege to a user by creating a testing role: First, create a testing Role