表记录的操作

1、插入一条记录

语法:insert [into] tab_name (field1,filed2,.......) values (value1,value2,.......);

insert into employee_new (id,name,birthday,salary) values
(1,'yuan','1990-09-09',9000);
insert into employee_new values
     (2,'alex','1989-08-08',3000);
insert into employee_new (name,salary) values
     ('xialv',1000);

2、插入多条记录

语法: insert [into] tab_name (field1,filed2,.......) values (value1,value2,.......),

                        (value1,value2,.......)

                           ...;
insert into employee_new (id,name,birthday,salary) values
         (4,'alvin1','1993-04-20',3000),
         (5,'alvin2','1995-05-12',5000);

3、按值插入

语法:insert [into] tab_name set 字段名=值

insert into employee_new set id=12,name="alvin3";

语法:delete from tab_name [where ....]

如果不跟where语句则删除整张表中的数据

delete只能用来删除一行记录

delete语句只能删除表中的内容,不能删除表本身,想要删除表,用drop

TRUNCATE TABLE也可以删除表中的所有数据,词语句首先摧毁表,再新建表。此种方式删除的数据不能在事务中恢复。

1、删除所有记录

delete from tab_name
truncate table tab_name  #推荐

注:auto_increment没有被重置,清空表记录后使用命令:alter table tab_name auto_increment=1重置表的自动递增

2、删除指定记录

#删除表中名称为’alex’的记录。
delete from employee_new where name='alex';

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

UPDATE语法可以用新值更新原有表行中的各列。

SET子句指示要修改哪些列和要给予哪些值。

WHERE子句指定应更新哪些行。如没有WHERE子句,则更新所有的行。

#id为1的记录生日改成1989-10-24
update employee_new set birthday="1989-10-24" WHERE id=1;
#将yuan的薪水在原有基础上增加1000元。
update employee_new set salary=salary+4000 where name='yuan';

查(重点)

语法:

SELECT *|field1,filed2 ... FROM tab_name

  WHERE 条件

  GROUP BY field

  HAVING 筛选

  ORDER BY field

  LIMIT 限制条数

准备表记录:

#创建表
CREATE TABLE ExamResult(
id INT PRIMARY KEY auto_increment,
name VARCHAR (20),
JS DOUBLE ,
Django DOUBLE ,
OpenStack DOUBLE
); #插入数据
INSERT INTO ExamResult VALUES (1,"yuan",98,98,98),
(2,"xialv",35,98,67),
(3,"alex",59,59,62),
(4,"wusir",88,89,82),
(5,"alvin",88,98,67),
(6,"yuan",86,100,55);

1、简单查询

#select [distinct] *|field1,field2,......   from tab_name
#其中from指定从哪张表筛选,*表示查找所有列,也可以指定一个列
#表明确指定要查找的列,distinct用来剔除重复行。 -- 查询表中所有学生的信息。
select * from ExamResult;
-- 查询表中所有学生的姓名和对应的英语成绩。
select name,JS from ExamResult;
-- 过滤表中重复数据。
select distinct JS ,name from ExamResult; #select 也可以使用表达式,并且可以使用: 字段 as 别名或者:字段 别名 -- 在所有学生分数上加10分特长分显示。
select name,JS+10,Django+10,OpenStack+10 from ExamResult;
-- 统计每个学生的总分。
select name,JS+Django+OpenStack from ExamResult;
-- 使用别名表示学生总分。
select name as 姓名,JS+Django+OpenStack as 总成绩 from ExamResult;
select name,JS+Django+OpenStack 总成绩 from ExamResult;

2、where子句:条件筛选

-- 查询姓名为XXX的学生成绩
select * from ExamResult where name='yuan';
-- 查询英语成绩大于90分的同学
select id,name,JS from ExamResult where JS>90;
-- 查询总分大于200分的所有同学
select name,JS+Django+OpenStack as 总成绩 from ExamResult where JS+Django+OpenStack>200 ; -- where字句中可以使用:
-- 比较运算符:
> < >= <= <> !=
between 80 and 100 值在80到1000之间
in(80,90,100) 值是80或90或1000
like 'yuan%'
# pattern可以是%或者_,如果是%则表示任意多字符,此例如唐僧,唐国强如果是_则表示一个字符唐_,只有唐僧符合。两个_则表示两个字符:__ -- 逻辑运算符
在多个条件直接可以使用逻辑运算符 and or not

