尚硅谷MySQL学习笔记:第11章_数据处理之增删改

1. 插入数据

1.1 实际问题

使用INSERT语句向表中插入数据

1.2 方式1:VALUES的方式添加

  • 情况1:为表的所有字段按默认顺序插入数据

      INSERT INTO 表名 VALUES(value1, value2, ...);
    
CREATE DATABASE IF NOT EXISTS mytest11_1 CHARACTER SET 'utf8';
USE mytest11_1;

CREATE TABLE departments AS (SELECT * FROM atguigudb.departments);
SELECT * FROM departments;

INSERT INTO departments
VALUES(280, 'Pub', 100, 1700);

SELECT * FROM departments;
  • 情况2:为表的指定字段插入数据

      INSERT INTO 表名(column1[, column2, ..., columnn])
      VALUES(value1[, value2, ..., valuen]);
    
INSERT INTO departments(department_id, department_name)
VALUES(290, 'IT');
SELECT * FROM departments;
  • 情况3:同时插入多条记录

     INSERT INTO 表名
     VALUES
     (value1[, value2, ..., valuen]),
     (value1[, value2, ..., valuen]),
     ...
     (value1[, value2, ..., valuen]);
    
     INSERT INTO 表名(column1[, column2, ..., columnn])
     VALUES
     (value1[, value2, ..., valuen]),
     (value1[, value2, ..., valuen]),
     ...
     (value1[, value2, ..., valuen]);
    
CREATE TABLE IF NOT EXISTS emp(
emp_id INT,
emp_name VARCHAR(15),
salary DECIMAL(10, 2)
);

DESC emp;

INSERT INTO emp(emp_id, emp_name)
VALUES
(1001, 'Tom'),
(1002, 'Jerry'),
(1003, 'Jack');

SELECT * FROM emp;

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

INSERT INTO 目标表名
(tar_column1[, tar_column2, ..., tar_columnn])
SELECT
(src_column1[, src_column2, ..., src_columnn])
FROM 源表名
[WHERE condition]
CREATE TABLE IF NOT EXISTS emp2 AS (SELECT * FROM atguigudb.employees WHERE 1=2);
SELECT * FROM emp2;
DESC emp2;

INSERT INTO emp2
SELECT * FROM atguigudb.employees;

CREATE TABLE IF NOT EXISTS sales_reps(
id INT,
NAME VARCHAR(20),
salary DOUBLE(8,2),
commission_pct DOUBLE(2,2)
);

SELECT * FROM sales_reps;

INSERT INTO sales_reps(id, NAME, salary, commission_pct)
SELECT employee_id, last_name, salary, commission_pct
FROM atguigudb.employees
WHERE job_id LIKE '%REP%';

SELECT * FROM sales_reps;

SELECT * FROM atguigudb.employees WHERE job_id LIKE '%REP%';

2. 更新数据

使用UPDATE语句更新数据

UPDATE 表名
SET column1=value1, column2=value2, ..., columnn=valuen
[WHERE condition];	# 若没有WHERE子句,将更新所有数据

如果需要回滚数据,需要再DML前设置:SET AUTOCOMMIT=FALSE;

CREATE TABLE IF NOT EXISTS employees AS (SELECT * FROM atguigudb.employees);
SELECT * FROM employees;

UPDATE employees SET department_id = 70 WHERE employee_id = 113;

CREATE TABLE IF NOT EXISTS copy_emp AS (SELECT * FROM employees);
SELECT * FROM copy_emp;

# 如果没有WHERE子句,将更新所有数据
UPDATE copy_emp SET department_id = 110;

# 更新中的数据完整性错误
# 	修改数据时,可能不成功,可能原因是约束的影响

3. 删除数据

使用DELETE语句从表中删除数据

DELETE FROM 表名
[WHERE CONDITION];	# 若没有WHERE子句,将删除所有记录
DELETE FROM departments
WHERE department_name = 'Finance';

SELECT * FROM departments;

DELETE FROM copy_emp;

SELECT * FROM copy_emp;

# 删除中的数据完整性错误
# 	删除数据时,可能不成功,可能原因是约束的影响

4. MySQL8新特性:计算列

计算列:某一列的值是通过别的列值计算得来的

column datetype GENERATED ALWAYS AS (expression) VIRTUAL
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);
SELECT * FROM tb1;

UPDATE tb1 SET a = 500;
SELECT * FROM tb1;

5. 综合案例

1、创建数据库test01_library

CREATE DATABASE IF NOT EXISTS test01_library CHARACTER SET 'utf8';
USE test01_library;

2、创建表 books,表结构如下:

字段名 字段说明 数据类型
id 书编号 INT
name 书名 VARCHAR(50)
authors 作者 VARCHAR(100)
price 价格 FLOAT
pubdate 出版日期 YEAR
note 说明 VARCHAR(100)
num 库存 INT
CREATE TABLE IF NOT EXISTS books(
id INT,
`name` VARCHAR(50),
`authors` VARCHAR(100),
price FLOAT,
pubdate YEAR,
note VARCHAR(100),
num INT
);

