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. Python接口自动化——soap协议传参的类型是ns0类型的要创建工厂方法纪要

    1:在Python接口自动化中,对于soap协议的xml的请求我们可以使用Suds Client来实现,其soap协议传参的类型基本上是有2种: 第一种是传参,不需要再创建啥, 第二种就是ns0类型的 ...

  2. jenkins、ant、selenium、testng搭建自动化测试框架

    如果在你的理解中自动化测试就是在eclipse里面讲webdriver的包引入,然后写一些测试脚本,这就是你所说的自动化测试,其实这个还不能算是真正的自动化测试,你见过每次需要运行的时候还需要打开ec ...

  3. win10 uwp 模拟网页输入

    有时候需要获得网页的 js 执行后的源代码,或者模拟网页输入,如点按钮输入文字. 如果需要实现,那么就需要用 WebView ,使用方法很简单. 首先创建一个 WebView ,接下来的所有输入都需要 ...

  4. JavaScript正则表达式之分组匹配 / 反向引用

    语法 元字符:(pattern) 作用:用于反复匹配的分组 属性$1~$9 如果它(们)存在,用于得到对应分组中匹配到的子串 \1或$1 用于匹配第一个分组中的内容 \2或$2 用于匹配第一个分组中的 ...

  5. Memcached查找命令

    Memcached各个查找命令的语法格式都类似,且有相同的参数和参数含义,先将可能出现的各个参数的意义说明如下 key:键值 key-value 结构中的 key,用于查找缓存值. noreply(可 ...

  6. 【SQL注入】mysql中information_schema详解

    在MySQL中,把 information_schema 看作是一个数据库,确切说是信息数据库.其中保存着关于MySQL服务器所维护的所有其他数据库的信息.如数据库名,数据库的表,表栏的数据类型与访问 ...

  7. vuex的简易入门

    p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px "Helvetica Neue"; color: #454545 } p. ...

  8. web service实例

    一.准备工作(以下为本实例使用工具) 1.MyEclipse10.7.1 2.JDK 1.6.0_22 二.创建服务端 1.创建[Web Service Project],命名为[TheService ...

  9. my dream

    我的梦想(践踏一切可以践踏的,放弃一切必须放弃的,然后朝着自己认为的方向努力,只要自己认为对了就可以了(但是最好能考虑方面全一点,这就叫尽力了)我想要的生活怎么那么醉我想要的食物怎么那么碎我最爱的女孩 ...

  10. MFC程序使用GTest搭建测试框架

    一.起源 最近对单元测试比较感兴趣,之后就上网搜了一些测试的框架,C++项目使用的测试框架基本上都使用的GoogleTest,之后就开启了gtest的学习之路. 主要是根据<玩转Google开源 ...