第11章_数据处理之增删改

  • 1. 插入数据
    • 1.1 实际问题
    • 1.2 方式1:VALUES的方式添加
    • 1.3 方式2:将查询结果插入到表中
    • 演示代码
  • 2. 更新数据
    • 演示代码
  • 3. 删除数据
    • 演示代码
  • 4. MySQL8新特性:计算列
    • 演示代码
  • 5. 综合案例
    • 演示代码
  • 课后练习

说明:本内容整理自尚硅谷B站MySQL视频 >>尚硅谷B站MySQL视频

1. 插入数据

1.1 实际问题


解决方式:使用 INSERT 语句向表中插入数据。

1.2 方式1:VALUES的方式添加

使用这种语法一次只能向表中插入一条数据。
情况1:为表的所有字段按默认顺序插入数据

INSERT INTO 表名
VALUES (value1,value2,....);

值列表中需要为表的每一个字段指定值,并且值的顺序必须和数据表中字段定义时的顺序相同。

举例:

INSERT INTO departments
VALUES (70, 'Pub', 100, 1700);INSERT INTO departments
VALUES  (100, 'Finance', NULL, NULL);

情况2:为表的指定字段插入数据

INSERT INTO 表名(column1 [, column2, …, columnn])
VALUES (value1 [,value2, …, valuen]);

为表的指定字段插入数据,就是在INSERT语句中只向部分字段中插入值,而其他字段的值为表定义时的默认值。

在 INSERT 子句中随意列出列名,但是一旦列出,VALUES中要插入的value1,…valuen需要与column1,…columnn列一一对应。如果类型不同,将无法插入,并且MySQL会产生错误。

举例:

INSERT INTO departments(department_id, department_name)
VALUES (80, 'IT');

情况3:同时插入多条记录
INSERT语句可以同时向数据表中插入多条记录,插入时指定多个值列表,每个值列表之间用逗号分隔开,基本语法格式如下:

INSERT INTO table_name
VALUES
(value1 [,value2, …, valuen]),
(value1 [,value2, …, valuen]),
……
(value1 [,value2, …, valuen]);
或者
INSERT INTO table_name(column1 [, column2, …, columnn])
VALUES
(value1 [,value2, …, valuen]),
(value1 [,value2, …, valuen]),
……
(value1 [,value2, …, valuen]);

举例:

INSERT INTO emp(emp_id,emp_name)
VALUES (1001,'shkstart'),
(1002,'atguigu'),
(1003,'Tom');
#Query OK, 3 rows affected (0.00 sec)
#Records: 3 Duplicates: 0 Warnings: 0

使用INSERT同时插入多条记录时,MySQL会返回一些在执行单行插入时没有的额外信息,这些信息的含义如下:

  • Records:表明插入的记录条数
  • Duplicates:表明插入时被忽略的记录,原因可能是这些记录包含了重复的主键值。
  • Warnings:表明有问题的数据值,例如发生数据类型转换。

一个同时插入多行记录的INSERT语句等同于多个单行插入的INSERT语句,但是多行的INSERT语句在处理过程中 效率更高 。因为MySQL执行单条INSERT语句插入多行数据比使用多条INSERT语句快,所以在插入多条记录时最好选择使用单条INSERT语句的方式插入。

小结:

  • VALUES 也可以写成 VALUE ,但是VALUES是标准写法。
  • 字符和日期型数据应包含在单引号中

1.3 方式2:将查询结果插入到表中

INSERT还可以将SELECT语句查询的结果插入到表中,此时不需要把每一条记录的值一个一个输入,只需要使用一条INSERT语句和一条SELECT语句组成的组合语句即可快速地从一个或多个表中向一个表中插入多行。

基本语法格式如下:

INSERT INTO 目标表名
(tar_column1 [, tar_column2, …, tar_columnn])
SELECT
(src_column1 [, src_column2, …, src_columnn])
FROM 源表名
[WHERE condition]
  • 在 INSERT 语句中加入子查询。
  • 不必书写 VALUES 子句。
  • 子查询中的值列表应与 INSERT 子句中的列名对应。

举例:

INSERT INTO emp2
SELECT *
FROM employees
WHERE department_id = 90;INSERT    INTO sales_reps(id, name, salary, commission_pct)
SELECT  employee_id, last_name, salary, commission_pct
FROM    employees
WHERE   job_id LIKE '%REP%';

演示代码

