SQL

Views:
 
     
 

Presentation Description

My study note of the SQL.

Comments

By: pankajgirame (39 month(s) ago)

Thank you very much........

By: kashish123 (81 month(s) ago)

thnx 4 ur help

By: hadi1982 (82 month(s) ago)

shokran

By: anamika261190 (88 month(s) ago)

thanku mam....thnx alot.....

Presentation Transcript

SQL - Study note : 

SQL - Study note By Maggie Zhou Sep, 2008

Preface : 

2 Preface This is one of my study note for SQL Main part of this note is from Head First SQL: Your Brain on SQL -- A Learner's Guide By Lynn BeighleyAugust 2007 Pages: 607 Series: Head FirstISBN 10: 0-596-52684-9 | ISBN 13: 9780596526849 This is a great book for beginner, and you will have a lot of fun when you go through this book (trust me, this is not a commercial) But it isn’t only from this book: I organized this note in my understanding way. I added several concepts which I think are important

Basic concepts : 

3 Basic concepts SQL: /siːkwəl/, Structured Query Language, RDBMS: Relational DataBase Management Systems SQL Appeared in 1974 MySQL: SQL/PSM SQL/Persistent Stored Module (as in ISO SQL:2003) Oracle: PL/SQL Procedural Language/SQL (based on Ada)

MySQL installation : 

4 MySQL installation MySQL community Server Official free version of the MySQL RDBMS Steps to install MySQL on windows Download http://dev.mysql.com/downloads/ Choose windows from list Choose Windows ZIP/Setup.exe option Pick a mirror Run Setup Wizard Choose typical Install to default location: c:\program files\mysql\mysql server 5.0 Finally install it

Create (1) : 

5 Create (1) Case insensitive Database CREATE DATABASE name Table CREATE TABLE name ( data_name1 CHAR/CHARACTER(x~256), data_name2 DEC/DECIMAL(x,x), data_name3 INT/INTEGER, data_name4 BLOB, data_name5 DATE, data_name6 DATETIME/TIMESTAMP, data_name7 VARCHAR(x~256) );

Create (2) : 

6 Create (2) Columns / Attributes Mandatory value (… data_name CHAR(10) NOT NULL, …) set default value (… data_name DEC(3.2) NOT NULL DEFAULT 1.00, …) Use keyword as column’s name BAD, but can do  ‘INT’ is ok

Data type (1) : 

7 Data type (1) BOOLEAN RDBMS store a 1 for true, 0 for false You can insert: 1/’true’, 0/’false’, null INT Unsigned integer: values in the range 0 to 4294967295 Signed integer: INT(SIGNED) SMALLINT BIGINT MySQL also has: TINYINT, MEDIUMINT

Data type (2) : 

8 Data type (2) DATE and TIME DATE: yyyy-mm-dd DATATIME: yyyy-mm-dd hh:mm:ss TIMESTAMP: yyyymmddhhmmss TIME: hh:mm:ss DATE_FORMAT tells function the date_format you want SELECT DATE_FORMAT (date, ‘%M %Y’) FROM table_name; Result will be:  Auguest 2007

CAST : 

9 CAST CAST (column, TYPE); Types CHAR() DATE, DATETIME, TIME DECIMAL SIGNED [INTEGER] UNSIGNED [INTEGER] CAN Be included inside the INSERT, SELECT CAN’T DEC to INT TIME, DATE, DATETIEM, CHAR to DEC, or INT

Slide 10: 

10

Maintain : 

11 Maintain Change database USE database_name; Check structure of table DESC table_name; Check table content SELECT * FROM table_name Change Please see from Slides 23 Delete DROP TABLE table_name; Only can use on empty table

Add data : 

12 Add data Insert data INSERT INTO table_name (column_name1, column_name2,…) VALUES (‘value1’, ‘value2’,…); For the AUTO_INCREMENT column, can use ‘’, instead input value Synax for column Using column name can control the insert order, the value order should match Not using column name, value need including all the value, in exact order in table Synax for value: CHAR, VARCHAR, DATE, BLOB need ‘single quote’ INT, DEC do not use quote

Select (1) : 

