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.
 |