#0. 储备工作
USE atguigudb;CREATE TABLE IF NOT EXISTS emp1(
id INT,
`name` VARCHAR(15),
hire_date DATE,
salary DOUBLE(10,2)
);DESC emp1;
/*
+-----------+--------------+------+-----+---------+-------+
| Field     | Type         | Null | Key | Default | Extra |
+-----------+--------------+------+-----+---------+-------+
| id        | int          | YES  |     | NULL    |       |
| name      | varchar(15)  | YES  |     | NULL    |       |
| hire_date | date         | YES  |     | NULL    |       |
| salary    | double(10,2) | YES  |     | NULL    |       |
+-----------+--------------+------+-----+---------+-------+
*/SELECT *
FROM emp1;#Empty set (0.12 sec)#1. 添加数据
#方式1:一条一条的添加数据# ① 没有指明添加的字段
#正确的
INSERT INTO emp1
VALUES (1,'Tom','2000-12-21',3400); #注意:一定要按照声明的字段的先后顺序添加
#错误的
INSERT INTO emp1
VALUES (2,3400,'2000-12-21','Jerry');SELECT *
FROM emp1;
/*
+------+------+------------+---------+
| id   | name | hire_date  | salary  |
+------+------+------------+---------+
|    1 | Tom  | 2000-12-21 | 3400.00 |
+------+------+------------+---------+
*/# ② 指明要添加的字段 (推荐)
INSERT INTO emp1(id,hire_date,salary,`name`)
VALUES(2,'1999-09-09',4000,'Jerry');
# 说明:没有进行赋值的hire_date 的值为 null
INSERT INTO emp1(id,salary,`name`)
VALUES(3,4500,'shk');SELECT *
FROM emp1;
/*
+------+-------+------------+---------+
| id   | name  | hire_date  | salary  |
+------+-------+------------+---------+
|    1 | Tom   | 2000-12-21 | 3400.00 |
|    2 | Jerry | 1999-09-09 | 4000.00 |
|    3 | shk   | NULL       | 4500.00 |
+------+-------+------------+---------+
*/# ③ 同时插入多条记录 (推荐)
INSERT INTO emp1(id,NAME,salary)
VALUES
(4,'Jim',5000),
(5,'张俊杰',5500);#方式2:将查询结果插入到表中
SELECT * FROM emp1;
/*输出
+------+-----------+------------+---------+
| id   | name      | hire_date  | salary  |
+------+-----------+------------+---------+
|    1 | Tom       | 2000-12-21 | 3400.00 |
|    2 | Jerry     | 1999-09-09 | 4000.00 |
|    3 | shk       | NULL       | 4500.00 |
|    4 | Jim       | NULL       | 5000.00 |
|    5 | 张俊杰    | NULL       | 5500.00 |
+------+-----------+------------+---------+
*/INSERT INTO emp1(id,NAME,salary,hire_date)
#查询语句
SELECT employee_id,last_name,salary,hire_date  # 查询的字段一定要与添加到的表的字段一一对应
FROM employees
WHERE department_id IN (70,60);DESC emp1;
DESC employees;SELECT *
FROM emp1;
/*
+------+-----------+------------+----------+
| id   | name      | hire_date  | salary   |
+------+-----------+------------+----------+
|    1 | Tom       | 2000-12-21 |  3400.00 |
|    2 | Jerry     | 1999-09-09 |  4000.00 |
*/
#说明:emp1表中要添加数据的字段的长度不能低于employees表中查询的字段的长度。
# 如果emp1表中要添加数据的字段的长度低于employees表中查询的字段的长度的话,就有添加不成功的风险。

2. 更新数据


使用 UPDATE 语句更新数据。语法如下:

UPDATE table_name
SET column1=value1, column2=value2, … , column=valuen [WHERE condition]
  • 可以一次更新多条数据。
  • 如果需要回滚数据,需要保证在DML前,进行设置:SET AUTOCOMMIT = FALSE;

使用 WHERE 子句指定需要更新的数据。

UPDATE employees
SET department_id = 70
WHERE   employee_id = 113;

如果省略 WHERE 子句,则表中的所有数据都将被更新

UPDATE   copy_emp
SET department_id = 110;

更新中的数据完整性错误

UPDATE employees
SET department_id = 55
WHERE   department_id = 110;
#说明:不存在 55 号部门

说明:不存在 55 号部门

演示代码

