简单的数据增删改查如下所示:
1、添加数据
MySQL
表中使用 INSERT INTO
SQL
语句来插入新数据:
基本语法:
INSERT INTO table_name ( field1, field2,...fieldN )
VALUES
( value1, value2,...valueN );
示例:
# 插入一条数据,指定id和name
insert into tb(id, name) valuse(1, ‘mike’);
# 一次插入多条数据
insert into tb(id, name) valuse(1, ‘mike’), (2, ‘robot’), (3, ‘jim’)
2、删除数据
MySQL
表中使用 DELETE FROM
SQL
语句来删除表中的数据:
基本语法:
DELETE FROM table_name [WHERE Clause]
- 如果没有指定
WHERE
子句,MySQL
表中的所有记录将被删除。 - 你可以在
WHERE
子句中指定任何条件 - 您可以在单个表中一次性删除记录。
当你想删除数据表中指定的记录时 WHERE 子句是非常有用的。
示例:
delete from tb; # 清空表,但留下ID
truncate table tb # 清空指定表,不留任何记录
delete from tb where id=2 # 删除指定表中id为2的数据
3、更新数据
MySQL
表中使用 SQL
UPDATE
语句来更新表中已有数据:
基本语法:
UPDATE table_name SET field1=new-value1, field2=new-value2
[WHERE Clause]
- 你可以同时更新一个或多个字段。
- 你可以在
WHERE
子句中指定任何条件。 - 你可以在一个单独表中同时更新数据。
当你需要更新数据表中指定行的数据时 WHERE 子句是非常有用的。
示例:
update db.tb set name='zyk'; # 改指定表中的所有name
update db.tb set name='zyk' where id=2; # 改指定表中id为2的name
4、查询数据
MySQL
表中使用 SQL
SELECT
语句来查询表中已有数据:
基本语法:
SELECT column_name,column_name
FROM table_name
[WHERE Clause]
[LIMIT N][ OFFSET M]
- 查询语句中你可以使用一个或者多个表,表之间使用逗号
(,)
分割,并使用WHERE
语句来设定查询条件。 SELECT
命令可以读取一条或者多条记录。- 你可以使用星号
(*)
来代替其他字段,SELECT
语句会返回表的所有字段数据 - 你可以使用
WHERE
语句来包含任何条件。 - 你可以使用
LIMIT
属性来设定返回的记录数。 - 你可以通过
OFFSET
指定SELECT
语句开始查询的数据偏移量。默认情况下偏移量为0。
示例
selecet id from db.table; # 查指定表中的所有id
select id, name from db.table; # 查指定表中的所有id和name
select * from db.tb; # 查指定表中的所有数据
(1)WHERE
子句
SQL SELECT
语句使用 WHERE
子句从数据表中读取数据的通用语法:
SELECT field1, field2,...fieldN FROM table_name1, table_name2...
[WHERE condition1 [AND [OR]] condition2.....
- 查询语句中你可以使用一个或者多个表,表之间使用
逗号,
分割,并使用WHERE
语句来设定查询条件。 - 你可以在
WHERE
子句中指定任何条件。 - 你可以使用
AND
或者OR
指定一个或多个条件。 WHERE
子句也可以运用于SQL
的DELETE
或者UPDATE
命令。WHERE
子句类似于程序语言中的if
条件,根据MySQL
表中的字段值来读取指定的数据。
以下为操作符列表,可用于 WHERE 子句中。
操作符 | 描述 | 实例 |
---|---|---|
= | 等号,检测两个值是否相等,如果相等返回true | (A = B) 返回false。 |
<>, != | 不等于,检测两个值是否相等,如果不相等返回true | (A != B) 返回 true。 |
> | 大于号,检测左边的值是否大于右边的值, 如果左边的值大于右边的值返回true | (A > B) 返回false。 |
< | 小于号,检测左边的值是否小于右边的值, 如果左边的值小于右边的值返回true | (A < B) 返回 true。 |
>= | 大于等于号,检测左边的值是否大于或等于右边的值, 如果左边的值大于或等于右边的值返回true | (A >= B) 返回false。 |
<= | 小于等于号,检测左边的值是否小于于或等于右边的值, 如果左边的值小于或等于右边的值返回true | (A <= B) 返回 true。 |
(2)LIKE
子句
SQL SELECT 语句使用 LIKE 子句从数据表中读取数据的通用语法:
SELECT field1, field2,...fieldN
FROM table_name
WHERE field1 LIKE condition1 [AND [OR]] filed2 = 'somevalue'
- 你可以在
WHERE
子句中指定任何条件。 - 你可以在
WHERE
子句中使用LIKE子句。 - 你可以使用
LIKE
子句代替等号=
。 LIKE
通常与%
一同使用,类似于一个元字符的搜索。- 你可以使用
AND
或者OR
指定一个或多个条件。 - 你可以在
DELETE
或UPDATE
命令中使用WHERE...LIKE
子句来指定条件。
示例:
SELECT * from users WHERE username LIKE '%王%';
(3)UNION
查询
MySQL UNION
操作符用于连接两个以上的 SELECT
语句的结果组合到一个结果集合中。多个 SELECT
语句会删除重复的数据。
基本语法:
SELECT expression1, expression2, ... expression_n
FROM tables
[WHERE conditions]
UNION [ALL | DISTINCT]
SELECT expression1, expression2, ... expression_n
FROM tables
[WHERE conditions]
expression1
,expression2
, …expression_n
: 要检索的列。tables
: 要检索的数据表。WHERE conditions
: 可选, 检索条件。DISTINCT
: 可选,删除结果集中重复的数据。默认情况下UNION
操作符已经删除了重复数据,所以DISTINCT
修饰符对结果没啥影响。ALL
: 可选,返回所有结果集,包含重复数据。
示例:
# 从 Websites 和 apps 表中查询 country 字段去重后的值
SELECT country FROM Websites
UNION
SELECT country FROM apps
ORDER BY country;
# 从 Websites 和 apps 表中查询 country 字段的值,包含重复项
SELECT country FROM Websites
UNION ALL
SELECT country FROM apps
ORDER BY country;
# 带有 where 条件的 union all 查询
SELECT country, name FROM Websites
WHERE country='CN'
UNION ALL
SELECT country, app_name FROM apps
WHERE country='CN'
ORDER BY country;
(4)排序
SQL SELECT
语句使用 ORDER BY
子句将查询数据排序后再返回数据:
SELECT field1, field2,...fieldN FROM table_name1, table_name2...
ORDER BY field1 [ASC [DESC][默认 ASC]], [field2...] [ASC [DESC][默认 ASC]]
- 你可以使用任何字段来作为排序的条件,从而返回排序后的查询结果。
- 你可以设定多个字段来排序。
- 你可以使用
ASC(升序)
或DESC(降序)
关键字来设置查询结果是按升序或降序排列。 默认情况下,它是按升序排列。 - 你可以添加
WHERE...LIKE
子句来设置条件。
示例:
# 查询所有字段,按 created_date 升序排序
SELECT * from users ORDER BY created_date ASC;
# 查询所有字段,按 created_date 降序排序
SELECT * from users ORDER BY created_date DESC;
(5)分组
GROUP BY
语句根据一个或多个列对结果集进行分组。在分组的列上我们可以使用 COUNT
, SUM
, AVG
,等函数。
基本语法:
SELECT column_name, function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name;
示例:
# 查询 users 表中 name 字段的所有值,并 name 分组,统计每个 name 出现的次数
SELECT name, COUNT(*) FROM users GROUP BY name;
使用 WITH ROLLUP
WITH ROLLUP
可以实现在分组统计数据基础上再进行相同的统计(SUM
,AVG
,COUNT
…)。例如我们将以上的数据表按名字进行分组,再统计每个人登录的次数:
# 按 name 进行分组,在统计每个人的登录次数
SELECT name, SUM(singin) as singin_count FROM users GROUP BY name WITH ROLLUP;