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. 移动端效果之CellSwiper

    写在前面 接着之前的移动端效果讲解,刚好项目中需要使用到这一效果,去饿了么的组件库看了一下效果,发现效果和微信端的cellSwiper还是有点差别的,由于项目中又是使用的React,之前使用的Reac ...

  2. 使用Hexo+Github一步步搭建属于自己的博客(进阶)

    主题的配置:这里以NexT主题作为题材 1.安装NexT,在其文件夹中鼠标右键,点击Git Base Here.输入命令:git clone https://github.com/iissnan/he ...

  3. 【读书笔记】《写给大忙人看的Java SE 8》——Java8新特性总结

    虽然看过一些Java 8新特性的资料,但是平时很少用到,时间长了就忘了,正好借着Java 9的发布,来总结下一些Java 8中的新特性. 接口中的默认方法和静态方法 先考虑一个问题,如何向Java中的 ...

  4. Cosmos OpenSSD--greedy_ftl1.2.0(二)

    FTL的整个流程如下: 下面先来看写的流程: 写的代码如下: if((hostCmd.reqInfo.Cmd == IDE_COMMAND_WRITE_DMA) || (hostCmd.reqInfo ...

  5. Express+Mongoose(MongoDB)+Vue2全栈微信商城项目全记录

    最近用vue2做了一个微信商城项目,因为做的比较仓促,所以一边写一下整个流程,一边稍做优化. 项目github地址:https://github.com/seven9115/vue-fullstack ...

  6. 使用clone

    1.继承Cloneable接口 2.重写clone方法 3.在clone方法中调用super.clone() 4.把浅复制的引用指向原型对象新的克隆体

  7. MongoDB原子操作

    MongoDB原子操作常用命令: 1. $set: 用来指定一个键并更新键值,若键不存在则创建并赋值. { $set : { field : value } } 2. $unset: 用来删除一个键. ...

  8. 已安装Fedora的U盘无法格式化,要求reinitialize layout

    错误提示:This partition cannot be modified because it contains a partition table; >please reinitializ ...

  9. 扩展Spring切面功能

    概述 Spring的切面(Spring动态代理)在Spring中应用十分广泛,例如还有事务管理,重试等等.网上介绍SpringAop源码很多,这里假设你对SpringAop有基本的了解.如果你认为Sp ...

  10. DNS主从服务部署

    (1)节点信息 console01 主DNS 192.168.80.3 192.168.10.3 console02 从DNS 192.168.80.4 192.168.10.4 (2)环境部署 # ...