#2. 更新数据 (或修改数据)
# UPDATE .... SET .... WHERE ...
# 可以实现批量修改数据的。UPDATE emp1
SET hire_date = CURDATE()
WHERE id = 5;SELECT * FROM emp1;
/*部分输出
+------+-----------+------------+----------+
| id   | name      | hire_date  | salary   |
+------+-----------+------------+----------+
|    1 | Tom       | 2000-12-21 |  3400.00 |
|    2 | Jerry     | 1999-09-09 |  4000.00 |
|    3 | shk       | NULL       |  4500.00 |
|    4 | Jim       | NULL       |  5000.00 |
|    5 | 张俊杰    | 2022-02-14 |  5500.00 |
*/#同时修改一条数据的多个字段
UPDATE emp1
SET hire_date = CURDATE(),salary = 6000
WHERE id = 2;
/*输出
+------+-----------+------------+----------+
| id   | name      | hire_date  | salary   |
+------+-----------+------------+----------+
|    1 | Tom       | 2000-12-21 |  3400.00 |
|    2 | Jerry     | 2022-02-14 |  6000.00 |
*/#题目:将表中姓名中包含字符a的提薪20%
UPDATE emp1
SET salary = salary * 1.2
WHERE NAME LIKE '%r%';
/*
+------+-----------+------------+----------+
| id   | name      | hire_date  | salary   |
+------+-----------+------------+----------+
|    1 | Tom       | 2000-12-21 |  3400.00 |
|    2 | Jerry     | 2022-02-14 |  7200.00 |
*/#修改数据时,是可能存在不成功的情况的。(可能是由于约束的影响造成的)
UPDATE employees
SET department_id = 10000
WHERE employee_id = 102;

3. 删除数据

  • 使用 DELETE 语句从表中删除数据
DELETE FROM table_name [WHERE <condition>];

table_name指定要执行删除操作的表;“[WHERE ]”为可选参数,指定删除条件,如果没有WHERE子句,DELETE语句将删除表中的所有记录。

  • 使用 WHERE 子句删除指定的记录。
DELETE FROM departments
WHERE   department_name = 'Finance';
  • 如果省略 WHERE 子句,则表中的全部数据将被删除
DELETE FROM  copy_emp;
  • 删除中的数据完整性错误
DELETE FROM departments
WHERE   department_id = 60;

说明:You cannot delete a row that contains a primary key that is used as a foreign key in another table.

演示代码


#3. 删除数据 DELETE FROM .... WHERE....
DELETE FROM emp1
WHERE id = 1;
/*SELECT * FROM emp1;输出
+------+-----------+------------+----------+
| id   | name      | hire_date  | salary   |
+------+-----------+------------+----------+
|    2 | Jerry     | 2022-02-14 |  7200.00 |
|    3 | shk       | NULL       |  4500.00 |
|    4 | Jim       | NULL       |  5000.00 |
*/
#在删除数据时,也有可能因为约束的影响,导致删除失败
DELETE FROM departments
WHERE department_id = 50;
#小结:DML操作默认情况下,执行完以后都会自动提交数据。
# 如果希望执行完以后不自动提交数据,则需要使用 SET autocommit = FALSE.

4. MySQL8新特性:计算列

什么叫计算列呢?简单来说就是某一列的值是通过别的列计算得来的。例如,a列值为1、b列值为2,c列不需要手动插入,定义a+b的结果为c的值,那么c就是计算列,是通过别的列计算得来的。

在MySQL 8.0中,CREATE TABLE 和 ALTER TABLE 中都支持增加计算列。下面以CREATE TABLE为例进行讲解。

举例:定义数据表tb1,然后定义字段id、字段a、字段b和字段c,其中字段c为计算列,用于计算a+b的值。 首先创建测试表tb1,语句如下:

CREATE TABLE tb1(
id INT,
a   INT, b INT,
c INT GENERATED ALWAYS AS (a + b) VIRTUAL );

插入演示数据,语句如下:

INSERT INTO tb1(a,b) VALUES (100,200);

查询数据表tb1中的数据,结果如下:

SELECT * FROM    tb1;
/*
+  ------  +------    +------    +------    +
| id    |   a       | b   |   c    |
+  ------  +------    +------    +------    +
| NULL |        100 |  200  |   300 |
+  ------  +------    +------    +------    +
1   row in  set (0.00 sec)
*/

更新数据中的数据,语句如下:

UPDATE tb1 SET a = 500;

演示代码

