常用 SQL 语句之:增删改查

一. 插入语句

SQL语句,插入语句,插入的英文是insert,它的基本格式是:

sql 复制代码
INSERT INTO 表名 (列1, ...) VALUES (值1, ...)

-- 例如:
INSERT INTO `Articles` (`title`, `content`) VALUES ('行路难·其一', '长风破浪会有时,直挂云帆济沧海。');

插入多条数据,我们可以将语句做一个小小的调整。

sql 复制代码
-- 多行插入
INSERT INTO 表名 (列1, ...) VALUES (值1,值2 ...),(值1, 值2...)...;

-- 例如

INSERT INTO `Articles` (`title`, `content`) VALUES ('将进酒', '天生我材必有用,千金散尽还复来。'), ('宣州谢朓楼饯别校书叔云', '抽刀断水水更流,举杯消愁愁更愁。'), ('梦游天姥吟留别', '安能摧眉折腰事权贵,使我不得开心颜!'), ('春夜宴从弟桃花园序', '天地者,万物之逆旅也;光阴者,百代之过客也。'), ('宣州谢朓楼饯别校书叔云', '弃我去者,昨日之日不可留;乱我心者,今日之日多烦忧。'), ('庐山谣寄卢侍御虚舟', '我本楚狂人,凤歌笑孔丘。手持绿玉杖,朝别黄鹤楼。'), ('行路难', '长风破浪会有时,直挂云帆济沧海'), ('将进酒', '人生得意须尽欢,莫使金樽空对月。天生我材必有用,千金散尽还复来。'), ('望庐山瀑布', '飞流直下三千尺,疑是银河落九天。'), ('访戴天山道士不遇', '树深时见鹿,溪午不闻钟。'), ('清平调', '云想衣裳花想容,春风拂槛露华浓。'), ('春夜洛城闻笛', '谁家玉笛暗飞声,散入春风满洛城。');

二. 删除语句

删除语句。当有一条记录,我们不想要了,那么可以使用删除语句,也就是delete

sql 复制代码
DELETE FROM 表名 WHERE 条件

-- 例如:
DELETE FROM `ARTICLES` WHERE `id`=5;

三. 修改语句

修改语句,修改的英文是update,格式是:

sql 复制代码
UPDATE 表名 SET 列1=值1, 列2=值2, ... WHERE 条件

-- 例如:
UPDATE `Articles` SET `title`='黄鹤楼送孟浩然之广陵', `content`='故人西辞黄鹤楼,烟花三月下扬州。' WHERE `id`=2;

四. 查询语句

基础查询

查询语句,也就是select。最基础的语句就是

sql 复制代码
SELECT * FROM 表名;

-- 例如:
SELECT * FROM `Articles`;

这里的*表示所有的字段,如果你不需要那么多东西,我们也可以修改成

sql 复制代码
SELECT `id`, `title` FROM `Articles`;

这样就只查idtitle,而没有content了。

添加条件

接下来,我们看看怎样添加条件来查询。例如我只需要id=2的这一条记录,那还是要使用WHERE

sql 复制代码
SELECT * FROM 表名 WHERE 条件;

-- 例如:
SELECT * FROM `Articles` WHERE `id`=2;

-- 或者,想查询id大于2的文章:
SELECT * FROM `Articles` WHERE `id`>2;
排序

我们还可以对数据进行排序,排序就两个关键词,大家务必要记住,ASCDESCASC是正序(升序),也就是从小到大。当我们查询的时候,默认就是按照id从小到大排列的。DESC是倒序(降序),就是从大到小了。那我们现在来试试看

关联查询
左关联查询
sql 复制代码
SELECT
  `u`.`id` AS `发布者ID`,
	`u`.`username` AS `发布者用户名`,
	`a`.`id` AS `文章ID`,
	`a`.`title` AS `文章标题`
FROM `user` `u`
LEFT JOIN `article` `a` ON `a`.user_id = `u`.id;
右关联查询
sql 复制代码
SELECT
  `u`.`id` AS `发布者ID`,
	`u`.`username` AS `发布者用户名`,
	`a`.`id` AS `文章ID`,
	`a`.`title` AS `文章标题`
FROM `user` `u`
RIGHT JOIN `article` `a` ON `a`.user_id = `u`.id;
内关联查询(取交集)
sql 复制代码
SELECT
  `u`.`id` AS `发布者ID`,
	`u`.`username` AS `发布者用户名`,
	`a`.`id` AS `文章ID`,
	`a`.`title` AS `文章标题`
FROM `user` `u`
INNER JOIN `article` `a` ON `a`.user_id = `u`.id;
借助UNION拼接LEFT JOIN和RIGHT JOIN的结果
sql 复制代码
SELECT
  `u`.`id` AS `发布者ID`,
	`u`.`username` AS `发布者用户名`,
	`a`.`id` AS `文章ID`,
	`a`.`title` AS `文章标题`