3、向books表中插入记录

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

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
INSERT INTO books
VALUES(1, 'Tal of AAA', 'Dickes', 23, 1995, 'novel', 11);

INSERT INTO books(id, `name`, `authors`, price, pubdate, note, num)
VALUES(2, 'EmmaT', 'Jane lura', 35, 1993, 'joke', 22);

INSERT INTO books
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;

4、将小说类型(novel)的书的价格都增加5

UPDATE books
SET price = price + 5
WHERE note = 'novel';

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 *
FROM books
WHERE `name` LIKE '%a%';

8、统计书名中包含a字母的书的数量和库存总量

SELECT COUNT(*), SUM(num)
FROM books
WHERE `name` LIKE '%a%';

9、找出“novel”类型的书,按照价格降序排列

SELECT * 
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)
FROM books
GROUP BY note
ORDER BY SUM(num) DESC
LIMIT 0, 1;

15、查询书名达到10个字符的书,不包括里面的空格

# 错误,LENGTH是返回字符串的字节数,CHAR_LENGTH才是返回字符串的字符数
SELECT * FROM books WHERE LENGTH(REPLACE(`name`, ' ', '')) >= 10;

SELECT * 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 '笑话'
END AS "类型"
FROM books;

17、查询书名、库存,其中num值超过30本的,显示滞销,大于0并低于10的,显示畅销,为0的显示需要无货

SELECT `name`, num, CASE 
WHEN num > 30 THEN "滞销"
WHEN num > 0 AND num < 10 THEN "畅销"
WHEN num = 0 THEN "无货"
END
FROM books;

18、统计每一种note的库存量,并合计总量

SELECT note SUM(num)
FROM books
GROUP BY note WITH ROLLUP;

19、统计每一种note的数量,并合计总量

SELECT note, COUNT(*)
FROM books
GROUP BY note WITH ROLLUP;

20、统计库存量前三名的图书

SELECT *
FROM books
ORDER BY num DESC
LIMIT 0, 3;

21、找出最早出版的一本书

SELECT *
FROM books
ORDER BY pubdate
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;

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


学习编程是顺着互联网的发展潮流,是一件好事。新手如何学习编程?其实不难,不过在学习编程之前你得先了解你的目的是什么?这个很重要,因为目的决定你的发展方向、决定你的发展速度。
IT行业是什么工作做什么?IT行业的工作有:产品策划类、页面设计类、前端与移动、开发与测试、营销推广类、数据运营类、运营维护类、游戏相关类等,根据不同的分类下面有细分了不同的岗位。
女生学Java好就业吗?女生适合学Java编程吗?目前有不少女生学习Java开发,但要结合自身的情况,先了解自己适不适合去学习Java,不要盲目的选择不适合自己的Java培训班进行学习。只要肯下功夫钻研,多看、多想、多练
Can’t connect to local MySQL server through socket \'/var/lib/mysql/mysql.sock问题 1.进入mysql路径
oracle基本命令 一、登录操作 1.管理员登录 # 管理员登录 sqlplus / as sysdba 2.普通用户登录
一、背景 因为项目中需要通北京网络,所以需要连vpn,但是服务器有时候会断掉,所以写个shell脚本每五分钟去判断是否连接,于是就有下面的shell脚本。
BETWEEN 操作符选取介于两个值之间的数据范围内的值。这些值可以是数值、文本或者日期。
假如你已经使用过苹果开发者中心上架app,你肯定知道在苹果开发者中心的web界面,无法直接提交ipa文件,而是需要使用第三方工具,将ipa文件上传到构建版本,开...
下面的 SQL 语句指定了两个别名,一个是 name 列的别名,一个是 country 列的别名。**提示:**如果列名称包含空格,要求使用双引号或方括号:
在使用H5混合开发的app打包后,需要将ipa文件上传到appstore进行发布,就需要去苹果开发者中心进行发布。​
+----+--------------+---------------------------+-------+---------+
数组的声明并不是声明一个个单独的变量,比如 number0、number1、...、number99,而是声明一个数组变量,比如 numbers,然后使用 nu...
第一步:到appuploader官网下载辅助工具和iCloud驱动,使用前面创建的AppID登录。
如需删除表中的列,请使用下面的语法(请注意,某些数据库系统不允许这种在数据库表中删除列的方式):
前不久在制作win11pe,制作了一版,1.26GB,太大了,不满意,想再裁剪下,发现这次dism mount正常,commit或discard巨慢,以前都很快...
赛门铁克各个版本概览:https://knowledge.broadcom.com/external/article?legacyId=tech163829
实测Python 3.6.6用pip 21.3.1,再高就报错了,Python 3.10.7用pip 22.3.1是可以的
Broadcom Corporation (博通公司,股票代号AVGO)是全球领先的有线和无线通信半导体公司。其产品实现向家庭、 办公室和移动环境以及在这些环境...
发现个问题,server2016上安装了c4d这些版本,低版本的正常显示窗格,但红色圈出的高版本c4d打开后不显示窗格,
TAT:https://cloud.tencent.com/document/product/1340