欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

mysql的一些方法和例子

程序员文章站 2024-01-31 08:34:28
...

数据库的增删改查

程序员必备技能

创建数据库

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

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

相关标签: 复习笔记