#4. MySQL8的新特性:计算列
USE atguigudb;CREATE TABLE test1(
a INT,
b INT,
c INT GENERATED ALWAYS AS (a + b) VIRTUAL #字段c即为计算列
);INSERT INTO test1(a,b)
VALUES(10,20);SELECT * FROM test1;
/*输出
+------+------+------+
| a    | b    | c    |
+------+------+------+
|   10 |   20 |   30 |
+------+------+------+
*/
UPDATE test1
SET a = 100;
/*SELECT * FROM test1;
+------+------+------+
| a    | b    | c    |
+------+------+------+
|  100 |   20 |  120 |
+------+------+------+
*/

5. 综合案例

#    1、创建数据库test01_library
#   2、创建表 books,表结构如下:

演示代码

#5.综合案例
# 1、创建数据库test01_library
CREATE DATABASE IF NOT EXISTS test01_library CHARACTER SET 'utf8';USE test01_library;# 2、创建表 books,表结构如下:
CREATE TABLE IF NOT EXISTS books(
id INT,
`name` VARCHAR(50),
`authors` VARCHAR(100),
price FLOAT,
pubdate YEAR,
note VARCHAR(100),
num INT
);DESC books;
/*
+---------+--------------+------+-----+---------+-------+
| Field   | Type         | Null | Key | Default | Extra |
+---------+--------------+------+-----+---------+-------+
| id      | int          | YES  |     | NULL    |       |
| name    | varchar(50)  | YES  |     | NULL    |       |
| authors | varchar(100) | YES  |     | NULL    |       |
| price   | float        | YES  |     | NULL    |       |
| pubdate | year         | YES  |     | NULL    |       |
| note    | varchar(100) | YES  |     | NULL    |       |
| num     | int          | YES  |     | NULL    |       |
+---------+--------------+------+-----+---------+-------+
*/
SELECT * FROM books;# 3、向books表中插入记录
# 1)不指定字段名称,插入第一条记录
INSERT INTO books
VALUES(1,'Tal of AAA','Dickes',23,'1995','novel',11);
# 2)指定所有字段名称,插入第二记录
INSERT INTO books(id,NAME,AUTHORS,price,pubdate,note,num)
VALUES(2,'EmmaT','Jane lura',35,'1993','joke',22);
# 3)同时插入多条记录(剩下的所有记录)
INSERT INTO books(id,NAME,AUTHORS,price,pubdate,note,num)
VALUES
(3,'Story of Jane','Jane Tim',40,2001,'novel',0),
(4,'Lovey Day','George Byron',20,2005,'novel',30),
(5,'Old land','Honore Blade',30,2010,'Law',0),
(6,'The Battle','Upton Sara',30,1999,'medicine',40),
(7,'Rose Hood','Richard haggard',28,2008,'cartoon',28);/*SELECT * FROM books
+------+---------------+-----------------+-------+---------+----------+------+
| id   | name          | authors         | price | pubdate | note     | num  |
+------+---------------+-----------------+-------+---------+----------+------+
|    1 | Tal of AAA    | Dickes          |    23 |    1995 | novel    |   11 |
|    2 | EmmaT         | Jane lura       |    35 |    1993 | joke     |   22 |
|    3 | Story of Jane | Jane Tim        |    40 |    2001 | novel    |    0 |
|    4 | Lovey Day     | George Byron    |    20 |    2005 | novel    |   30 |
|    5 | Old land      | Honore Blade    |    30 |    2010 | Law      |    0 |
|    6 | The Battle    | Upton Sara      |    30 |    1999 | medicine |   40 |
|    7 | Rose Hood     | Richard haggard |    28 |    2008 | cartoon  |   28 |
+------+---------------+-----------------+-------+---------+----------+------+
*/
# 4、将小说类型(novel)的书的价格都增加5。
UPDATE books
SET price = price + 5
WHERE note = 'novel';
/*
+------+---------------+-----------------+-------+---------+----------+------+
| id   | name          | authors         | price | pubdate | note     | num  |
+------+---------------+-----------------+-------+---------+----------+------+
|    1 | Tal of AAA    | Dickes          |    28 |    1995 | novel    |   11 |
|    2 | EmmaT         | Jane lura       |    35 |    1993 | joke     |   22 |
|    3 | Story of Jane | Jane Tim        |    45 |    2001 | novel    |    0 |
|    4 | Lovey Day     | George Byron    |    25 |    2005 | novel    |   30 |
|    5 | Old land      | Honore Blade    |    30 |    2010 | Law      |    0 |
|    6 | The Battle    | Upton Sara      |    30 |    1999 | medicine |   40 |
|    7 | Rose Hood     | Richard haggard |    28 |    2008 | cartoon  |   28 |
+------+---------------+-----------------+-------+---------+----------+------+
*/# 5、将名称为EmmaT的书的价格改为40,并将说明改为drama。
UPDATE books
SET price = 40,note = 'drama'
WHERE NAME = 'EmmaT';# 6、删除库存为0的记录。
DELETE FROM books
WHERE num = 0;# 7、统计书名中包含a字母的书
SELECT NAME
FROM books
WHERE NAME LIKE '%a%';
/*
+------------+
| NAME       |
+------------+
| Tal of AAA |
| EmmaT      |
| Lovey Day  |
| The Battle |
+------------+
*/# 8、统计书名中包含a字母的书的数量和库存总量
SELECT COUNT(*),SUM(num)
FROM books
WHERE NAME LIKE '%a%';# 9、找出“novel”类型的书,按照价格降序排列SELECT NAME,note,price
FROM books
WHERE note = 'novel'
ORDER BY price DESC;# 10、查询图书信息,按照库存量降序排列,如果库存量相同的按照note升序排列
SELECT *
FROM books
ORDER BY num DESC,note ASC;# 11、按照note分类统计书的数量
SELECT note,COUNT(*)
FROM books
GROUP BY note;# 12、按照note分类统计书的库存量,显示库存量超过30本的
SELECT note,SUM(num)
FROM books
GROUP BY note
HAVING SUM(num) > 30;# 13、查询所有图书,每页显示5本,显示第二页
SELECT *
FROM books
LIMIT 5,5;# 14、按照note分类统计书的库存量,显示库存量最多的
SELECT note,SUM(num) sum_num
FROM books
GROUP BY note
ORDER BY sum_num DESC
LIMIT 0,1;# 15、查询书名达到10个字符的书,不包括里面的空格
SELECT CHAR_LENGTH(REPLACE(NAME,' ',''))
FROM books;SELECT NAME
FROM books
WHERE CHAR_LENGTH(REPLACE(NAME,' ','')) >= 10;# 16、查询书名和类型,其中note值为novel显示小说,law显示法律,medicine显示医药,
#cartoon显示卡通,joke显示笑话
SELECT NAME "书名",note,CASE note WHEN 'novel' THEN '小说'WHEN 'law' THEN '法律'WHEN 'medicine' THEN '医药'WHEN 'cartoon' THEN '卡通'WHEN 'joke' THEN '笑话'ELSE '其他'END "类型"
FROM books;
/*
+------------+----------+--------+
| 书名       | note     | 类型   |
+------------+----------+--------+
| Tal of AAA | novel    | 小说   |
| EmmaT      | drama    | 其他   |
| Lovey Day  | novel    | 小说   |
| The Battle | medicine | 医药   |
| Rose Hood  | cartoon  | 卡通   |
+------------+----------+--------+
*/# 17、查询书名、库存,其中num值超过30本的,显示滞销,大于0并低于10的,
#显示畅销,为0的显示需要无货
SELECT NAME AS "书名",num AS "库存", CASE WHEN num > 30 THEN '滞销'WHEN num > 0 AND num < 10 THEN '畅销'WHEN num = 0 THEN '无货'ELSE '正常'END "显示状态"
FROM books;
/*
+------------+--------+--------------+
| 书名       | 库存   | 显示状态     |
+------------+--------+--------------+
| Tal of AAA |     11 | 正常         |
| EmmaT      |     22 | 正常         |
| Lovey Day  |     30 | 正常         |
| The Battle |     40 | 滞销         |
| Rose Hood  |     28 | 正常         |
+------------+--------+--------------+*/# 18、统计每一种note的库存量,并合计总量
SELECT IFNULL(note,'合计库存总量') AS note,SUM(num)
FROM books
GROUP BY note WITH ROLLUP;
/*
+--------------------+----------+
| note               | SUM(num) |
+--------------------+----------+
| cartoon            |       28 |
| drama              |       22 |
| medicine           |       40 |
| novel              |       41 |
| 合计库存总量       |      131 |
+--------------------+----------+
*/# 19、统计每一种note的数量,并合计总量
SELECT IFNULL(note,'合计总量') AS note,COUNT(*)
FROM books
GROUP BY note WITH ROLLUP;
/*
+--------------+----------+
| note         | COUNT(*) |
+--------------+----------+
| cartoon      |        1 |
| drama        |        1 |
| medicine     |        1 |
| novel        |        2 |
| 合计总量     |        5 |
+--------------+----------+
*/# 20、统计库存量前三名的图书
SELECT *
FROM books
ORDER BY num DESC
LIMIT 0,3;# 21、找出最早出版的一本书
SELECT *
FROM books
ORDER BY pubdate ASC
LIMIT 0,1;# 22、找出novel中价格最高的一本书
SELECT *
FROM books
WHERE note = 'novel'
ORDER BY price DESC
LIMIT 0,1;# 23、找出书名中字数最多的一本书,不含空格
SELECT *
FROM books
ORDER BY CHAR_LENGTH(REPLACE(NAME,' ','')) DESC
LIMIT 0,1;

