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

文章目录

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

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 号部门

在这里插入图片描述

演示代码

#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;

在这里插入图片描述

演示代码


#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,表结构如下:

在这里插入图片描述

# 3、向books表中插入记录
# 1)不指定字段名称,插入第一条记录
# 2)指定所有字段名称,插入第二记录
# 3)同时插入多条记录(剩下的所有记录)

在这里插入图片描述

# 4、将小说类型(novel)的书的价格都增加5。
# 5、将名称为EmmaT的书的价格改为40,并将说明改为drama。
# 6、删除库存为0的记录。
# 7、统计书名中包含a字母的书
# 8、统计书名中包含a字母的书的数量和库存总量
# 9、找出“novel”类型的书,按照价格降序排列
# 10、查询图书信息,按照库存量降序排列,如果库存量相同的按照note升序排列
# 11、按照note分类统计书的数量
# 12、按照note分类统计书的库存量,显示库存量超过30本的
# 13、查询所有图书,每页显示5本,显示第二页
# 14、按照note分类统计书的库存量,显示库存量最多的
# 15、查询书名达到10个字符的书,不包括里面的空格
# 16、查询书名和类型,其中note值为novel显示小说,law显示法律,medicine
# 显示医药,cartoon显示卡通,joke显示笑话
# 17、查询书名、库存,其中num值超过30本的,显示滞销,大于0并低于10的,
# 显示畅销,为0的显示需要无货
# 18、统计每一种note的库存量,并合计总量
# 19、统计每一种note的数量,并合计总量
# 20、统计库存量前三名的图书
# 21、找出最早出版的一本书
# 22、找出novel中价格最高的一本书
# 23、找出书名中字数最多的一本书,不含空格

答案:

#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 '%小%';

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/180178.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深度学习之基于Python+OpenCV+dlib的考生信息人脸识别系统(GUI界面)

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 深度学习在人脸识别领域的应用已经取得了显著的进展。Python是一种常用的编程语言&#xff0c;它提供了许多强大的库…

从零开始学习搭建量化平台笔记

从零开始学习搭建量化平台笔记 本笔记由纯新手小白开发学习记录&#xff0c;欢迎大佬请教指点留言&#xff0c;有空的话还可以认识一下&#xff0c;来上海请您喝咖啡~~ 2023/10/30&#xff1a;上份工作辞职并休息了几个月后&#xff0c;打算开始找个关于量化投资相关的工作。面…

在公共安全场景下,智能监控如何做到保障安全的同时又最大化地提供便利?

智能监控系统应用的场景十分广泛&#xff0c;其中&#xff0c;公共安全场所的需求尤为重要&#xff0c;为保障公共区域的安全&#xff0c;提升人民群众的归属感&#xff0c;增强公共场所的安全性&#xff0c;智慧安防EasyCVR智能视频监控系统做出了极大努力。具体细节如下&…

基于生成对抗网络的照片上色动态算法设计与实现 - 深度学习 opencv python 计算机竞赛

文章目录 1 前言1 课题背景2 GAN(生成对抗网络)2.1 简介2.2 基本原理 3 DeOldify 框架4 First Order Motion Model5 最后 1 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 基于生成对抗网络的照片上色动态算法设计与实现 该项目较为新颖&am…

YOLOv5源码中的参数超详细解析(5)— 验证部分(val.py)参数解析

前言:Hello大家好,我是小哥谈。YOLOv5是一种先进的目标检测算法,它可以实现快速和准确的目标检测。在YOLOv5源码中,train.py和detect.py文件讲完了之后,接着就是讲val.py文件了。本节课就结合源码对val.py文件进行逐行解析~!🌈 前期回顾: YOLOv5源码中的参数超详细解…

喜报|英码科技荣登“广州首届百家新锐企业名单”、“2022年度中国好技术项目库名单”榜单

近日&#xff0c;英码科技喜报连连&#xff0c;在刚刚公布的2022年度“中国好技术”项目库入选名单和广州首届百家新锐企业名单中&#xff0c;英码科技凭借出色的技术创新能力和优秀的企业竞争力荣登榜单。 2022年度“中国好技术” 近期&#xff0c;2022年度“中国好技术”征集…

持续进化,快速转录,Faster-Whisper对视频进行双语字幕转录实践(Python3.10)

Faster-Whisper是Whisper开源后的第三方进化版本&#xff0c;它对原始的 Whisper 模型结构进行了改进和优化。这包括减少模型的层数、减少参数量、简化模型结构等&#xff0c;从而减少了计算量和内存消耗&#xff0c;提高了推理速度&#xff0c;与此同时&#xff0c;Faster-Whi…

数据结构笔记——查找、排序(王道408)

文章目录 查找基本概念线性表查找顺序查找折半查找&#xff08;二分&#xff09;分块查找 树查找二叉排序树&#xff08;BST&#xff09;平衡二叉树&#xff08;AVL&#xff09;的插入平衡化复杂度分析 平衡二叉树的删除 红黑树红黑树的定义和性质红黑树定义红黑树性质 红黑树的…

