mysql数据库针对表的操作

表记录的增删改查

1.增加一张表

插入记录之前必须得先有表结构!

CREATE TABLE score(
id int PRIMARY KEY auto_increment,
name VARCHAR (20),
chinese FLOAT(4,2),
Math FLOAT(4,2),
English FLOAT(4,2)
)

----插入表记录

-- 插入一条数据 insert

INSERT [INTO] table_name (字段名称,...) VALUES (值....);

-- 插入多条数据
INSERT [INTO] table_name (字段名称,...) VALUES (值....),  #INTO 为
                       (值....),
                        ....
                       (值....);

INSERT INTO score(name,chinese,Math,English) VALUES
('李雷',95.5,90.5,50.5),
('李二蛋',90,66.5,45),
('李二狗',95.5,77.5,86),
('李小虎',50.5,65.5,85),
('李小红',85.5,75.5,75),
('李建',65.5,88.5,88),
('李文采',43.5,75.5,99),
('马冬梅',88.5,60.5,88);
insert [into] tab_name set 字段名=值 ;这也是一种插入记录的方式不过比较笨拙!
--修改表记录

update tab_name set field1=value1,field2=value2,......[where 语句]

        /* UPDATE语法可以用新值更新原有表行中的各列。
        SET子句指示要修改哪些列和要给予哪些值。
        WHERE子句指定应更新哪些行。如没有WHERE子句,则更新所有的行。*/

--删除表记录

delete from tab_name [where ....]


  /*
  如果不跟where语句则删除整张表中的数据
  delete只能用来删除一行记录
  delete语句只能删除表中的内容,不能删除表本身,想要删除表,用drop
  TRUNCATE TABLE也可以删除表中的所有数据,词语句首先摧毁表,再新建表。此种方式删除的数据不能在
  事务中恢复。*/

delete from score where name='李雷';#删除李雷的这条记录。

delete from score;#删除表内所有记录

-- 使用truncate删除表中记录。

truncate from score;同样的删除表中的记录,不过这种方式是先删除整张表(包括表结构)之后再重建相同的表机构。这种方式比较快针对数据量大的表效果显著!

------查询表记录

在数据库操作当中,查询表记录是我们通常要做的操作并且查询的条件方法需要根据不同的需求实现,所以比较重要。

-- 查询语法:

SELECT *|field1,filed2 ... FROM tab_name
      WHERE 条件
      GROUP BY field
      HAVING 筛选
      ORDER BY field
      LIMIT 限制条数

-- (1)select [distinct] *|field1,field2,...... from tab_name
-- 其中from指定从哪张表筛选,*表示查找所有列,也可以指定一个列
-- 表明确指定要查找的列,distinct用来剔除重复行。

例:select * from score;  查询这张score表的所有表记录!

-- 查询表中所有学生的姓名和对应的英语成绩。
select name,English  from score;
-- 过滤表中重复数据。
select distinct English ,name from score;

-- (1) 查询所有学生的数学成绩和总成绩
select name 学生姓名,Math 数学成绩,chinese+Math+English 总成绩 from score;
-- (2) 查询所有学生的语文和数学成绩和,按从高到低排序
select name 学生姓名,chinese+Math 语文和数学成绩之和 from score order by chinese+Math desc;
--(3) 查询班级总成绩最高的学生姓名
select name,(ifnull(chinese,0)+ifnull(Math,0)+ifnull(English,0))
总成绩 from score order by 总成绩 desc limit 1;

------where子句的强大之处:

-- 查询姓名为XXX的学生成绩

select * from score where name='李雷';

-- where字句中可以使用:

      -- 比较运算符:
        > < >= <= <> !=
      between 80 and 100 值在10到20之间
      in(80,90,100) 值是10或20或30
      like 'yuan%'
        /*
        pattern可以是%或者_,
        如果是%则表示任意多字符,此例如唐僧,唐国强
        如果是_则表示一个字符唐_,只有唐僧符合。两个_则表示两个字符:__
        */

-- 逻辑运算符
在多个条件直接可以使用逻辑运算符 and or not

----order by 排序

指定排序的列,排序的列即可是表中的列名,也可以是select 语句后指定的别名。

-- select *|field1,field2... from tab_name order by field [Asc|Desc]

-- Asc 升序、Desc 降序,其中asc为默认值 ORDER BY 子句应位于SELECT语句的结尾。

例:查询班级总成绩最高的学生姓名

select name,(ifnull(chinese,0)+ifnull(Math,0)+ifnull(English,0))
总成绩 from score order by 总成绩 desc limit 1; ---group by 分组
先准备好表结构与记录

CREATE TABLE order_menu(
            id INT PRIMARY KEY auto_increment,
            product_name VARCHAR (20),
            price FLOAT(6,2),
            born_date DATE,
            class VARCHAR (20)
);