课后练习

#第11章_数据处理之增删改的课后练习
#练习1:
#1. 创建数据库dbtest11
CREATE DATABASE IF NOT EXISTS dbtest11 CHARACTER SET 'utf8';#2. 运行以下脚本创建表my_employees
USE dbtest11;CREATE TABLE my_employees(id INT(10),first_name VARCHAR(10),last_name VARCHAR(10),userid VARCHAR(10),salary DOUBLE(10,2)
);CREATE TABLE users(id INT,userid VARCHAR(10),department_id INT
);
#3.显示表my_employees的结构DESC my_employees;
/*
+------------+--------------+------+-----+---------+-------+
| Field      | Type         | Null | Key | Default | Extra |
+------------+--------------+------+-----+---------+-------+
| id         | int          | YES  |     | NULL    |       |
| first_name | varchar(10)  | YES  |     | NULL    |       |
| last_name  | varchar(10)  | YES  |     | NULL    |       |
| userid     | varchar(10)  | YES  |     | NULL    |       |
| salary     | double(10,2) | YES  |     | NULL    |       |
+------------+--------------+------+-----+---------+-------+
*/
DESC users;
/*
+---------------+-------------+------+-----+---------+-------+
| Field         | Type        | Null | Key | Default | Extra |
+---------------+-------------+------+-----+---------+-------+
| id            | int         | YES  |     | NULL    |       |
| userid        | varchar(10) | YES  |     | NULL    |       |
| department_id | int         | YES  |     | NULL    |       |
+---------------+-------------+------+-----+---------+-------+
*/#4.向my_employees表中插入下列数据
ID  FIRST_NAME  LAST_NAME   USERID      SALARY
1   patel       Ralph       Rpatel      895
2   Dancs       Betty       Bdancs      860
3   Biri        Ben     Bbiri       1100
4   Newman      Chad        Cnewman     750
5   Ropeburn    Audrey      Aropebur    1550INSERT INTO my_employees
VALUES(1,'patel','Ralph','Rpatel',895);INSERT INTO my_employees VALUES
(2,'Dancs','Betty','Bdancs',860),
(3,'Biri','Ben','Bbiri',1100),
(4,'Newman','Chad','Cnewman',750),
(5,'Ropeburn','Audrey','Aropebur',1550);SELECT * FROM my_employees;
/*
+------+------------+-----------+----------+---------+
| id   | first_name | last_name | userid   | salary  |
+------+------------+-----------+----------+---------+
|    1 | patel      | Ralph     | Rpatel   |  895.00 |
|    2 | Dancs      | Betty     | Bdancs   |  860.00 |
|    3 | Biri       | Ben       | Bbiri    | 1100.00 |
|    4 | Newman     | Chad      | Cnewman  |  750.00 |
|    5 | Ropeburn   | Audrey    | Aropebur | 1550.00 |
+------+------------+-----------+----------+---------+
*/DELETE FROM my_employees;#方式2:
INSERT INTO my_employees
SELECT 1,'patel','Ralph','Rpatel',895 UNION ALL
SELECT 2,'Dancs','Betty','Bdancs',860 UNION ALL
SELECT 3,'Biri','Ben','Bbiri',1100 UNION ALL
SELECT 4,'Newman','Chad','Cnewman',750 UNION ALL
SELECT 5,'Ropeburn','Audrey','Aropebur',1550;#5.向users表中插入数据
1   Rpatel      10
2   Bdancs      10
3   Bbiri       20
4   Cnewman     30
5   Aropebur    40
INSERT INTO users VALUES
(1,'Rpatel',10),
(2,'Bdancs',10),
(3,'Bbiri',20),
(4,'Cnewman',30),
(5,'Aropebur',40)SELECT * FROM users;#6. 将3号员工的last_name修改为“drelxer”
UPDATE my_employees
SET last_name = 'drelxer'
WHERE id = 3;#7. 将所有工资少于900的员工的工资修改为1000
UPDATE my_employees
SET salary = 1000
WHERE salary < 900;#8. 将userid为Bbiri的users表和my_employees表的记录全部删除#方式1:
DELETE FROM my_employees
WHERE userid = 'Bbiri';DELETE FROM users
WHERE userid = 'Bbiri';#方式2:DELETE m,u
FROM my_employees m
JOIN users u
ON m.userid = u.userid
WHERE m.userid = 'Bbiri';SELECT * FROM my_employees;
SELECT * FROM users;#9. 删除my_employees、users表所有数据
DELETE FROM my_employees;
DELETE FROM users;#10. 检查所作的修正
SELECT * FROM my_employees;
SELECT * FROM users;#11. 清空表my_employees
TRUNCATE TABLE my_employees;
##########################################
#练习2:
# 1. 使用现有数据库dbtest11
USE dbtest11;# 2. 创建表格pet
CREATE TABLE pet(
NAME VARCHAR(20),
OWNER VARCHAR(20),
species VARCHAR(20),
sex CHAR(1),
birth YEAR,
death YEAR
);DESC pet;# 3. 添加记录
INSERT INTO pet VALUES
('Fluffy','harold','Cat','f','2003','2010'),
('Claws','gwen','Cat','m','2004',NULL),
('Buffy',NULL,'Dog','f','2009',NULL),
('Fang','benny','Dog','m','2000',NULL),
('bowser','diane','Dog','m','2003','2009'),
('Chirpy',NULL,'Bird','f','2008',NULL);SELECT *
FROM pet;# 4. 添加字段:主人的生日owner_birth DATE类型。
ALTER TABLE pet
ADD owner_birth DATE;# 5. 将名称为Claws的猫的主人改为kevin
UPDATE pet
SET OWNER = 'kevin'
WHERE NAME = 'Claws' AND species = 'Cat';# 6. 将没有死的狗的主人改为duck
UPDATE pet
SET OWNER = 'duck'
WHERE death IS NULL AND species = 'Dog';# 7. 查询没有主人的宠物的名字;
SELECT NAME
FROM pet
WHERE OWNER IS NULL;# 8. 查询已经死了的cat的姓名,主人,以及去世时间;
SELECT NAME,OWNER,death
FROM pet
WHERE death IS NOT NULL;# 9. 删除已经死亡的狗
DELETE FROM pet
WHERE death IS NOT NULL
AND species = 'Dog';# 10. 查询所有宠物信息
SELECT *
FROM pet;##################################
#练习3:
# 1. 使用已有的数据库dbtest11
USE dbtest11;
# 2. 创建表employee,并添加记录
CREATE TABLE employee(
id INT,
NAME VARCHAR(15),
sex CHAR(1),
tel VARCHAR(25),
addr VARCHAR(35),
salary DOUBLE(10,2));INSERT INTO employee VALUES
(10001,'张一一','男','13456789000','山东青岛',1001.58),
(10002,'刘小红','女','13454319000','河北保定',1201.21),
(10003,'李四','男','0751-1234567','广东佛山',1004.11),
(10004,'刘小强','男','0755-5555555','广东深圳',1501.23),
(10005,'王艳','男','020-1232133','广东广州',1405.16);SELECT * FROM employee;# 3. 查询出薪资在1200~1300之间的员工信息。
SELECT *
FROM employee
WHERE salary BETWEEN 1200 AND 1300;# 4. 查询出姓“刘”的员工的工号,姓名,家庭住址。
SELECT id,NAME,addr
FROM employee
WHERE NAME LIKE '刘%';# 5. 将“李四”的家庭住址改为“广东韶关”
UPDATE employee
SET addr = '广东韶关'
WHERE NAME = '李四';# 6. 查询出名字中带“小”的员工
SELECT *
FROM employee
WHERE NAME LIKE '%小%';