13 Select (1) Show all data & all column SELECT * FROM table_name; Show chosen data & all column SELECT * FROM table_name WHERE column_name = value; Can use =, >, <, >=, <= INT, DEC can use ‘’ or not CHAR, BLOB, VARCHAR, DATE, TIMESTAMP… must use ‘’ Never use “ ” Show chosen data & chosen columns SELECT column_name1, column_name3,… FROM table_name WHERE column_name = value;

Select (2) : 

14 Select (2) Show multiple choose conditions SELECT * FROM table_name WHERE condition1 AND, OR AND: match all the conditions OR: match only one condition is enough Condition2; Comparison operators =, >, <, >=, <= <> mean not equal Find NULL SELECT * FROM table_name WHERE column_name IS NULL;

Select (3) : 

15 Select (3) Wide card SELECT * FROM table_name WHERE column_name LIKE ‘%XX’; %  any number of unknown characters _  just only one unknown character Given Range SELECT * FROM table_name WHERE column_name BETWEEN xx AND xx; Given Group SELECT * FROM table_name WHERE column_name IN (value, value,…); IN  the data match conditions NOT IN  the data do not match conditions

Select (4) : 

16 Select (4) NOT conditions Combine AND, OR, IS with NOT Right after AND, OR  AND NOT… IS NOT NULL means WHERE NOT name IS NULL Could do, but you shouldn’t do double negative Bad: WHERE NOT column <> ‘value’;

Database design : 

17 Database design Steps to design Pick one thing your table want to describe Make a list of information using the table Break down information into pieces and organizing table Atomic data Column with atomic data can’t have several value of the same type of data Table with atomic data can’t have multiple columns with same type of data Normal table Normal table won’t have duplicate data With less data to search through

1NF – FIRST NORMAL FORM : 

18 1NF – FIRST NORMAL FORM Each row of data must only contain atomic values Each row of data must have a unique identifier

Primary key : 

19 Primary key Create CREATE TABLE table_name (key_name data_type NOT NULL, PRIMARY KEY (key_name) ); OR CREATE TABLE table_name (key_name data_type NOT NULL PRIMARY KEY, … ); Key: Can not be NULL Must be compact Can not be changed Auto incrementally (key_name INT NOT NULL AUTO_INCREMENT PRIMARY KEY, … ); Data has same key value won’t be accepted The key can be overwritten – you still can make own value AUTO-INCREMENT  Only one per table, must be INT, cannot be NOT NULL

Show statements : 

20 Show statements SHOW CREATE TABLE table_name; Return a CREATE TABLE statement SHOW CREATE DATABASE database_name; Return a CREATE DATABASE statement SHOW COLUMNS FROM table_name; Equals to DESC table_name SHOW INDEX FROM table_name; SHOW WARNINGS; SHOW TABLES Show all the tables, views

Delete row : 

21 Delete row Delete row/rows base on condition DELETE FROM table_name WHERE condition…; Without condition, you will delete all data

Change row : 

22 Change row Update row/rows base on condition UPDATE table_name SET column_name = ‘new value’, other changes… WHERE column_name = ‘value’; Without condition, you will update all data Update can use simple math: Can use *, /, +, - SET column_name = column_name +1 Also can use operation on other data

ALTER Table (1) : 

23 ALTER Table (1) All about the columns – table structure Change Change name, data type of existing column Modify Data type or position of existing column Add Add new column Drop Delete column from table

ALTER Table (2) – ADD COLUMN : 

24 ALTER Table (2) – ADD COLUMN Alter table ALTER TABLE table_name Add column ADD COLUMN column_name type NOT NULL AUTO_INCREMENT FIRST, (don’t forget , ) ADD PRIMARY KEY (column_name); OR ADD COLUMN column_name type … AFTER another_column_name; Define the position; Can use: FIRST, LAST, AFTER, BEFORE Even can use: SECOND, FIFTH…

ALTER Table (3) – CHANGE/RENAME : 

25 ALTER Table (3) – CHANGE/RENAME Rename table ALTER TABLE table_name RENAME TO new_table_name Change column name and type ALTER TABLE table_name CHANGE COLUMN column_name new_column_name new_type …, …;

ALTER Table (3) – MODIFY : 

26 ALTER Table (3) – MODIFY Modify column ALTER TABLE table_name MODIFY COLUMN column_name new_type/size; Cannot change order of columns It won’t matter, due to you can use SELECT to control order