INSERT INTO order_menu (product_name,price,born_date,class) VALUES
                          ("苹果",20,20170612,"水果"),
                          ("香蕉",80,20170602,"水果"),
                          ("水壶",120,20170612,"电器"),
                          ("被罩",70,20170612,"床上用品"),
                          ("音响",420,20170612,"电器"),
                          ("床单",55,20170612,"床上用品"),
                          ("草莓",34,20170612,"水果");

 

-- 注意,按分组条件分组后每一组只会显示第一条记录

-- group by字句,其后可以接多个列名,也可以跟having子句,对group by 的结果进行筛选。

-- 按位置字段筛选
select * from order_menu group by 5;

-- 练习:对购物表按类名分组后显示每一组商品的价格总和
select class,SUM(price)from order_menu group by class;


-- 练习:对购物表按类名分组后显示每一组商品价格总和超过150的商品
select class,SUM(price)from order_menu group by class
HAVING SUM(price)>150;

/*
having 和 where两者都可以对查询结果进行进一步的过滤,差别有:
<1>where语句只能用在分组之前的筛选,having可以用在分组之后的筛选;
<2>使用where语句的地方都可以用having进行替换
<3>having中可以用聚合函数,where中就不行。
*/

-- GROUP_CONCAT() 函数
SELECT id,GROUP_CONCAT(name),GROUP_CONCAT(JS) from ExamResult GROUP BY id;

----聚合函数

--<1> 统计表中所有记录

-- COUNT(列名):统计行的个数
-- 统计一个班级共有多少学生?先查出所有的学生,再用count包上
select count(*) from ExamResult;
-- 统计JS成绩大于70的学生有多少个?
select count(JS) from ExamResult where JS>70;
-- 统计总分大于280的人数有多少?
select count(name) from ExamResult
where (ifnull(JS,0)+ifnull(Django,0)+ifnull(OpenStack,0))>280;
-- 注意:count(*)统计所有行; count(字段)不统计null值.

-- SUM(列名):统计满足条件的行的内容和
-- 统计一个班级JS总成绩?先查出所有的JS成绩,再用sum包上
select JS as JS总成绩 from ExamResult;
select sum(JS) as JS总成绩 from ExamResult;
-- 统计一个班级各科分别的总成绩
select sum(JS) as JS总成绩,
sum(Django) as Django总成绩,
sum(OpenStack) as OpenStack from ExamResult;

-- 统计一个班级各科的成绩总和
select sum(ifnull(JS,0)+ifnull(Django,0)+ifnull(Database,0))
as 总成绩 from ExamResult;
-- 统计一个班级JS成绩平均分
select sum(JS)/count(*) from ExamResult ;
-- 注意:sum仅对数值起作用,否则会报错。

-- AVG(列名):
-- 求一个班级JS平均分?先查出所有的JS分,然后用avg包上。
select avg(ifnull(JS,0)) from ExamResult;
-- 求一个班级总分平均分
select avg((ifnull(JS,0)+ifnull(Django,0)+ifnull(Database,0)))
from ExamResult ;
-- Max、Min
-- 求班级最高分和最低分(数值范围在统计中特别有用)
select Max((ifnull(JS,0)+ifnull(Django,0)+ifnull(OpenStack,0)))
最高分 from ExamResult;
select Min((ifnull(JS,0)+ifnull(Django,0)+ifnull(OpenStack,0)))
最低分 from ExamResult;
-- 求购物表中单价最高的商品名称及价格
---SELECT id, MAX(price) FROM order_menu;--id和最高价商品是一个商品吗?

SELECT MAX(price) FROM order_menu;

-- 注意:null 和所有的数计算都是null,所以需要用ifnull将null转换为0!
-- -----ifnull(JS,0)

----limit限制查询条数

SELECT * from ExamResult limit 1;

SELECT * from ExamResult limit 2,5; -- 跳过前两条显示接下来的五条纪录

SELECT * from ExamResult limit 2,2;

---正则表达式匹配你想要的数据


SELECT * FROM employee WHERE emp_name REGEXP '^yu';#查询以yu开头的数据

SELECT * FROM employee WHERE emp_name REGEXP 'yun$';#查询以yun结尾的数据

SELECT * FROM employee WHERE emp_name REGEXP 'm{2}';查询符合两个m的数据。
 