3、order by子句:排序

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

select *|field1,field2... from tab_name order by field [Asc|Desc]
-- Asc 升序、Desc 降序,其中asc为默认值 ORDER BY 子句应位于SELECT语句的结尾。 -- 对JS成绩排序后输出。
select * from ExamResult order by JS;
-- 对总分排序按从高到低的顺序输出
select name ,(ifnull(JS,0)+ifnull(Django,0)+ifnull(Database,0)) 总成绩 from ExamResult order by 总成绩 desc;
-- 对姓李的学生成绩排序输出
select name ,(ifnull(JS,0)+ifnull(Django,0)+ifnull(OpenStack,0)) 总成绩 from ExamResult where name like 'a%' order by 总成绩 desc;

注:ifnull当输出的结果有NULL时候,用0补全,也可以是其他数据,如字符串

4、group by子句:分组显示

准备表记录

#创建表
CREATE TABLE shopping (
id INT PRIMARY KEY AUTO_INCREMENT,
product_name VARCHAR(20),
price FLOAT(6, 2),
born_date DATE,
class VARCHAR(20)
); #插入表记录
INSERT INTO shopping (product_name, price, born_date, class)
VALUES ('苹果', 20, 20170612, '水果'),
('香蕉', 80, 20170112, '水果'),
('冰箱', 1200, 20170112, '电器'),
('被罩', 70, 20170612, '床上用品'),
('音响', 420, 20170612, '电器'),
('电脑', 4200, 20170112, '电器'),
('桃子', 50, 20170112, '水果'),
('床单', 55, 20170112, '床上用品'),
('草莓', 34, 20170612, '水果');

示例

#注,按分组条件分组后每一组只会显示第一条记录
#group by字句,其后可以接多个列名,也可以跟having子句,对group by 的结果进行筛选。 -- 按位置字段筛选,第五个字段class分组
select * from shopping group by 5; -- 对购物表按类名分组后显示每一组商品的价格总和(SUM是聚合函数)
select class,SUM(price)from shopping group by class; -- 对购物表按类名分组后显示每一组商品价格总和超过150的商品
select class,SUM(price)from shopping group by class HAVING SUM(price)>150; #having 和 where两者都可以对查询结果进行进一步的过滤,差别有:
#<1>where语句只能用在分组之前的筛选,having可以用在分组之后的筛选;
#<2>使用where语句的地方都可以用having进行替换
#<3>having中可以用聚合函数,where中就不行。 -- GROUP_CONCAT() 函数:自己看结果
SELECT id,GROUP_CONCAT(product_name),GROUP_CONCAT(price) from shopping GROUP BY id;

5、聚合函数

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)

6、limit子句:限制显示记录条数

 SELECT * from ExamResult limit 1;          #显示第一行记录
SELECT * from ExamResult limit 2,5; #跳过前两条显示接下来的五条纪录
SELECT * from ExamResult limit 2,2; #跳过前两条显示接下来的两条记录

7、正则表达式

SELECT * FROM employee WHERE emp_name REGEXP '^yu';
SELECT * FROM employee WHERE emp_name REGEXP 'yun$';
SELECT * FROM employee WHERE emp_name REGEXP 'm{2}';