ALTER Table (3) – DROP : 

27 ALTER Table (3) – DROP Delete column ALTER TABLE table_name DROP COLUMN column_name; Remove AUTO_INCREMENT ALTER TABLE table_name CHANGE column_name new_column_name new_type;  without AUTO_INCREMENT Just simply without AUTO_INCREMENT After remove AUTO_INCREMENT, then you can drop the PRIMARY KEY, otherwise, will be error Remove PRIMARY KEY ALTER TABLE table_name DROP PRIMARY KEY;

Slide 28: 

28

String functions (1) : 

29 String functions (1) SELECT RIGHT(column_name, number) FROM table_name; Can use RIGHT, LEFT  start from right or left side of column Number: how many characters to select SELECT SUBSTRING_INDEX (column_name, ‘key’, index) FROM table_name; SUBSTRING_INDEX  subestring, everything in front of it ‘key’  the key character, key string is looking for Index  1 means looking for the first key, 2 means looking for the second key

String functions (2) : 

30 String functions (2) SUBSTRING(‘string’, index, index); SUBSTR(‘string’, index) Shortening the length of the string start right after the index UPPER(‘string’); LOWER(‘string’); REVERSE(‘string’); LTRIM(‘ string’); RTRIM(‘string ’); LENGTH(‘string’);

Copy : 

31 Copy Change all the data in a column UPDATE table_name SET column_name = new_value; Copy column UPDATE table_name SET column_name = source_column_name; Can use all the string function

Group data (1) : 

32 Group data (1) Category UPDATE table_name SET category = ‘value’ WHERE conditions… Update statements help you classify data Update statement’s order matters, due to they may change same value group data  data have same value in the column SELECT * FROM table_name GROUP BY column_name; Only show the only one and the first one record

Group data (2) : 

33 Group data (2) Choose value UPDATE table_name SET column_name = CASE WHEN condition1 THEN new_value1 WHEN condition2 AND condition3 THEN new_value2 ELSE new_value3  else is optional END; or END WHERE condition4; use this condition to choose specific rows; CASE expression can be used with SELECT, INSERT, DELETE and UPDATE

Order data (1) : 

34 Order data (1) Show ordered data SELECT column_names, … FROM table_name WHERE conditions, … ORDER BY column_name; Order rules Non-alphabet Number < text character NULL < Number NULL < alphabet character Uppercase < Lowercase Space < number…

Order data (2) : 

35 Order data (2) Ordered data by multiple columns ORDER BY column_name1, column_name2, …; First order by column_name1, then 2 Descending order ORDER BY column_name DESC; Can use DESCRIBE for DESC table_name But can not use DESCENDING Default order ASC means default order

Calculate data (1) : 

36 Calculate data (1) NULL is not used by all the calculation functions (absence) SUM() SELECT columns, SUM (column_name1) FROM table_name GROUP BY column_name1; Group all the date with same value in column_name1 Sum all value within the group AVG() SELECT columns, AVG (column_name1) FROM table_name GROUP BY column_name1;

Calculate data (2) : 

37 Calculate data (2) MIN() SELECT columns, MIN (column_name1) FROM table_name GROUP BY column_name1; MAX() SELECT columns, MAX (column_name1) FROM table_name GROUP BY column_name1;

Calculate data (3) : 

38 Calculate data (3) COUNT(): Count number of the rows in the column SELECT COUNT (column_name) FROM table_name; GROUP BY another_column; DISTINCT: Remove all the duplicate records SELECT DISTINCT column_name FROM table_name Be careful DISTINCT is a keyword DISTINCT + COUNT() use to calculate the number of absolute different data DISTINCT is used to remove duplicate record COUNT is used the count the number of the rows Thus this avoid count duplicate records

Calculate data (4) : 

39 Calculate data (4) Limit the number of results SELECT columns, SUM (column_name1) FROM table_name GROUP BY column_name1; ORDER BY SUM (column_name1); LIMIT number; ORDER BY must after the GROUP BY Limit number by range LIMIT index1, index2 index1 is start point  Start from 0 Index2 is number of showing result

SCHEMA : 

