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;

    常用函数比如UPPERLOWER等简单函数不记录了