122 lines
		
	
	
		
			6.5 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			122 lines
		
	
	
		
			6.5 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| ---
 | |
| title: SQL Update Query
 | |
| ---
 | |
| ## SQL Update Query
 | |
| 
 | |
| ### What an Update query can do
 | |
| An update query gives the DBA or SQL-using programmer the ability to update many records with one command. 
 | |
| 
 | |
| Important Safety Tip! Always have a backup copy of what you are about to change BEFORE you change it!
 | |
| 
 | |
| This guide will:  
 | |
| * add a new field to the student table
 | |
| * test the logic to update that field with a school assigned email address
 | |
| * update the new field.
 | |
| 
 | |
| Here is the student table as we start this process
 | |
| ```sql
 | |
| SELECT * FROM student;
 | |
| ```
 | |
| 
 | |
| ```text
 | |
| +-----------+------------------------+-----------+------------------+---------------------+---------------------+
 | |
| | studentID | FullName               | sat_score | programOfStudy   | rcd_Created         | rcd_Updated         |
 | |
| +-----------+------------------------+-----------+------------------+---------------------+---------------------+
 | |
| |         1 | Monique Davis          |       400 | Literature       | 2017-08-16 15:34:50 | 2017-08-16 15:34:50 |
 | |
| |         2 | Teri Gutierrez         |       800 | Programming      | 2017-08-16 15:34:50 | 2017-08-16 15:34:50 |
 | |
| |         3 | Spencer Pautier        |      1000 | Programming      | 2017-08-16 15:34:50 | 2017-08-16 15:34:50 |
 | |
| |         4 | Louis Ramsey           |      1200 | Programming      | 2017-08-16 15:34:50 | 2017-08-16 15:34:50 |
 | |
| |         5 | Alvin Greene           |      1200 | Programming      | 2017-08-16 15:34:50 | 2017-08-16 15:34:50 |
 | |
| |         6 | Sophie Freeman         |      1200 | Programming      | 2017-08-16 15:34:50 | 2017-08-16 15:34:50 |
 | |
| |         7 | Edgar Frank "Ted" Codd |      2400 | Computer Science | 2017-08-16 15:35:33 | 2017-08-16 15:35:33 |
 | |
| |         8 | Donald D. Chamberlin   |      2400 | Computer Science | 2017-08-16 15:35:33 | 2017-08-16 15:35:33 |
 | |
| |         9 | Raymond F. Boyce       |      2400 | Computer Science | 2017-08-16 15:35:33 | 2017-08-16 15:35:33 |
 | |
| +-----------+------------------------+-----------+------------------+---------------------+---------------------+
 | |
| 9 rows in set (0.00 sec)
 | |
| ```
 | |
| 
 | |
| ### Alter the table and add a new field
 | |
| 
 | |
| ```sql
 | |
|     ALTER TABLE `fcc_sql_guides_database`.`student` 
 | |
| 	ADD COLUMN `schoolEmailAdr` VARCHAR(125) NULL AFTER `programOfStudy`;
 | |
| ```
 | |
| 
 | |
| The student table after the alter is executed.
 | |
| ```text
 | |
| mysql> SELECT FullName, sat_score, programOfStudy, schoolEmailAdr FROM student;
 | |
| +------------------------+-----------+------------------+----------------+
 | |
| | FullName               | sat_score | programOfStudy   | schoolEmailAdr |
 | |
| +------------------------+-----------+------------------+----------------+
 | |
| | Monique Davis          |       400 | Literature       | NULL           |
 | |
| | Teri Gutierrez         |       800 | Programming      | NULL           |
 | |
| | Spencer Pautier        |      1000 | Programming      | NULL           |
 | |
| | Louis Ramsey           |      1200 | Programming      | NULL           |
 | |
| | Alvin Greene           |      1200 | Programming      | NULL           |
 | |
| | Sophie Freeman         |      1200 | Programming      | NULL           |
 | |
| | Edgar Frank "Ted" Codd |      2400 | Computer Science | NULL           |
 | |
| | Donald D. Chamberlin   |      2400 | Computer Science | NULL           |
 | |
| | Raymond F. Boyce       |      2400 | Computer Science | NULL           |
 | |
| +------------------------+-----------+------------------+----------------+
 | |
| 9 rows in set (0.00 sec)
 | |
| ```
 | |