40 SCHEMA Schema is : A description of the data (columns and tables) in your database, along with any other related objects and the way they all connect Diagram for table design Split the non-atomic field into another table

Connect tables (1) : 

41 Connect tables (1) FOREIGN KEY Is a column in a table that reference the PRIMARY KEY of another table Child_table’s FOREIGN KEY is the PRIMARY KEY of Parent_table FOREIGN KEY is parent key, is from parent table FOREIGN KEY can be different name FOREIGN KEY can be NULL means there is no matching primary key in parent table FOREIGN KEY don’t have to be unique

Connect tables (2) : 

42 Connect tables (2) Foreign key + constraint Referential integrity Only be able to insert values into your foreign key that in parent table Use a foreign key to reference a unique value in the parent table UNIQUE Not available in MySQL CHECK

Create child table (1) : 

43 Create child table (1) CREATE TABLE table_name ( Columns… , child_column_name INT NOT NULL, Define child table column name, type…, Don’t forget “,” CONSTRAINT ‘parent_id_fk’  name: parent_table_name + parent_column_name + fk(foreign key) FOREIGN KEY (‘child_column_name’) REFERENCES parent_table_name (‘parent_column_name’) ) ;  book has mistake here

Relationships : 

44 Relationships One-to-one: plain line Faster queries Isolate column to avoid NULL in main table Make part of data less accessible Put large piece data into a separate table One-to-many: black arrow line, only one arrow at the end of many Many-to-many: black arrow line, arrows at both ends Two one-to-many relationships with a junction table in between

Junction table : 

45 Junction table Avoid duplicate data in many-to-many relationship A table step in between two many-to-many tables and simplify the relationship to one-to-many. Contain the two primary key columns of the two related table.

Composite primary key : 

46 Composite primary key Is a primary key Uses several columns together to form a unique primary key in a table

Dependent column : 

47 Dependent column The A column functionally depend B column,  A must change when B’s data is modified Notations T.x ; T.y Relational table T, column y is functionally dependent on column x Partial functional dependency Non-key column is dependent on some but not all, of the columns in a composite primary key Transitive functional dependency Non-key column is related to any of the other non-key columns

2NF- Second Normal Form : 

48 2NF- Second Normal Form 2NF focuses on how the primary key relates to the data 2NF rules: Be in 1NF Have no partial functional dependencies 1NF is also 2NF If all the columns in the table are part of the primary key OR It has a signal column primary key

3NF- Third Normal Form : 

49 3NF- Third Normal Form 3NF rules: Be in 2NF Have not transitive dependencies Table is in 2NF If it has an artificial primary key and no composite primary key

Slide 50: 

50

Pre-populate table (1) : 

51 Pre-populate table (1) Create table, then insert with select CREATE TABLE table_name  normal way ( Create Primary_key column, Column_name ); INSERT INTO table_name (column_name) SELECT column_name FROM parent_table_name GROUP BY column_name ORDER BY column_name;

Pre-populate table (2) : 

52 Pre-populate table (2) Create table with select, then alter to add primary key CREATE TABLE table_name AS SELECT column_name FROM parent_table_name GROUP BY column_name ORDER BY column_name; ALTER TABLE table_name ADD COLUMN primary_key column; AS  funneling all the output of the SELECT into the new table

Pre-populate table (3) : 

53 Pre-populate table (3) Create, select and insert at the same time CREATE TABLE table_name ( Create Primary_key column, Column_name ) AS SELECT column_name FROM parent_table_name GROUP BY column_name ORDER BY column_name ;

alias : 

54 alias SQL allow to temporarily give the columns and tables new names Column aliases SELECT column_name AS column_alias  temporary FROM table_name GROUP BY column_alias ORDER BY column_alias; Table aliases: called correlation name SELECT column_name AS column_alias FROM table_name AS table_alias … OR FROM table_name table_alias without AS

Cartesian Join (1) : 

55 Cartesian Join (1) Different names: Cartesian product, cross product, cross join, no join SELECT TableA.column1, TableB.column2 FROM TableA CROSS JOIN TableB OR FROM TableA , TableB COMMA JOIN use “ , ” instead of CROSS JOIN Return every row from table_A cross with every row from table_B The column which has more values, the column show up in groups.