MySQL进阶之性能优化与调优技巧

数据库开发-MySQL 1. 多表查询1.1 概述1.1.2 介绍1.1.3 分类 1.2 内连接1.3 外连接1.4 子查询1.4.1 介绍1.4.2 标量子查询1.4.3 列子查询1.4.4 行子查询1.4.5 表子查询 2. 事务2.1 介绍2.2 操作2.3 四大特性 3. 索引3.1 介绍3.2 结构3.3 语法 1. 多表查询 1.1 概述 1.1.2 介绍…

目标检测:Proposal-Contrastive Pretraining for Object Detection from Fewer Data

论文作者&#xff1a;Quentin Bouniot,Romaric Audigier,Anglique Loesch,Amaury Habrard 作者单位&#xff1a;Universit Paris-Saclay; Universit Jean Monnet Saint-Etienne; Universitaire de France (IUF) 论文链接&#xff1a;http://arxiv.org/abs/2310.16835v1 内容…

MyBatis底层原理(小白版本)

&#xff01;特别声明&#xff01;&#xff1a;这篇文章只是单纯用来应对面试&#xff0c;并不能用来当作深度解析的文章来看。本人才疏学浅&#xff0c;文章也可能有不对的地方&#xff0c;望指正。 此源码分析使用的是Java11 基本使用流程&#xff1a; String resource &q…

C#完成XML文档节点的自动计算功能

一个项目涉及XML文档中节点的自动计算&#xff0c;就是XML文档的每个节点都参与运算&#xff0c;要求&#xff1a; ⑴如果节点有计算公式则按照计算公式进行&#xff1b; ⑵如果节点没有计算公式则该节点的值就是所有子节点的值之和&#xff1b; ⑶节点有4种类型&#xff0c;计…

SpringBoot的Condition注解

文章目录 参考资料运行环境SpringBoot 自动配置原理一、Condition二、切换内置web服务器三、Enable*注解四、Import 注解五、EnableAutoConfiguration 注解六、案例七、收获与总结 参考资料 视频链接 运行环境 win10IDEA专业版SpringBoot 2.6.2 SpringBoot 自动配置原理 一、Co…

OpenCV官方教程中文版 —— 图像修复

OpenCV官方教程中文版 —— 图像修复 前言一、基础二、代码三、更多资源 前言 本节我们将要学习&#xff1a; • 使用修补技术去除老照片中小的噪音和划痕 • 使用 OpenCV 中与修补技术相关的函数 一、基础 在我们每个人的家中可能都会几张退化的老照片&#xff0c;有时候…

前端性能分析工具

前段时间在工作中,需要判断模块bundle size缩减对页面的哪些性能产生了影响, 因此需要了解前端的性能指标如何定义的,以及前端有哪些性能分析工具, 于是顺便整理了一篇笔记, 以供前端小白对性能这块知识点做一个入门级的了解. 页面渲染 在了解性能指标和分析工具之前,有必要先…

PostgreSQL逻辑管理结构

1.数据库逻辑结构介绍 2.数据库基本操作 2.1 创建数据库 CREATE DATABASE name [ [ WITH ] [ OWNER [] user_name ] [ TEMPLATE [] template ] [ ENCODING [] encoding ] [ LC_COLLATE [] lc_collate ] [ LC_CTYPE [] lc_ctype ] [ TABLESPACE [] tablespace ] [ CONNECTION L…

python连接clickhouse (CK)

Author: tkhywang 2810248865qq.com Date: 2023-11-01 11:28:58 LastEditors: tkhywang 2810248865qq.com LastEditTime: 2023-11-01 11:36:25 FilePath: \PythonProject02\Python读取clickhouse2 数据库数据.py Description: 这是默认设置,请设置customMade, 打开koroFileHead…

freertos入门(stm32f10c8t6版闪烁灯)

首先到官网下载freertos源码&#xff0c;然后找一个stm32f10c8t6的空模板&#xff0c;这个空模板实现点灯之类的都行。 然后在这个空模板的工程下新建一个FreeRtos文件夹 接着在FreeRtos文件夹下新建三个文件夹&#xff0c;分别是src存放源码 inc 存放头文件&#xff0c;port …

EasyExcel复杂表头数据导入

目录 表头示例导入代码数据导出 表头示例 导入代码 Overridepublic void importExcel(InputStream inputStream) {ItemExcelListener itemExcelListener new ItemExcelListener();EasyExcel.read(inputStream, ImportItem.class, itemExcelListener).headRowNumber(2).sheet()…

广汽传祺E9上市,3DCAT实时云渲染助力线上3D高清看车体验

今年5月21日&#xff0c;中国智电新能源旗舰MPV——广汽传祺智电新能源E9在北京人民大会堂举办上市发布会。 发布会现场&#xff08;图源官方&#xff09; 为了让更多的消费者能够在线上感受到广汽传祺E9的魅力&#xff0c;3DCAT实时渲染云与大圣科技合作为广汽传祺打造了一款…