mysql的一些方法和例子

数据库的增删改查

程序员必备技能

创建数据库

create database 你要创建的数据库名称;

create database if not exists 数据库名 CHARSET utf8 COLLATE utf8_general_ci;
创建数据库 如果不存在 数据库名 并设置数据库编码格式为utf8

数据库查询

   	指定数据库   
     use 数据库名; 

数据库的删除

drop database 数据库名 

数据库改

参考这个,很全

表的增删改查

创建表

    create table  if not exists 表名(  
      `id`  int UNSIGNED key  AUTO_INCREMENT,    
      `title` VARCHAR(100) NOT NULL    
    )default charset 'utf-8';

表中插入数据

!! 插入数据应注意字段约束,字符串需要加''引号
插入两条数据
INSERT 表名 VALUES 
(字段对应数据1,字段对应数据2,字段对应数据3,字段对应数据4), //第一条数据和第二条之间使用,分割
(字段对应数据1,字段对应数据2,字段对应数据3,字段对应数据4);//最后一条数据后面应该加;

-- 如果有不知道的信息  NULL(注意字段约束是否允许)
INSERT 表名 VALUES 
(字段对应数据1, 字段对应数据2, NULL, NULL, NULL);

指定插入的字段
INSERT 表名(`字段1`, `字段2`) VALUES
('字段1对应数据', 字段2对应数据);

删除表

 drop table 表名;
drop table if exists 表名;


删除限定的使用

-- 删除所有工资高于2W的人  from 从...
DELETE FROM 表名 WHERE 薪资字段名>20000;

修改表

修改表名

rename  table 旧表名  to 新表名;

字段的修改

USE psd1711;

DROP TABLE IF EXISTS test;

CREATE TABLE IF NOT EXISTS test(
`name` VARCHAR(255),
age	TINYINT UNSIGNED
);
DESC test;
-- 添加新字段   add增加
ALTER TABLE test ADD gender TINYINT UNSIGNED;
-- 位置 after 在...后面
-- 新增 favor字段, 添加在 age 字段的后面
ALTER TABLE test ADD favor VARCHAR(255) AFTER age;
-- first 第一
ALTER TABLE test add id int KEY auto_increment FIRST;

DESC test;
-- 删
ALTER TABLE test DROP age;

DESC test;
-- 改: 不改字段名 modify 修改
ALTER TABLE test MODIFY name VARCHAR(50) NOT NULL 
AFTER gender;

-- 改字段名  change 修改   类型是必填项
ALTER TABLE test CHANGE favor favorite VARCHAR(255);

DESC test;



修改表的编码格式为utf-8

alter table 表名 default character set utf8;

修改表数据

-- php程序员 改为  php软件工程师
UPDATE 表名 SET 部门字段名='php软件工程师' WHERE 部门字段名='php程序员';

-- 把 XX 的年龄改为29岁, 薪资改为9000
UPDATE 表名 SET 年龄字段名=29, 薪资字段名=9000 WHERE `名字字段名`='XX';

查表

查看所有的表

use 数据库名;
show tables;

查看表结构

desc  表名;

查看表的所有项目

select * from  表名

查 where的使用

SELECT * FROM 表名 WHERE  字段='条件';

查询出不符合此条件的所有数据
SELECT * FROM 表名 WHERE  字段 !='条件';

大于 小于 适合用于 数字类型
SELECT * FROM 表名   WHERE 数字类型字段 < 条件;

查 or and的使用

or  或者 满足其中之一就可以
SELECT * FROM 表名 WHERE 字段=条件1 OR 字段=条件2;

and  并且 需要同时满足两个条件
SELECT * FROM 表名 WHERE 字段=条件 AND  字段=条件;

查 in的使用

in 等于多个 or 
SELECT * FROM 表名 WHERE 字段 in (条件1, 条件2);

查 like 的使用

like模糊查找  例 :查找某个字段为好开头的数据
SELECT * FROM 表名 WHERE 题目 LIKE '好%';

查 like 的使用

like模糊查找  例 :查找某个字段为条件开头的数据
SELECT * FROM 表名 WHERE 题目 LIKE '条件%';

like模糊查找  例 :查找某个字段为包含的数据
SELECT * FROM 表名 WHERE 题目 LIKE '%条件%';

搜索名字是两个字的员工
SELECT * FROM 表名 WHERE 名字 LIKE '__';

搜索名字是三个字的员工
SELECT * FROM 表名 WHERE 名字 LIKE '___';

 搜索题目 最少6个字数据
SELECT * FROM 表名 WHERE 字段 LIKE '______%';

模糊查找 limit 的使用

 只显示前10条数据
-- limit 序号, 数量    1页
SELECT * FROM  表名  LIMIT 0, 10;
2页
SELECT * FROM 表名 LIMIT 10, 10;
3页
SELECT * FROM 表名 LIMIT 20, 10;

分组查询 group by的使用

 分组的第一个用法是数据去重
查询出 表中的所有新闻作者, group by 按...分组
SELECT 作者名 FROM 表名 GROUP BY 作者名;

配合聚合函数使用
查询出每个作者的新闻数量
SELECT 作者名字段, COUNT(*) FROM 表名 GROUP BY 作者名字段;

分组查询 group by 配合聚合函数使用

 -- 查询出表中, 每个部门的平均薪资