Cartesian Join (2) : 

56 Cartesian Join (2) Usage Can help with fix the joins Used to test the speed of the RDBMS and its configuration Cartesian join is a type of inner join

Inner Join : 

57 Inner Join Inner Join combine records from two tables using comparison operator in a condition Columns only return the matched join rows Inner Join is a Cross Join with some result rows removed by a condition in the query Create Inner Join SELECT A.columns, ... , B.columns,… ,  columns From table_A AS A INNER JOIN Table_B AS B ON A.column = B.column;  relationship Also can use WHERE Matches the two columns in different tables

Inner Join in actions : 

58 Inner Join in actions Equijoin … INNER JOIN … ON A.id = B.id; Inner join test for equality Non-euqijoin … INNER JOIN … ON A.id <> B.id; Inner join test for inequality Natural join SELECT columns, … FROM table_A NATURAL JOIN table_B; Inner join identify matching column names Do not need ON conditions

Subquery (1) : 

59 Subquery (1) A query is wrapped within another query OUTER query INNER query  Subquery Take the result of one query and use it as the input to another query Can be used to Avoid duplicate data Make queries more dynamic

Subquery (2) : 

60 Subquery (2) Subquery is always a single SELECT statement Subqueries are always inside () parentheses Subqueries do not get their own ; semicolon One ; semicolon goes at the end of entire query Subqueries can be show up in four places SELECT clause SELECT column List FROM clause HAVING clause Subqueries can be used with INSERT DELETE UPDATE SELECT

Subquery (3) : 

61 Subquery (3) SELECT columns FROM table_A NATURAL JOIN table_B WHERE column_name IN (SELECT column FROM table_C);  Subquery All others are OUTER query

Subquery (4) : 

62 Subquery (4) SELECT columns FROM table_name WHERE condition (subquery) Usually, Subquery return single value,  one row from one column where column = (subquery) Subquery return more than one value when using IN where column IN (subquery) Subquery also can use WHERE condition Can use subquery instead the INNER JOIN Join combine all columns from two tables Subquery can only use the columns from one table

Subquery as SELECT column : 

63 Subquery as SELECT column Used as a column expression in SELECT statement Can only return one value from one column SELECT columns (SELECT column FROM table WHERE conditions) FROM table

Noncorrelated subquery : 

64 Noncorrelated subquery Correlated subquery is slow Noncorrelated subquery Subquery stands alone Doesn’t reference anything from the outer query Inner query in no way depends on values from the outer query It can run as a standalone query Noncorrelated subquery with IN, NOT IN Use IN, NOT IN to test if the values returned in subquery are members of a set(or not)

Correlated subquery : 

65 Correlated subquery Correlated subquery Inner query relies on the outer query before it can be resolved Use the same alias or correlated name from the outer query Common use Find all the rows in the outer query for which no rows exist in a related table EXISTS NOT EXISTS

EXISTS and NOT EXISTS : 

66 EXISTS and NOT EXISTS EXISTS: Find the results in table_A which at least shows in table_B once SELECT columns FROM table_A WHERE EXISTS (SELECT * FROM table_B WHERE condition usually condition involve outer query ); NOT EXISTS: Find the results in table_A which is not in table_B SELECT columns FROM table_A WHERE NOT EXISTS (SELECT * FROM table_B WHERE condition usually condition involve outer query );

Outer Join (1) : 

67 Outer Join (1) Deal with two tables which don’t have any matching counterpart Relationship between two tables One-to-many relationship LEFT OUTER JOIN: SELECT columns FROM Left_table LEFT OUTER JOIN Right_table ON relationship; Takes all the rows in the Left_table and matches them to rows in the Right_table.

Outer Join (2) : 

68 Outer Join (2) RIGHT OUTER JOIN: SELECT columns FROM Left_table RIGHT OUTER JOIN Right_table ON relationship; Takes all the rows in the Right_table and matches them to rows in the Left_table. Reverse the LEFT OUTER JOIN Reason to use these two: change the key word is easier than change the order of the tables Similar with INNER JOIN but not  OUTER JOIN gives all the rows whether there is a match with the other table or not Use NULL value to show no match exists In LEFT OUTER JOIN, NULL means the Right_table has no value that correspond to the Left_table Some RDBMS use FULL OUTER JOIN, but not in MySQL, SQL Server or Access