数据库 MySQL part2的更多相关文章

  1. MYSQL添加新用户 MYSQL为用户创建数据库 MYSQL为新用户分配权限

    1.新建用户 //登录MYSQL @>mysql -u root -p @>密码 //创建用户 mysql> insert into mysql.user(Host,User,Pas ...

  2. Robot Framework-DatabaseLibrary数据库(MySql)

    Robot Framework-Mac版本安装 Robot Framework-Windows版本安装 Robot Framework-工具简介及入门使用 Robot Framework-Databa ...

  3. paip.导入数据英文音标到数据库mysql为空的问题之道解决原理

    paip.导入数据英文音标到数据库mysql为空的问题之道解决原理 #---原因:mysql 导入工具的bug #---解决:使用双引号不个音标括起来. 作者 老哇的爪子 Attilax 艾龙,  E ...

  4. paip.解决 数据库mysql增加列 字段很慢添加字段很慢

    paip.解决 数据库mysql增加列 字段很慢添加字段很慢 #环境如下: mysql5.6    数据仅仅3w alter table xxx add column yyy int default ...

  5. Sqoop是一款开源的工具,主要用于在HADOOP(Hive)与传统的数据库(mysql、oracle...)间进行数据的传递

    http://niuzhenxin.iteye.com/blog/1706203   Sqoop是一款开源的工具,主要用于在HADOOP(Hive)与传统的数据库(mysql.postgresql.. ...

  6. 数据库MySQL多个数据库服务冲突

    一.目标名称 MySQL 二.目标版本 mysql-5.6.24-win32.1432006610.zip 三.环境信息 系统:windows 7 旗舰版 防火墙:关闭  —— 注意:如果防火墙不关闭 ...

  7. paip.将数据导入到在英语语音数据库mysql道路解决空原则问题

    paip.将数据导入到在英语语音数据库mysql道路解决空原则问题 #---原因:mysql 导入工具bug #---解决:不要使用双引号括注音. 笔者 老哇爪 Attilax 艾龙.  EMAIL: ...

  8. Yii Framework2.0开发教程(5)数据库mysql性能

    继续<Yii Framework2.0开发教程(3)数据库mysql入门> 首先给予一定的尊重yii2数据库支持引进 Yii 基于 PHP's PDO一个成熟的数据库访问层的建立.它提供了 ...

  9. cpanel导入大数据库(mysql)的方法

    phpmyadmin是一件很方便的在线管理MySQL数据库的工具,但对于较大的数据库的导出和导入却很容易出错.特别是导入工作,通常5M已经是它的极限了.这里,主要介绍一下如何通过cPanel导入大型的 ...

随机推荐

  1. IOS 录音(AVAudioRecorder)

    #import "HMViewController.h" #import <AVFoundation/AVFoundation.h> @interface HMView ...

  2. 记一次MySQL手工注入

    本来想找个装安全狗的站试下绕过,safe dog没找到,但随便一搜搜到一个小站有SQLi,正好借此机会复习下手工注入(新版Firefox我吐槽一下,hackbar这么好用的工具,说阉割就阉割,哎) 小 ...

  3. 关于message pack as3 版本的一些修改。

    玩个人项目的时候,根据前辈的推荐开始用messagepack,分别是py版和as3版: 然后在github上找到了demonsters的as3模块,于是颠屁颠屁地拿来用了,用的时候发现了一些小地方过不 ...

  4. ASP.NET Web API 自定义MediaType实现jsonp跨域调用

    代码来自<ASP.NET Web API 2 框架揭秘>一书. 直接上代码: /// <summary> /// 自定义jsonp MediaType /// </sum ...

  5. stixel-net绘制指标图

    需解决问题: 1.离散点进行平滑曲线画法 https://blog.csdn.net/cdqn10086/article/details/70143616 def draw_curve(x,y,img ...

  6. 我的wmware

    1.vmware 网络连接方式 NAT 模式: 虚拟机的IP 是由NAT分配的,电脑环境无论如何变化,都不会影响虚拟机 好处:在家.学校.公司,连接虚拟机都可以使用相同的ip地址 桥接模式: 只要更换 ...

  7. linux dentry cache 转自:http://blog.csdn.net/denzilxu/article/details/9188003

    Linux dentry cache学习 每个dentry对象都属于下列几种状态之一: (1)未使用(unused)状态:该dentry对象的引用计数d_count的值为0,但其d_inode指针仍然 ...

  8. nineoldandroid 详细使用并且实现drawerlayout侧滑动画

    nineoldandroid.view.ViewHelpe是一个为了兼容3.0以下的一个动画开源库 相关函数解读:(第一个参数都为动画对象,第二个为动画属性值的变化表达式) ViewHelper.se ...

  9. 用c#语言编写银行利率

    sing System;using System.Collections.Generic;using System.Linq;using System.Text; namespace ConsoleA ...

  10. JavaScript自己整理的基础-01

    1.JavaScript 简介: JavaScript是互联网上最流行的脚本语言,所有现代的HTML都使用JavaScript.既然是脚本语言,那么它的特点就有一下三种: (1)弱类型: (2)解释型 ...