说明:本内容整理自尚硅谷B站MySQL视频>>尚硅谷B站MySQL视频

MySQL笔记:第11章_数据处理之增删改相关推荐

  1. 【MySQL笔记 第06章_多表查询】

    第06章_多表查询 多表查询概述 1.一个案例引发的多表连接 1.1 案例说明 1.2 笛卡尔积(或交叉连接)的理解 演示代码 2. 多表查询分类讲解 分类1:等值连接 vs 非等值连接 等值连接 非 ...

  2. MySQL (十一) : 数据处理之增删改

    MySQL笔记: B站宋红康最新教程 (持续更新中) markdown笔记下载地址 : https://download.csdn.net/download/m0_37989980/85185726 ...

  3. MySql基础篇---003 SQL之DDL、DML、DCL使用篇:创建和管理表 ,数据处理之增删改,MySQL数据类型精讲 ,约束:联合主键

    第10章_创建和管理表 讲师:尚硅谷-宋红康(江湖人称:康师傅) 官网:http://www.atguigu.com 1. 基础知识 1.1 一条数据存储的过程 存储数据是处理数据的第一步.只有正确地 ...

  4. MySQL笔记:第11章_数据库的设计规范

    第11章_数据库的设计规范 1. 为什么需要数据库设计 2.范式 2.1范式简介 2.2范式都包括哪些 2.3 键和相关属性的概念 2.4第一范式(1st NF) 2.5 第二范式(2nd NF) 2 ...

  5. Java编程思想学习笔记-第11章

    <?xml version="1.0" encoding="utf-8"?> Java编程思想学习笔记-第11章 Java编程思想学习笔记-第11章 ...

  6. 软考-中级-网络工程师-笔记-第11章-网络管理

    第11章 网络管理 11.1 网络管理基础 网络管理体系架构 网络管理软件 VS 网络监控软件 网络管理五大功能域:故障管理.配置管理.计费管理.性能管理和安全管理 故障管理: 网络监控系统体系结构 ...

  7. 畅购商城_第11章_ 订单

    畅购商城_第11章_ 订单 文章目录 畅购商城_第11章_ 订单 第11章 订单 课程内容 1 订单结算页 1.1 收件地址分析 1.2 实现用户收件地址查询 1.2.1 代码实现 1.2.2 测试 ...

  8. 探花交友_第11章_数据统计与内容审核(新版)

    探花交友_第11章_数据统计与内容审核(新版) 文章目录 探花交友_第11章_数据统计与内容审核(新版) 1.用户冻结解冻 1.1 用户冻结 ManageController ManageServic ...

  9. mysql删除分表键_一文看懂 MySQL 分区和分表,提高表增删改查效率

    原标题:一文看懂 MySQL 分区和分表,提高表增删改查效率 作者:冯帅,精通Oracle. MySQL. 擅长异构数据库数据同步及迁移.数据库的设计和调优,对高可用方案有深入研究. MySQL分区和 ...

  10. R操作MySQL数据库创建表、删除表、增删改查(CRUD)

    R操作MySQL数据库创建表.删除表.增删改查(CRUD) 关系数据中的数据是按照一定范式去存储的.当我们需要非常高级和复杂的Sql查询就可以使用关系数据库的数据资产.不光java和python可以容 ...