Self-join (1) : 

69 Self-join (1) Self-referencing foreign key means that it is a key is referencing another field in the same table The primary key of a table used in that same table for another purpose The primary key use to describe other attribute of the elements Join a single table to itself Used to simulate having two tables with exactly same information In a normalized database, would never have two copies of the same table

Self-join (2) : 

70 Self-join (2) Use different alias to separate the same table act as two tables SELECT alias1.column, …, alias.column, …, FROM table_name AS alias1 INNER JOIN Table_name AS alias2 ON alias1.primary_key = alias2.self_referencing_key;

Union : 

71 Union Combine the results of queries Combine the results from multiple tables SELECT column FROM table_A UNION OR UNION ALL Return every match, including the duplicate values By default, results removed duplicate values SELECT column FROM table_B ORDER BY column; Only can add ORDER BY at the end of the statement Rules: Number of columns in each SELECT statement must match Must have same expression and aggregate function in each SELECT statement Order of SELECT statement doesn’t matter The data types in the columns need to either same or convertible to each other

INTERSECT & EXCEPT : 

72 INTERSECT & EXCEPT UNION, INTERSECT, EXCEPT are used to find parts of queries that overlap INTERSECT: Returns only those values that are in the first query and also in the second query EXCEPT: Returns only those values that are in the first query but not in the second query MySQL do not have INTERSECT and EXCEPT

Subqueries vs. Joins (1) : 

73 Subqueries vs. Joins (1) Subquery  ORDER BY + LIMIT SELECT title FROM job_listings WHERE salary = (SELECT MAX(salary) from job_listings); How about: SELECT title FROM job_listings ORDER BY salary DESC LIMIT 1; Self-join  subquery SELECT f1.name, f2.name AS boss FROM friend f1 INNER JOIN friend f2 ON f1.id = f2.boss; How about: SELECT f1.name, (SELECT name FROM friend WHERE f1.boss = id) AS boss FROM friend f1;

Subqueries vs. Joins (2) : 

74 Subqueries vs. Joins (2) Inner Join  Subquery SELECT title FROM job_listings jl INNER JOIN job_current jc ON jl.title = jc.title; How about: SELECT title FROM job_listings WHERE title IN (SELECT title from job_current);

Database management : 

75 Database management Defensive database Avoid entering wrong data Stop concurrent operation on the same data at the same time CHECK constraints and views both help maintain control when you have multiple users Limit authority to allow operate on part of data

CHECK CONSTRAINT : 

76 CHECK CONSTRAINT Constraint Is a restriction on what you can insert into a column Example: NOT NULL, PRIMARY KEY, FOREIGN KEY, UNIQUE CHECK CREATE TABLE table_name ( Column_name type CHECK (column_name IN (‘F’, ‘M’)) Condition can be any ); OR ALTER TABLE table_name ADD CONSTRAINT CHECK column_name IN () ;  condition CHECK constraint restricts what values you can insert into a column Try to INSERT INTO wrong data will get a error and nothing be inserted Use the same conditions as a WHERE clause, such as AND, OR, IN, NOT, BETWEEN, but not subquery CHECK doesn’t enforce data integrity in MySQL Can create table with check, but MySQL won’t do anything and just ignores it.

View (1) : 

77 View (1) View Is basically a table that only exists when you use view in query Virtual table Can turn any query as a SELECT into a view View can do more than SELECT data from tables, also can UPDATE, INSERT, DELETE Benefits Keep change database structure from breaking the applications that depend on the tables Make easier by simplifying the complex query into a simple command Create view to hide information that isn’t needed by the use

View (2) : 

78 View (2) Create a view CREATE VIEW view_name AS Conditions All the queries you want to do ; Use the view SELECT * FROM view_name; Actually view do all the job of the queries you defined when it has been created Delete view DROP VIEW view_name; Different RDBMSs has different behaviors Best drop views before drop the table it is based on MySQL won’t let you drop views without its base table is existing, but you can drop table which has view Check structure DESC view_name;

View (3) : 

