SQL
Structured Query Language
Lets do practical on DATABASE…
SQL – Structured Query Language
SQL – features
MYSQL Elements
Literals
format
Data Type
Numeric Data Types
Data type | Description |
INT | Numbers without decimal. Store up to 11 digits. -2147483648 to 2147483647 |
FLOAT(M,D) | Real numbers i.e. number with decimal. M specify length of numeric value including decimal place D and decimal symbol. For example if it is given as FLOAT(8,2) then 5 integer value 1 decimal symbol and 2 digit after decimal TOTAL – 8. it can work on 24 digits after decimal. |
DOUBLE(M,D) | Real numbers with more precision up to 53 place after decimal. |
DECIMAL | It is used to store exact numeric value that preserve exact precision for e.g. money data in accounting system. DECIMAL(P,D) means P no. of significant digits (1-65), D represent no. of digit after decimal(0-30), for e.g DECIMAL(6,2) means 4 digit before decimal and 2 digit after decimal. Max will be 9999.99 |
Date and Time Types
Data type | Description |
DATE | A date in YYY-MM-DD format between 1000-01-01 to 9999-12-31 In oracle data format is DD-MON-YYYY for e.g 10-SEP-2019 |
DATETIME | Combination of date and time. For example to store 4th December 2018 and time is afternoon 3:30 then it should be written as – 2018-12-04 15:30:00 |
TIME | To store time in the format HH:MM:SS |
YEAR(M) | To store only year part of data where M may be 2 or 4 i.e. year in 2 digit like 18 or 4 digit like 2018 |
String Types
Data type | Description |
CHAR(M) | Fixed length string between 1 and 255. it always occupy M size for each data for example if size is CHAR(20) and we store value ‘MOBILE’ , although the size of MOBILE is 6 but in a table it will occupy 20 size with space padded at right side for remaining place. Mostly use in the case where the data to be insert is of fixed size like Grade (A,B,C,..) or Employee code as E001, E002, etc. In this case CHAR will give better performance than varchar |
VARCHAR(M) | Variable length string between 1 and 65535 (from MySQL 5.0.3) , earlier it was 255. it takes size as per the data entered for example with VARCHAR(20) if the data entered is MOBILE then it will take only 6 byte. It is useful for the data like name, address where the number of character to be enter is not fixed. |
Difference between CHAR & VARCHAR
CHAR | VARCHAR |
Fixed length string | Variable length string |
Used where number of character to enter is fixed like Grade, EmpCode, etc | Used where number of character to be enter is not fixed like name, address etc. |
Fast, no memory allocation every time | Slow, as it take size according to data so every time memory allocation is done |
It takes more memory | It takes less space |
NULL VALUE
NOT NULL or PRIMARY KEY
then we will insert NULL
COMMENTS
SQL COMMAND SYNTAX
Commands | Description |
Keywords | That have special meaning in SQL. They are the commands in mysql |
Clause | They are used to support mysql commands like FROM, WHERE etc. |
Arguments | Values passed to clause like table name to FROM clause conditions to WHERE clause for e.g. SELECT * FROM EMP WHERE SALARY>12000; In the above command SELECT is keyword FROM AND WHERE is clause EMP is an argument to FROM SALARY>12000 is argument to WHERE |
CREATING and USING DATABASE
CREATE DATABASE <DATABASE NAME>
CREATE DATABASE MYDB;
TO SEE LIST OF DATABASES: SHOW DATABASES;
TO OPEN ANY DATABASE TO WORK
USE DATABASENAME
USE MYDB;
CREATING TABLE
datatype(size),
Syntax:-
Create Table TableName(ColumnName ColumnName datatype(size),…..);
Example:-
Create Table Employee(empno int primary key , name varchar(20) not null, dept varchar(20) not null, salary int not null);
Create table Student(roll int primary key , name varchar(20) not null ,stream varchar(20) not null, per int not null);
INSERTING RECORDS IN TABLE
Syntax:-
Insert into tablename values(value1,value2,…)
Note:-
yyyy-mm-dd (in mysql)
INSERTING RECORDS IN TABLE
Syntax:-
Insert into emp values(1, ‘Rakesh’,’Sales’,34000) Insert into student values(1,’Mahi’,’Science’,89); Inserting in selected columns
Insert into emp (empno, name, dept ) values (2,’dipanker’,’IT’);
2 tables. Foreign key column will be dependent on PRIMARY KEY column of another table and allows to enter only those values in foreign key whose corresponding value exists in PRIMARY KEY
Now lets check PRIMARY KEY is working or not by inserting
duplicate empno
Now lets check NOT NULL is working or not by inserting
NULL value in name column
Now let us check how DEFAULT constraint to use. (Remember to use DEFAULT CONSTRAINT, The applied column name will not be used with INSERT
Default value ‘Marketing’ is automatically inserted
SELECTING RECORD
Select statement allows to send queries to table and fetch the desired record. Select can be used to select both horizontal and vertical subset.
Syntax:-
Select <columnnames> FROM tablename [ where condition ];
SELECTING RECORD
Selecting all record and all columns
select * from emp;
Selecting desired columns
select empno, name from emp;
Changing the order of columns
select dept, name from emp;
DISTINCT keyword
DISTINCT keyword is used to eliminate the duplicate records from output. For e.g. if we select dept from employee table it will display all the department from the table including duplicate rows.
select dept from emp;
Output will be:-
Dept
--------
Sales Sales IT
IT
HR
Empno | Name | Dept | Salary |
1 | Ravi | Sales | 24000 |
2 | Sunny | Sales | 35000 |
3 | Shobit | IT | 30000 |
4 | Vikram | IT | 27000 |
5 | nitin | HR | 45000 |
DISTINCT keyword
If we don’t want to see the duplicate rows in output we have to use DISTINCT keyword.
Select DISTINCT dept from emp;
Output will be:-
Dept
--------
Sales IT HR
Empno | Name | Dept | Salary |
1 | Ravi | Sales | 24000 |
2 | Sunny | Sales | 35000 |
3 | Shobit | IT | 30000 |
4 | Vikram | IT | 27000 |
5 | nitin | HR | 45000 |
PERFORMING SIMPLE CALCULATION
While performing SQL operations sometimes simple calculations are required, SQL provides facility to perform simple arithmetic operations in query. In MySQL we can give these queries without FROM clause i.e. table name is not required for these queries,
For Example
select 10*2; select 10*3/6;
PERFORMING SIMPLE CALCULATION
MySQL also provides DUAL table to provide compatibility with other DBMS. It is dummy table used for these type queries where table name is not required. It contains one row and one column. For example:
select 100+200 from DUAL; select curdate() from dual; CALCULATION WITH TABLE DATA
Select name, salary, salary * 12 Annual_Salary from emp; Select empno, salary+1000 from emp
Update student set total=phy+chem+maths+cs+eng;
COLUMN ALIAS
It is a temporary name/label given to column that will appear in output. For example if column name is dept and you want Department to appear as column heading then we have to give Column Alias. If we want alias name of multiple words then it should be enclosed in double quotes. Its format is :
ColumnName [AS] ColumnAlias
Example
HANDLING NULL
From the above table we can observe that salary of Shaban is NULL i.e. not assigned, Now if we want 0 or “not assigned” for the salary information of shaban, we have to use IFNULL()
select empno,name,IFNULL(Salary,”not assigned”) from emp;
Column value to substitute if NULL found
PUTTING TEXT IN QUERY OUTPUT
SQL allows to put user defined symbols or text with table output. Like ‘Rs’ with Salary or ‘%’ symbol with commission
For e.g.
select name, dept, ‘Rs.’, salary from emp;
select name, ‘ works in department’, dept, ‘ and getting salary rs. ‘, salary from emp;
select name, concat(‘Rs. ‘, salary) from emp;
WHERE clause
WHERE clause is used to select specified rows. It allows to select only desired rows by applying condition. We can use all comparison(>, <, >=, <=, =, <>) and logical operator (AND, OR, NOT).
AND ( &&), OR (||) , NOT (!)
For example
select * from emp where salary>4000; select * from emp where empno=1;
select name,dept from emp where dept=‘HR’;
WHERE clause
AND(&&) means both conditions must be true, OR(||) means any condition must be true to produce output. NOT(!) will do the reverse checking.
select * from emp where salary>4000 and salary<8000; select * from emp where dept=‘Sales’ and salary<30000;
select name,dept from emp where dept=‘HR’ and salary>=20000 and salary<=40000;
select * from emp where dept=‘HR’ or dept=‘IT’; select * from emp where NOT empno=4;
SQL operators
BETWEEN
BETWEEN allows to specify range of values to search in any column. It is used with AND clause and it will include the specified values during the searching. For e.g.
select * from emp where salary between 18000 and 30000; select name from emp where empno between 2 and 5;
select * from emp where salary NOT between 25000 and 35000
IN
IN allows to specify LIST of values in which searching will be performed. It will return all those record that matches any value in a given list of values. It can be thought as an alternative of multiple ORs
select * from emp where dept IN(‘sales’,’it’); select name from emp where empno IN (2,4,5); select * from emp where dept NOT IN(‘sales’,’it’)
LIKE
LIKE allows to search based on pattern. It is used when we don’t want to search an exact value or we don’t know that exact value, and we know only the pattern of value like name starting from any particular letter, or ending with and containing any particular letter or word.
LIKE is used with two wildcard characters:
LIKE
Search for employee whose name begins from ‘s’
select * from emp where name like ‘s%’;
Search for employee whose name ends with ‘r’
select * from emp where name like ‘%r’;
Search for employee whose name contains ‘a’ anywhere
select * from emp where name like ‘%a%’
Search for employee whose dob is in feb
select * from emp where dob like ‘%-02-%’
Search employee whose name is of 5 letters begins from ‘s’
select * from emp where name like ‘s_ _ _ _ ’;
IS NULL
IS NULL is used to compare NULL values present in any column. Because NULL is not considered as value so we cannot compare with = sign, so to compare with NULL SQL provides IS NULL.
select * from emp where salary is null; select * from emp where salary is not null;
OPERATOR PRECEDENCE
When multiple operators are used in expression, then evaluation of expression takes place in the order of precedence. Higher precedence operator will execute
first.
! |
*, /, DIV, %, MOD |
- + |
<, > |
==, >=, <=, !=, IS, LIKE, IN, BETWEEN |
NOT |
AND |
OR |
HIGH
LOW
SORTING OUTPUT
By default records will come in the output in the same order in which it was entered. To see the output rows in sorted or arranged in ascending or descending order SQL provide ORDER BY clause. By default output will be ascending order(ASC) to see output in descending order we use DESC clause with ORDER BY.
select * from emp order by name; (ascending order) select * from emp order by salary desc;
select * from emp order by dept asc, salary desc;
MYSQL FUNCTIONS
A function is built – in code for specific purpose that takes value and returns a single value. Values passed to functions are known as arguments/parameters.
There are various categories of function in MySQL:-
String Function
Function | Description | Example |
CHAR() | Return character for given ASCII Code | Select Char(65); Output- A |
CONCAT() | Return concatenated string | Select concat(name, ‘ works in ‘, dept,’ department); |
LOWER()/ LCASE() | Return string in small letters | Select lower(‘INDIA’); Output- india Select lower(name) from emp; |
SUBSTRING( S,P,N) / MID(S,P,N) | Return N character of string S, beginning from P | Select SUBSTRING(‘LAPTOP’,3,3); Output – PTO Select SUBSTR(‘COMPUTER’,4,3); Output – PUT |
UPPER()/ UCASE() | Return string in capital letters | Select Upper(‘india’); Output- INDIA |
LTRIM() | Removes leading space | Select LTRIM(‘ Apple’); Output- ‘Apple’ |
RTRIM | Remove trailing space | Select RTRIM(‘Apple ‘); Output- ‘Apple’ |
String Function
Function | Description | Example |
TRIM() | Remove spaces from beginning and ending | Select TRIM(‘ Apple ‘); Output-’Apple’ Select * from emp where trim(name) = ‘Suyash’; |
INSTR() | It search one string in another string and returns position, if not found 0 | Select INSTR(‘COMPUTER’,’PUT’); Output-4 Select INSTR(‘PYTHON’,’C++’); Output – 0 |
LENGTH() | Returns number of character in string | Select length(‘python’); Output- 7 Select name, length(name) from emp |
LEFT(S,N) | Return N characters of S from beginning | Select LEFT(‘KV OEF’,2); Output- KV |
RIGHT(S,N) | Return N characters of S from ending | Select RIGHT(‘KV OEF’,3); Output- OEF |
Numeric Function
Function | Description | Example |
MOD(M,N) | Return remainder M/N | Select MOD(11,5); Output- 1 |
POWER(B,P) | Return B to power P | Select POWER(2,5); Output-32 |
ROUND(N,D) | Return number rounded to D place after decimal | Select ROUND(11.589,2); Output- 11.59 Select ROUND(12.999,2); Output- 13.00 |
SIGN(N) | Return -1 for –ve number 1 for +ve number | Select sign(-10); Output : -1 Select sign(10); Output : 1 |
SQRT(N) | Returns square root of N | Select SQRT(144); Output: 12 |
TRUNCATE( M,N) | Return number upto N place after decimal without rounding it | Select Truncate(15.789,2); Output: 15.79 |
Date and Time Function
Function | Description | Example |
CURDATE()/ CURRENT_DATE() / CURRENT_DATE | Return the current date | Select curdate(); Select current_date(); |
DATE() | Return date part from date- time expression | Select date(‘2018-08-15 12:30’); Output: 2018-08-15 |
MONTH() | Return month from date | Select month(‘2018-08-15’); Output: 08 |
YEAR() | Return year from date | Select year(‘2018-08-15’); Output: 2018 |
DAYNAME() | Return weekday name | Select dayname(‘2018-12-04’); Output: Tuesday |
DAYOFMONTH() | Return value from 1-31 | Select dayofmonth(‘2018-08-15’) Output: 15 |
DAYOFWEEK() | Return weekday index, for Sunday-1, Monday-2, .. | Select dayofweek(‘2018-12-04’); Output: 3 |
DAYOFYEAR() | Return value from 1-366 | Select dayofyear(‘2018-02-10’) Output: 41 |
Date and Time Function
Function | Description | Example |
NOW() | Return both current date and time at which the function executes | Select now(); |
SYSDATE() | Return both current date and time | Select sysdate() |
Difference Between NOW() and SYSDATE() :
NOW() function return the date and time at which function was executed even if we execute multiple NOW() function with select. whereas SYSDATE() will always return date and time at which each SYDATE() function started execution. For example.
mysql> Select now(), sleep(2), now();
Output: 2018-12-04 10:26:20, 0, 2018-12-04 10:26:20
mysql> Select sysdate(), sleep(2), sysdate();
Output: 2018-12-04 10:27:08, 0, 2018-12-04 10:27:10
AGGREGATE functions / GROUP functions�
Aggregate function is used to perform calculation on group of
rows and return the calculated summary like sum of salary,
average of salary etc.
Available aggregate functions are –
AGGREGATE functions
select SUM(salary) from emp;
Output – 161000
select SUM(salary) from emp where dept=‘sales’;
Output - 59000
Empno | Name | Dept | Salary |
1 | Ravi | Sales | 24000 |
2 | Sunny | Sales | 35000 |
3 | Shobit | IT | 30000 |
4 | Vikram | IT | 27000 |
5 | nitin | HR | 45000 |
AGGREGATE functions
select AVG(salary) from emp;
Output – 32200
select AVG(salary) from emp where dept=‘sales’;
Output - 29500
Empno | Name | Dept | Salary |
1 | Ravi | Sales | 24000 |
2 | Sunny | Sales | 35000 |
3 | Shobit | IT | 30000 |
4 | Vikram | IT | 27000 |
5 | nitin | HR | 45000 |
AGGREGATE functions
select COUNT(name) from emp;
Output – 5
select COUNT(salary) from emp where dept=‘HR’;
Output - 1
select COUNT(DISTINCT dept) from emp;
Output - 3
Empno | Name | Dept | Salary |
1 | Ravi | Sales | 24000 |
2 | Sunny | Sales | 35000 |
3 | Shobit | IT | 30000 |
4 | Vikram | IT | 27000 |
5 | nitin | HR | 45000 |
AGGREGATE functions
select MAX(Salary) from emp;
Output – 45000
select MAX(salary) from emp where dept=‘Sales’;
Output - 35000
Empno | Name | Dept | Salary |
1 | Ravi | Sales | 24000 |
2 | Sunny | Sales | 35000 |
3 | Shobit | IT | 30000 |
4 | Vikram | IT | 27000 |
5 | nitin | HR | 45000 |
AGGREGATE functions
select MIN(Salary) from emp;
Output – 24000
select MIN(salary) from emp where dept=‘IT’;
Output - 27000
Empno | Name | Dept | Salary |
1 | Ravi | Sales | 24000 |
2 | Sunny | Sales | 35000 |
3 | Shobit | IT | 30000 |
4 | Vikram | IT | 27000 |
5 | nitin | HR | 45000 |
AGGREGATE functions
select COUNT(*) from emp;
Output – 6
select COUNT(salary) from emp;
Output - 5
Empno | Name | Dept | Salary |
1 | Ravi | Sales | 24000 |
2 | Sunny | Sales | 35000 |
3 | Shobit | IT | 30000 |
4 | Vikram | IT | 27000 |
5 | nitin | HR | 45000 |
6 | Krish | HR | |
count(*) Vs count()
Count(*) function is used to count the number of rows in query output whereas count() is used to count values present in any column excluding NULL values.
Note:
All aggregate function ignores the NULL values.
GROUP BY
GROUP BY clause is used to divide the table into logical groups and we can perform aggregate functions in those groups. In this case aggregate function will return output for each group. For example if we want sum of salary of each department we have to divide table records
Aggregate functions by default takes the entire table as a single group that’s why we are getting the sum(), avg(), etc output for the entire table. Now suppose organization wants the sum() of all the job separately, or wants to find the average salary of every job. In this case we have to logically divide our table into groups based on job, so that every group will be passed to aggregate function for calculation and aggregate function will return the result for every group.
aggregate
column value. In those logically divided records we can apply functions.
For. E.g.
SELECT SUM(SAL) FROM EMP GROUP BY DEPT; SELECT JOB,SUM(SAL) FROM EMP GROUP BY DEPT; SELECT JOB,SUM(SAL),AVG(SAL),MAX(SAL),COUNT(*) EMPLOYEE_COUNT FROM EMP;
NOTE :- when we are using GROUP BY we can use only aggregate function and the column on which we are grouping in the SELECT list because they will form a group other than any column will gives you an error because they will be not the part of the group.
For e.g.
SELECT ENAME,JOB,SUM(SAL) FROM EMP GROUP BY JOB;
Error -> because Ename is not a group expression
HAVING with GROUP BY
JUST A MINUTE…
ItemNo | Item | Dcode | Qty | UnitPrice | StockDate |
5005 | Ball Pen 0.5 | 102 | 100 | 16 | 2018-03-10 |
5003 | Ball Pen 0.25 | 102 | 150 | 20 | 2017-05-17 |
5002 | Gel Pen Premium | 101 | 125 | 14 | 2018-04-20 |
5006 | Gel Pen Classic | 101 | 200 | 22 | 2018-10-08 |
5001 | Eraser Small | 102 | 210 | 5 | 2018-03-11 |
5004 | Eraser Big | 102 | 60 | 10 | 2017-11-18 |
5009 | Sharpener Classic | NULL | 160 | 8 | 2017-06-12 |
After new column is added, if you select record it will display NULL in that column for previous record, we have to update it using UPDATE command
ALTER TABLE ABCLtd drop designation;
Dropping primary key
ALTER TABLE EMP DROP PRIMARY KEY CASCADE;
While dropping Primary Key, if it is connected with child table, it will not gets deleted By default, however if you want to drop it we have to issue following commands
JUST A MINUTE…
Write down the following queries based on the given table:
JUST A MINUTE…
Write down the following queries based on the given table:
9) Change the unitprice to 20 for itemno 5005
10) Delete the record of itemno 5001