FROM `user` `u`
LEFT JOIN `article` `a` ON `a`.user_id = `u`.id

UNION

SELECT
  `u`.`id` AS `发布者ID`,
	`u`.`username` AS `发布者用户名`,
	`a`.`id` AS `文章ID`,
	`a`.`title` AS `文章标题`
FROM `user` `u`
RIGHT JOIN `article` `a` ON `a`.user_id = `u`.id;
关系运算

整体来说,我们搞清楚 IS NULLIS NOT NULLINNOT IN还有ANDOR就好了,其它的都跟js的一样。

sql 复制代码
SELECT
  `u`.`id` AS `发布者ID`,
	`u`.`username` AS `发布者用户名`,
	`a`.`id` AS `文章ID`,
	`a`.`title` AS `文章标题`
FROM `user` `u`
LEFT JOIN `article` `a` ON `a`.user_id = `u`.id
#WHERE `u`.`id` = 1;
#WHERE `u`.`id` > 1;
#WHERE `u`.`id` >= 1;
#WHERE `u`.`id` < 1;
#WHERE `u`.`id` <= 1;
#WHERE `u`.`id` != 1;
#WHERE `u`.`id` <> 1; # 也是不等于
#WHERE `u`.`id` IN (1,2,3) # 是否在指定的集合中
#WHERE `u`.`id` NOT IN (1,2,3) # 是否不在指定的集合中
#WHERE `a`.`id` IS NULL; # 指定字段值为NULL
#WHERE `a`.`id` IS NOT NULL; # 指定字段值不为NULL
#WHERE `a`.`title` LIKE '%前端%'; # 模糊查询,表示匹配包含"前端"二字的数据
#WHERE `a`.`title` LIKE '%前端'; # 模糊查询,表示匹配以"前端"结尾的数据
#WHERE `a`.`title` LIKE '前端%'; # 模糊查询,表示匹配以"前端"开头的数据
#WHERE `u`.`id` = 1 AND `a`.`id` = 1; # 并且关系,指定多个条件
WHERE `u`.`id` = 1 OR `a`.`id` = 3; # 或者关系,指定多个条件
子查询 (查询嵌套查询类似for循环嵌套)
sql 复制代码
######################### 子查询案例1 #########################

SELECT * FROM `article`
WHERE `user_id` IN (
  SELECT `id` FROM `user` WHERE `id` != 1
);
# 等同于
# WHERE `user_id` IN (2,3,4,5);

######################### 子查询案例2 #########################

# 先了解固定值字段
SELECT
  `id` AS `发布者ID`,
	`username` AS `发布者用户名`,
	'你好哇' AS `自定义莫名其妙的字段`
FROM `user` `u`

# 再了解COUNT函数(用于统计数量),本条语句得到一个统计数值
SELECT
	COUNT(`id`)
FROM `article`
WHERE `user_id` = 1;

# 将统计语句带入字段
SELECT
  `id` AS `发布者ID`,
	`username` AS `发布者用户名`,
	(
	  SELECT
	    COUNT(`id`)
	  FROM `article`
	  WHERE `user_id` = 1
	) AS `发布数`
FROM `user` `u`

# 动态化条件,即可通过子查询完成数据统计
SELECT                          # for id,username of `user`
  `id` AS `发布者ID`,
	`username` AS `发布者用户名`,
	(
	  SELECT
	    COUNT(`id`)
	  FROM `article`
	  WHERE `user_id` = `u`.`id`
	) AS `发布数`
FROM `user` `u`

SQL语句规则说明

  • 大小写 : 大家回过头来再看看这条SQL语句,首先这里的语句都使用了大写字母,其实你改为小写也是一样可以正确运行的,只是大写的更规范一些而已。

  • `(反引号) : 另外表的名字,和字段的名字,我们使用了**`** 号,注意不要找错了,它是键盘最左上角esc键下面的这个键。这里不写这个符号也是可以运行的,但是有些情况下必须写,例如我们有一个字段刚好叫做insert。如果你不写,那MySQL就会当成这里要执行插入,而不会识别成一个字段的名字。所以规范的来说,所有的表名字段名,都最好加上**`**号。

  • 引号 : 最后面的内容,他们都是字符串,一定要加上引号。不加上引号的话,MySQL就无法正确的识别为字符串,也会报错的。当然,如果是数字的话,就不用打引号了。

总结

|--------|----|
| 关键字 | 说明 |
| INSERT | 增加 |
| DELETE | 删除 |
| UPDATE | 更改 |
| SELECT | 查询 |
| WHERE | 条件 |

SQL语句最基础的新增、删除、更改、查询,记住他们的关键字,insertdeleteupdate和select。还有,如果你要针对某一条记录做操作,那就千万别忘了,一定要使用where条件,排序有两个,ASC是正序(升序),DESC是倒序(降序)