79 View (3) CHECK OPTION CREATE VIEW view_name AS WHERE Conditions WITH CHECK OPTION; Force all inserts and updates to satisfy the WHERE clause in the view MySQL use CHECK OPTION to imitate the CHECK CONSTRAINT If the update/insert data is not according the condition of view, it will show error

View (4) : 

80 View (4) Updatable view An updatable view includes all the NOT NULL columns from the table it references Allow this kind of view to do the INSERT, UPDATE, DELETE due to all the NOT NULL column can be touched via the view Non-updatable view doesn’t include all the NOT NULL columns Only can do is SELECT CANNOT update views that contains aggregate operators SUM, COUNT and AVG BETWEEN, HAVING, IN, and NOT IN

ACID : 

81 ACID A: ATOMICITY All the pieces of transaction must be completed or none of them be completed. C: CONSISTENCY Keep database in a consistent state at the end of transaction. I: ISOLATION Every transaction has a consistent view of the database regardless of other transaction take place at the same time. D: DURABILITY After transaction, the database needs to save the data correctly and protect it from power outages or other threats.

Transaction (1) : 

82 Transaction (1) Transaction is a set of SQL statements to accomplish a single unit of work During a transaction, if all the steps can’t be completed without interference, none of them should be completed. Avoid concurrent problem

Transaction (2) : 

83 Transaction (2) START TRANSACTION; START TRANSACTION keeps track of all the SQL COMMIT; Make the actions permanent ROLLBACK; Reverse everything to the way it was before you START TRANSACTION No change will occur to the database until you COMMIT RDBMS keep record of everything that has been done when you inside a transaction It cost storage space

Storage engines : 

84 Storage engines Make sure your storage engine is either BDB or InnoDB, BDB, InnoDB are two possible way that support transaction RDBMS can store data behind the scenes. Change storage engine ALTER TABLE table_name TYPE = InnoDB;

Root user account : 

85 Root user account ROOT user The first user  ROOT user  has complete control over everything in the database. Set password SET PASSWORD FOR ‘root’ @ ‘localhost’ = PASSWORD(‘password’); ORACLE use: ALTER user root IDENTIFIED BY new_password; Root user’s user name: root ‘localhost’ indicates that this is where the SQL software is installed and running ‘localhost’ is the default value, and it is optional Remote access You have to tell the query: IP address, or a hostname instead of localhost. root@A100.simpleworlf.com

Create new user : 

86 Create new user SQL doesn’t specify how to manage users Need check RDBMS’s documentation Most use statements: CREATE USER user_name IDENTIFIED BY ‘user_password’;

GRANT (1) : 

87 GRANT (1) Control exactly what users can do to tables and columns Typical GRANT SELECT Can change to INSERT, DELETE, UPDATE ON table_name TO user_name; Give multiple privilege GRANT SELECT, INSERT ON table_name TO user_name; Name multiple users GRANT DELETE ON table_name TO user1, user2;

GRANT (2) : 

88 GRANT (2) Assign ALL privileges GRANT ALL ON table_name TO user_name; Allow all permission with SELECT, INSERT, DELETE, UPDATE Allow current user gives this privilege to any other user GRANT SELECT ON table_name TO user_name WITH GRANT OPTION

GRANT (3) : 

89 GRANT (3) Specific column: only can used for SELECT GRANT SELECT (column_name, column_name 2) ON table_name TO user_name Wildcard: Give the user the privilege for every table in the database GRANT SELECT ON database_name.* TO user_name GRANT global privileges in MySQL GRANT SELECT ON *.* TO user_name;

REVOKE (1) : 

90 REVOKE (1) REVOKE privileges REVOKE SELECT ON table_name FROM user_name; If the unassigned privilege with get an error Revoke GRANT OPTION privilege: Without remove the privilege on current user, just remove the GRANT OPTION privilege REVOKE GRANT OPTION ON DELETE ON table_name FROM user_name; CAN NOT assign this privilege to others any more But, all the user got the privilege from this user, will lose their permission as well

REVOKE (2) : 

91 REVOKE (2) CASCADE: Remove the privilege from current user as well as anyone else that current user gave permission to. (usually is default) REVOKE DELETE ON table_name FROM user_name CASCADE; RESTRICT: both current user and the sub_user can retain the privilege, the root get an error, if the current user gave any other user this privilege before REVOKE DELETE ON table_name FROM user_name RESTRICT;

