MySQL数据库基础(一)
记录常用SQL知识点
增删改查四大天王
| 操作 | 关键字 | 语法 |
|---|---|---|
| 新增 | INSERT |
INSERT INTO 表名(属性名1,属性名2,...) VALUES(属性值1,属性值2,...) |
| 删除 | DELETE |
DELETE FROM 表名 WHERE 条件 |
| 修改 | UPDATE |
UPDATE 表名 SET 属性名 = 修改值 WHERE 条件 |
| 查询 | SELECT |
SELECT 属性名 FROM 表名 WHERE 条件 |
假设有基础表people如下,包含四个字段:pid,identify,name,age
| pid | identify | name | age |
|---|---|---|---|
| 1 | 34256247834 | 月峰 | 18 |
| 2 | 56148941535 | 月月峰 | 23 |
新增
-- 新增语句 --
INSERT INTO people(pid,identify,name,age) VALUES('3','45687351123','月峰峰','12');
-- 简化新增语句,如果插入的值的顺序和列能够匹配可简化为 --
INSERT INTO people VALUES('3','45687351123','月峰峰','12');
-- 如果主键自增的话可以再简化为 --
INSERT INTO people VALUES('45687351123','月峰峰','12');
-- 新增多行数据,简化参考单行 --
INSERT INTO people VALUES('45687351123','月峰峰','12'),('3','45687351124','月峰f','22');
-- 子查询新增,需要列名数量匹配,此处举例为复制people表的某一行插入,但是此时无法省略属性名,除非列的数量匹配 --
INSERT INTO people(identify,name,age) SELECT identify,name,age from people where pid = 3;
更新
更新必加WHERE,除非真的有不加WHERE的需要
-- 单列更新 --
UPDATE people SET age = 18 WHERE pid = 4;
-- 多列更新 --
UPDATE people SET age = 19 and name='月峰' where pid = 4;
-- 所有行的列更新,更新时不携带 WHERE 关键字 --
UPDATE people set age = 18; -- 不是你真敢看啊,更新所有列值啊,学会了可别乱用!
删除
删除必加WHERE,除非真的有不加WHERE的需要
-- 删除单条 --
DELETE FROM people WHERE pid = 5;
-- 删除多条 --
DELETE FROM people WHERE name = '月峰';
-- 删除全表 --
DELETE FROM people;
TRUNCATE TABLE people; -- 这个也是删除全表,效率更高并且会重置自增键值
查询
引入一张
账户表
| a_id | a_name | sex | id_card | bid |
|---|---|---|---|---|
| 1 | 谢娜 | F | 42060319820115104X | 10,20 |
| 2 | 吴倩 | F | 42060319830118104X | 10,20,30 |
| 3 | 张峰 | M | 42060319790423104X | 40 |
| 4 | 李俊 | M | 42060319850825104X | 10,20,30 |
| 5 | 唐娥 | F | 42060319901105104X | 10,20,30 |
| 6 | 蒋俊 | M | 42060319870211104X | 50 |
- 普通查询
-- 查询表中所有行 -- SELECT * FROM account; -- 查询所有行并且排序 -- SELECT * FROM account ORDER BY a_id DESC ; -- 排序规则为降序(默认排序) SELECT * FROM account ORDER BY a_id ASC ; -- 排序规则为升序 -- 区间查询 -- SELECT * FROM account WHERE a_id > 3 OR a_id < 5; -- 选取大于3或小于5的数据,不包括4 SELECT * FROM account WHERE a_id > 3 AND a_id < 5; -- 只选取大于3并且小于5的数据 -- 去重查询 如果是多列的话,必须完全相同才可以,基于列的组合去重,并且DISTINCT只能放在最前面 -- SELECT DISTINCT sex FROM account WHERE sex='F'; -- 应该有三条数据,结果为一条-- 分组查询 -- SELECT sex,count(sex) FROM accout GROUP BY sex;
-- 限制查询 -- SELECT * FROM account limit 3; -- 查询前三条数据
- 聚合查询
– 函数查询-- 聚合函数 常与GROUP BY 结合使用,是对多条数据的操作-- SELECT count(*) FROM account; -- COUNT 计算行数 SELECT SUM(age) FROM account; -- SUM 求和 SELECT AVG(age) FROM account; -- AVG 计算平均值 SELECT MAX(age) FROM account; -- MAX 找出最大值 SELECT MIN(age) FROM account; -- MIN 计算最小值-- MySQL常用特有聚合函数 GROUP_CONCAT 按照逗号分隔所在性别组的a_name -- SELECT sex,GROUP_CONCAT(a_name SEPARATOR ',') AS peoples FROM accout GROUP BY sex;
-- JSON_* 聚合函数比如JSON_ARRAY,JSON_OBJECT -- SELECT JSON_OBJECT(a_name,sex) AS `JSON` FROM accout;
-- 常用普通函数 -- -- FIND_IN_SET 判断逗号分隔的数据是否存在某个值 SELECT * FROM accout WHERE FIND_IN_SET('10',bid);
- 字符串组合函数 CONCAT -- SELECT CONCAT(a_id," ",a_name) as 'id&name' FROM accout;-
-- 提取姓氏 SUBSTRING 截取字符串从第一位开始 SELECT SUBSTRING(a_name,1,1) FROM accout;
常用函数比如
UPPER和LOWER等简单函数不记录了