| 
 | |
| ### TESTING the logic (VERY important step!)
 | |
| 
 | |
| ```sql
 | |
| SELECT FullName, instr(FullName," ") AS firstSpacePosition, 
 | |
| concat(substring(FullName,1,instr(FullName," ")-1),"@someSchool.edu") AS schoolEmail
 | |
| FROM student;
 | |
| ```
 | |
| 
 | |
| ```text
 | |
| +------------------------+--------------------+------------------------+
 | |
| | FullName               | firstSpacePosition | schoolEmail            |
 | |
| +------------------------+--------------------+------------------------+
 | |
| | Monique Davis          |                  8 | Monique@someSchool.edu |
 | |
| | Teri Gutierrez         |                  5 | Teri@someSchool.edu    |
 | |
| | Spencer Pautier        |                  8 | Spencer@someSchool.edu |
 | |
| | Louis Ramsey           |                  6 | Louis@someSchool.edu   |
 | |
| | Alvin Greene           |                  6 | Alvin@someSchool.edu   |
 | |
| | Sophie Freeman         |                  7 | Sophie@someSchool.edu  |
 | |
| | Edgar Frank "Ted" Codd |                  6 | Edgar@someSchool.edu   |
 | |
| | Donald D. Chamberlin   |                  7 | Donald@someSchool.edu  |
 | |
| | Raymond F. Boyce       |                  8 | Raymond@someSchool.edu |
 | |
| +------------------------+--------------------+------------------------+
 | |
| 9 rows in set (0.00 sec)
 | |
| ```
 | |
| *A note about concat(): in MySQL this command is used to combined strings, not so in other SQL versions (check your manual).  In this usage it works like this: The substring of the FullName field up to but not including the first space is combined with "@someSchool.edu".  In the real world this would HAVE TO be much more complex and you would need to ensure that the email address is unique.*
 | |
| 
 | |
| ### Doing the update
 | |
| We'll pretend that this is what we want and update the table with this information:
 | |
| 
 | |
| ```sql
 | |
| UPDATE student SET schoolEmailAdr = concat(substring(FullName,1,instr(FullName," ")-1),"@someSchool.edu")
 | |
| WHERE schoolEmailAdr is NULL;
 | |
| ```
 | |
| 
 | |
| Success!
 | |
| ```text
 | |
| mysql> SELECT FullName, sat_score, programOfStudy, schoolEmailAdr FROM student;
 | |
| +------------------------+-----------+------------------+------------------------+
 | |
| | FullName               | sat_score | programOfStudy   | schoolEmailAdr         |
 | |
| +------------------------+-----------+------------------+------------------------+
 | |
| | Monique Davis          |       400 | Literature       | Monique@someSchool.edu |
 | |
| | Teri Gutierrez         |       800 | Programming      | Teri@someSchool.edu    |
 | |
| | Spencer Pautier        |      1000 | Programming      | Spencer@someSchool.edu |
 | |
| | Louis Ramsey           |      1200 | Programming      | Louis@someSchool.edu   |
 | |
| | Alvin Greene           |      1200 | Programming      | Alvin@someSchool.edu   |
 | |
| | Sophie Freeman         |      1200 | Programming      | Sophie@someSchool.edu  |
 | |
| | Edgar Frank "Ted" Codd |      2400 | Computer Science | Edgar@someSchool.edu   |
 | |
| | Donald D. Chamberlin   |      2400 | Computer Science | Donald@someSchool.edu  |
 | |
| | Raymond F. Boyce       |      2400 | Computer Science | Raymond@someSchool.edu |
 | |
| +------------------------+-----------+------------------+------------------------+
 | |
| 9 rows in set (0.00 sec)
 | |
| ```
 | |
| 
 | |
| As with all of these SQL things there is MUCH MORE to them than what's in this introductory guide.  
 | |
| 
 | |
| I hope this at least gives you enough to get started.  
 | |
| 
 | |
| Please see the manual for your database manager and have fun trying different options yourself.
 |