SELECT 部门字段名, AVG(薪资字段名) FROM 表名 GROUP BY 部门字段名;
-- 每个部门的最小年龄
SELECT 部门字段名, MIN(年龄字段名)FROM 表名 GROUP BY 部门字段名;
-- 每个部门的最大薪资
SELECT 部门字段名, max(薪资字段名) FROM 表名 GROUP BY 部门字段名;
-- 每个部门的总薪资
SELECT 部门字段名, sum(薪资字段名) FROM 表名 GROUP BY部门字段名;
-- 每个部门的员工数量
SELECT 部门字段名, count(*) FROM 表名 GROUP BY 部门字段名;

分组查询 group by 配合 where使用

先写 where 再写 group by
例:
查询出每个部门中, 年龄大于25岁的人的平均薪资

SELECT 部门字段名, AVG(薪资字段名) FROM 表名
WHERE 年龄字段名>25
GROUP BY 部门字段名

查询出每个部门中, 年龄大于25岁的人并且平均薪资>1000的人

HAVING语句通常与GROUP BY语句联合使用,用来过滤由GROUP BY语句返回的记录集。
HAVING语句的存在弥补了WHERE关键字不能与聚合函数联合使用的不足。

select 部门字段名,avg(薪资字段名) from  表名 where 年龄字段名>25 
group by  部门字段名 HAVING AVG(薪资字段名)>10000;

条件可以使用() 括起来, 组成一个条件
SELECT * FROM 表名 WHERE (字段名 BETWEEN 条件 AND条件 AND 
字段名>条件) OR 字段名>条件;

排序查询

排序 order by 默认升序 从小到大
SELECT * FROM 表名 ORDER BY 字段;
-- 从大到小, 添加 DESC 关键词, 降序
SELECT * FROM 表名 ORDER BY 字段名 DESC;

-- 查询出每个部门的平均年龄, 从小到大排序
SELECT 部门字段名, AVG(年龄字段名) FROM 表名
GROUP BY 部门字段名
ORDER BY AVG(年龄字段);

-- 查询出每个诗人的作品数量, 从大到小排列
SELECT COUNT(*), 诗人字段名 FROM 表名
GROUP BY 诗人字段名
ORDER BY COUNT(*) DESC;

-- 查询出每个诗人的作品数量, 只有题目超过5个字的
-- 才计算在内, 只显示数量大于10个的诗人. 按照数量
-- 从大到小排序
SELECT 诗人字段名, COUNT(*) FROM 表名
WHERE 题目字段名 like '_____%'
GROUP BY 诗人字段名
HAVING COUNT(*)>10
ORDER BY COUNT(*) DESC;

子查询的使用

-- 查询出薪资比 XX高的人
SELECT * FROM 表名 WHERE 字段名>(
SELECT 薪资字段 FROM 表名 WHERE `名字字段`='XX'
);

-- 查询出XX的同事
SELECT * FROM 表名 WHERE 部门字段=(
SELECT 部门字段 FROM 表名 WHERE `名字字段`='XX'
) and `名字字段` != 'XX';

有点绕,可以理解为,搜索XX的部门,显示名字不是XX的同事

-- 查询出李强的同事的平均薪资
SELECT AVG(薪资) FROM  表名 WHERE  部门字段=(
SELECT  部门字段   FROM 表名 WHERE `名字字段`='李强'
) and `名字字段` != '李强';

-- 查询出比美工部门平均薪资高的其他部门的人
SELECT * FROM employee WHERE 
salary>(
SELECT AVG(salary) FROM employee where job='美工'
) AND job != '美工';

-- 查询出平均薪资比行政人员平均薪资高的部门
-- 用 group by job
SELECT job FROM employee 
GROUP BY job 
HAVING AVG(salary)> (
SELECT AVG(salary) FROM employee WHERE job='行政人员'
);

-- 查询出每个诗人的作品数量, 只有题目超过5个字的
-- 才计算在内, 只显示数量大于10个的诗人. 按照数量
-- 从大到小排序
SELECT d_authorin, COUNT(*) FROM t_shi
WHERE D_TITLE like '_____%'
GROUP BY D_AUTHORIN
HAVING COUNT(*)>10
ORDER BY COUNT(*) DESC;


-- 查询出比每个部门平均薪资都要高的人  all全部
select * from employee where salary>all(
select avg(salary) from employee group by job
);

-- 查询出与任意部门最低年龄相等的人  in 配合相等操作, 与任意一个查询结果相等
select * from employee where age in (
select min(age) from employee group by job
);

mysql 字段约束

  1. – UNSIGNED无符号, 无符号符号约束必须直接写在类型的后面
    age TINYINT UNSIGNED
  2. – 不填写此值, 默认是2, 插入null不会触发默认值设定, 会是null
    字段名字 TINYINT UNSIGNED DEFAULT 2
  3. – 非空约束 not null
    favor VARCHAR(255) NOT NULL DEFAULT '未知',
  4. – 唯一性约束 UNIQUE
    phone VARCHAR(255) UNIQUE,
  5. – 主键: 用来给每条数据添加一个唯一标识
    -- PRIMARY KEY 主键, 作用是唯一性
  6. – auto_increment 如果是null, 则自动分配一个数字作为值
    id INT UNSIGNED PRIMARY KEY auto_increment

后续想到什么还会继续补充…

猜你喜欢

转载自blog.csdn.net/weixin_41864189/article/details/86562214
今日推荐