REVOKE (3) : 

92 REVOKE (3) If the user get the privilege from different time/people Different RDBMSs have different response Some will pay attention to where GRANT came from when CASCADE is used Some will ignore it Just check the documentation Both GRANT, REVOKE can use on VIEW, but be careful with the non-updatable view

Role (1) : 

93 Role (1) There is no ROLE in MySQL To give groups the privileges instead of assign them individually Create CREATE ROLE role_name; Define roles’ privileges GRANT SELECT ON table_name TO role_name; Assign user to the role GRANT role_name TO user_name;

Role (2) : 

94 Role (2) Delete role DROP ROLE role_name; Drop a role in use, it also cut related users off from the permissions Revoke role from user REVOKE role_name FROM user_name; A user can have more than one role at a time Need make sure do not have conflicting permissions Denied permission > Grant permission

Role (3) : 

95 Role (3) Allow the role’s users to grant this role to anyone else GRANT role_name TO user_name WITH ADMIN OPTION CASCADE REVOKE role_name FROM user_name CASCADE; RESTRICT REVOKE role_name FROM user_name RESTRICT;

Combine user creation and grant : 

96 Combine user creation and grant GRANT SELECT ON table_name TO user_name IDENTIFIED BY ‘password’;

Check status : 

97 Check status Check current user SELECT CURRENT_USER; root@localhost Check current… SELECT CURRENT_DATE; SELECT CURRENT_TIME;

Reserved words : 

98 Reserved words There are bunch of reserved words. When try to use single-world, you glance through the lists to make sure SQL has a list of non-reserved words may become reserved in future releases of SQL.

Special characters : 

99 Special characters * () ; , . _ % ! ‘’ “” \ + Comparison > < = !> !< <>, != >= <= & | ^ ~ To escape ‘, you need use \’ or extra ‘’

ALL : 

100 ALL Before SELECT columns FROM table_name WHERE column IN (SELECT column FROM table_name); ALL: Greater than ALL finds any values larger than the biggest value in the set SELECT columns FROM table_name WHERE column > ALL (SELECT column FROM table_name); Less than ALL finds any values smaller than the smallest value in the set WHERE column < ALL

ANY : 

101 ANY ANY Greater than ANY finds any values larger than the smallest value in the set SELECT columns FROM table_name WHERE column >ANY (SELECT column FROM table_name); Less than ANY finds any values smaller than the largest value in the set SELECT columns FROM table_name WHERE column < ANY (SELECT column FROM table_name);

SOME : 

102 SOME Means the things as ANY in standard SQL syntax, and in MySQL . Check the RDBMS to confirm that it works which way

Temporary table : 

103 Temporary table Temporary table exists from the time you create it until you drop it, or until the user session ends Session means from signed in to sign out RDBMS syntax varies greatly with this, please check first CREATE TEMPORARY TABLE table_name ( columns); OR CREATE TEMPORARY TABLE table_name AS SELECT * FROM permanent_table;

Numeric functions : 

104 Numeric functions ABS(x) ACOS(x) ASIN(x) ATAN(x,y) CELL(x) COS(x) COT(x) EXP(x) FLOOR(x) FORMAT(x,y) LN(x) LOG(x), LOG(x,y) MOD(x,y) PI() POWER(x,y) RADIANS(x) RAND(x) ROUND(x), ROUND(x,y) SIGN(x) SIN(x) SQRT(x) TAN(x) TRUNCATE(x,y)

Indexing : 

105 Indexing Index help RDBMS speed up If you search the column frequently Add index ALTER TABLE table_name ADD INDEX (column_name); To be continue…

Get a GUI for RDBMS : 

106 Get a GUI for RDBMS MySQL GUI tools http://dev.mysql.com/downloads/gui-tools/5.0.html CocoaMySQL http://cocoamysql.sourceforge.net/ Web solution: phphMySQL http://www.phpmysql.net/ Navicat offer 30 days free trail http://www.navicat.com/ SQLyog offers a free community edition http://www.webyog.com/en/ To be continue…

PHP/MySQL : 

107 PHP/MySQL PHP help you get data via web PHP code take all date from database and store it in an array To be continue…

authorStream Live Help