mysql数据库第二弹的更多相关文章

  1. mysql数据库第一弹

    mysql(一) sql语句 sql是Structured Query Language(结构化查询语言)的缩写.SQL是专为数据库而建立的操作命令集,是一种功能齐全的数据库语言. 在使用它时,只需要 ...

  2. mysql优化———第二篇:数据库优化调整参数

    摘要 参数调优内容: 1. 内存利用方面 2. 日志控制方面 3.文件IO分配,空间占用方面 4. 其它相关参数 一  摘要 通过参数提高MYSQL的性能.核心思想如下:         1 提高my ...

  3. 第二百八十八节,MySQL数据库-索引、limit分页、执行计划、慢日志查询

    MySQL数据库-索引.limit分页.执行计划.慢日志查询 索引,是数据库中专门用于帮助用户快速查询数据的一种数据结构.类似于字典中的目录,查找字典内容时可以根据目录查找到数据的存放位置,然后直接获 ...

  4. 第二百八十六节,MySQL数据库-MySQL事务操作(回滚)

    MySQL数据库-MySQL事务操作(回滚) 事务用于将某些操作的多个SQL作为原子性操作,一旦有某一个出现错误,即可回滚到原来的状态,从而保证数据库数据完整性. 举例:有这样一张表 从表里可以看出张 ...

  5. 第二百八十三节,MySQL数据库-MySQL存储过程

    MySQL数据库-MySQL存储过程 MySQL存储过程,也就是有点像MySQL函数,但是他与MySQL函数是有区别的,后面会讲到函数,所以注意区分 注意:函数与存储过程的区别 存储过程是:CREAT ...

  6. centos MySQL主从配置 ntsysv chkconfig setup命令 配置MySQL 主从 子shell MySQL备份 kill命令 pid文件 discuz!论坛数据库读写分离 双主搭建 mysql.history 第二十九节课

    centos  MySQL主从配置 ntsysv   chkconfig  setup命令  配置MySQL 主从 子shell  MySQL备份  kill命令  pid文件  discuz!论坛数 ...

  7. 第二百八十一节,MySQL数据库-SQL注入和pymysql模块防止SQL注入

    MySQL数据库-SQL注入和pymysql模块防止SQL注入 SQL注入就是通过SQL语句绕开程序判断,获取到数据库的内容 下面以一个简单的程序登录SQL注入举例: 正常登录 1.数据库有一张会员表 ...

  8. 第二百七十九节,MySQL数据库-pymysql模块操作数据库

    MySQL数据库-pymysql模块操作数据库 pymysql模块是python操作数据库的一个模块 connect()创建数据库链接,参数是连接数据库需要的连接参数使用方式: 模块名称.connec ...

  9. 第二百七十五节,MySQL数据库安装和介绍

    MySQL数据库安装 一.概述 1.什么是数据库 ? 答:数据的仓库,称其为数据库 2.什么是 MySQL.Oracle.SQLite.Access.MS SQL Server等 ? 答:他们均是一种 ...

随机推荐

  1. OpenCV中的绘图函数-OpenCV步步精深

    OpenCV 中的绘图函数 画线 首先要为画的线创造出环境,就要生成一个空的黑底图像 img=np.zeros((512,512,3), np.uint8) 这是黑色的底,我们的画布,我把窗口名叫做i ...

  2. Weave Scope 多主机监控 - 每天5分钟玩转 Docker 容器技术(81)

    除了监控容器,Weave Scope 还可以监控 Docker Host. 点击顶部 HOSTS 菜单项,地图将显示当前 host. 与容器类似,点击该 host 图标将显示详细信息. host 当前 ...

  3. Go语言备忘录:net/http包的使用模式和源码解析

    本文是晚辈对net/http包的一点浅显的理解,文中如有错误的地方请前辈们指出,以免误导! 转摘本文也请注明出处:Go语言备忘录:net/http包的使用模式和源码解析,多谢!  目录: 一.http ...

  4. 张高兴的 Windows 10 IoT 开发笔记:使用 ULN2003A 控制步进电机

    GitHub:https://github.com/ZhangGaoxing/windows-iot-demo/tree/master/ULN2003A

  5. jemalloc 快速上手攻略

    引言 - 赠送个 Cygwin (加精) Cygwin 有它存在的合理性. 至少比 wine 好太多了. 它主要功能是在winds上面简易的模拟出linux环境, 比虚拟机 轻量一点点. 坑也不少, ...

  6. hashlib模块--摘要算法

    算法介绍: Python的hashlib提供了常见的摘要算法:MD5,SHA()等. 摘要算法,又称哈希算法,散列算法.通过一个函数,吧任意长度的字符串转换为固定长度的字符串(16进制) 摘要算法就是 ...

  7. HTML之事件处理程序

    HTML事件 <body> <input type="button" value="按钮1" id="but1" oncl ...

  8. Spring批量更新batchUpdate提交和Hibernate批量更新executeUpdate

    1:先看hibernate的批量更新处理. 版本背景:hibernate 5.0.8 applicationContext.xml 配置清单: <?xml version="1.0&q ...

  9. Jquery的树插件jqxTreeGrid的使用小结

    一.引入相应的js <link rel="stylesheet" href="../../jqwidgets/styles/jqx.base.css" t ...

  10. 主键乱序插入对Innodb性能的影响

    主键乱序插入对Innodb性能的影响 在平时的mysql文档学习中我们经常会看到这么一句话: MySQL tries to leave space so that future inserts do ...