最新文章

  1. console.log 简写
  2. 使用GitList查看git修改记录
  3. python 操作微信定时发信息
  4. 上届作品回顾丨如何在 Innovation 2021 开发者大赛中脱颖而出?
  5. mac 删除垃圾篓中的文件
  6. 电影院今日复业!20部影片上映,票房预售超百万
  7. Windows下编译DCMTK
  8. cortex a8 java_ARM Cortex-
  9. 出家12年,北大数学天才柳智宇下山还俗:从事心理咨询,主动要求降薪至2万...
  10. Ajax学习日志(五)—— 如何传递json格式请求参数
  11. java 后台将英文名 转换成中文名
  12. 气质由内而外 都市白领3个饮食排毒法则
  13. C语言编程 | 转义字符
  14. 关于支付宝CertificateException: X.509 not found的那些事~づ♡ど,JDK同样的版本之间也会有问题!
  15. 7-3 特立独行的幸福
  16. 基于python的国内外研究现状怎么写_如何写国内外研究现状-国内外研究
  17. nested exception is org.springframework.core.serializer.support.SerializationFailedException异常解决
  18. Python 利用4行代码实现图片灰度化
  19. 博客从CSDN搬至开源中国
  20. onecloud的一次刷机自我小总结

热门文章

  1. 使用Mono Cecil对MSIL进行注入
  2. 新唐NUC980使用记录:自制开发板(基于NUC980DK61YC)
  3. Android源码分析(十三)----SystemUI下拉状态栏如何添加快捷开关
  4. borlndmm.dll(宝兰妹妹)DELPHI核心DLL之一简单分析
  5. android自定义进度条图片,Android零基础入门|自定义酷炫进度条
  6. Java开发需要学什么!中原银行java面试题目
  7. Docker无法启动start request repeated too quickly for docker.service
  8. lol1月8日服务器维护,lol测试服1月8日更新公告
  9. mpeg1,mpeg2,mpeg4
  10. ogg 抽取进程停不下来的解决方法