数据库增删改查

增加

首先我们创建一个数据库user,然后创建一张表employee

create table employee(

id int primary key auto_increment,

name varchar(20),

gender char(1) default '1',

birthday date,

entry_date date,

job varchar(30),

salary double(7,2) unsigned

);

格式:

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

insert [into] tab_name set 字段名=值;

例子:

#指定字段,需要按照字段进行添加

#往表里插一条记录

insert into employee(name,gender,birthday,entry_date,job,salary) values("Alex",'0','1988-04-01','2017-02-01',"销售部",5000);

#往表里插入多条信息,在values后面添加就可以,之间用逗号隔开,最后加上分号结束。

insert into employee(name,gender,birthday,entry_date,job,salary) values("琳琳",'0',1993-04-01,2018-02-02,"销售部",7000),

("Tom",'0',1995-04-01,2017-06-02,"技术部",13000);

#不指定字段,所有值都需要添加

insert into employee values(9,'小龙','1','1990-08-08','2016-02-08',"技术部",10000);

#通过键值对,多个键值对用逗号隔开

insert into employee set name="大彤";

演示

解决不能插入中文

下面我们要解决一个问题:不能插入中文。

当我们在job这一列插入销售部的时候,查询记录显示为乱码。

将这列的字符集设置为gbk,就可以解决问题

修改

格式:

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

例子:

#将Alex的工资加2000

update employee set salary=salary+2000 where name="Alex";

#将Tom的工资加2000,并且调到python部门

update employee set salary =salary+2000,job="python" where name="Tom";

#将id为10的人调到技术部

update employee set job ="技术部" where id =10;

#将job字段的字符集设置为gbk,以解决不能插入中文的问题

alter table employee modify job varchar(30) character set gbk;

演示

删除

格式:

delete from tab_name [where ....];

例子:

#删除表里所有的记录,一条一条的删除

delete from employee;

#删除这个表,然后重新创建一个新的空表

truncate table employee;

#删除Tom这一条记录

delete from employee where name="Tom";

使用多重判断

#删除叫Alex并且id为6的记录,需要满足这两个条件

delete from employee where name="Alex" and id=6;

#删除id为6或者id为5的记录

delete from employee where id=6 or id=5;

演示

查询

首先我们创建一张表ExamResult,然后往表里添加数据用来演示

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);

格式:

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 ExamResult;

-- 查询表中所有学生的姓名和对应的英语成绩。

select name,JS from ExamResult;

-- 过滤表中重复数据。

select distinct JS ,name from ExamResult;

(2)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;

(3)使用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 值在10到20之间

in(80,90,100) 值是10或20或30

like 'yuan%'

/*

pattern可以是%或者_,

如果是%则表示任意多字符,此例如唐僧,唐国强

如果是_则表示一个字符唐_,只有唐僧符合。两个_则表示两个字符:__

*/

-- 逻辑运算符

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

-- 练习

-- 查询JS分数在 70-100之间的同学。

select name ,JS from ExamResult where JS between 80 and 100;

-- 查询Django分数为75,76,77的同学。

select name ,Django from ExamResult where Django in (75,98,77);

-- 查询所有姓王的学生成绩。

select * from ExamResult where name like '王%';

-- 查询JS分>90,Django分>90的同学。

select id,name from ExamResult where JS>90 and Django >90;

-- 查找缺考数学的学生的姓名

select name from ExamResult where Database is null;

(4)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;

5)group by 分组查询

首先创建一张表order_menu,添加数据用来演示

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;

(6)聚合函数: 先不要管聚合函数要干嘛,先把要求的内容查出来再包上聚合函数即可。

(一般和分组查询配合使用)

--<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)

-- with rollup的使用

(7) 重点:Select from where group by having order by

-- Mysql在执行sql语句时的执行顺序:

-- from where select group by having order by

-- 分析:

select JS as JS成绩 from ExamResult where JS成绩 >70; ---- 不成功

select JS as JS成绩 from ExamResult having JS成绩 >90; --- 成功

(8) limit

SELECT * from ExamResult limit 1;

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

SELECT * from ExamResult limit 2,2;

(9) 使用正则表达式查询

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}';

linux系统中mysql表中能添加中文_数据库学习之数据库增删改查(另外解决Mysql在linux下不能插入中文的问题)(二)...相关推荐

  1. Mysql —— C语言链接mysql数据库,实现可以增删改查的角色权限登录系统

    /******************************************************************** * 标题:C语言链接mysql数据库,实现可以增删改查的角色 ...

  2. 1-1 MySQL数据库的基本操作 【增删改查】

    1-1 MySQL数据库的基本操作 [增删改查] 一.基础操作 创建数据库 查看数据库 选择数据库 删除数据库 二.建立一个基础数据库 三.基本操作 外键约束与字段自增 数据的增删改 数据查询 数据排 ...

  3. asp连接mysql数据库增删查_【ASP】ASP对Access数据库的连接、增删改查及ASP的基本语法...

    本文讨论的是ASP,而不是Visual Studio写出来的.ASPX也就是ASP.NET. ASP不需要任何插件的支持,关键你是配置好WINDOWS的IIS服务器,把页面扔在上面执行就可以了. 不同 ...

  4. Node连接MySQL数据库进行基本的增删改查操作(一看就会)

    Node连接MySQL数据库进行基本的增删改查操作(一看就会) ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ...

  5. nodejs mysql 增删改查_nodejs操作mysql实现增删改查的实例

    首先需要安装mysql模块:npm install mysql --save 然后创建user数据表: 接着使用nodejs对数据库进行增删改查: .[活动]2017 CSDN博客专栏评选 [评论送书 ...

  6. php对mysql进行增删改查,php对mysql进行增删改查

    php对mysql进行增删改查 /* 用户名 : MYSQL_USER 密 码 : MYSQL_PASS 域 名 : MYSQL_HOST 端 口 : MYSQL_PORT 数据库名 : MYSQL_ ...

  7. layui进行分页处理,后端返回数据没有count字段,需要单独获取再添加到数据中,再进行项渲染,另有layui表格数据增删改查前后端交互

    整体效果图如下: (1)分页前端界面处理 (2)分页后端的数据处理 具体代码如下: 前端界面代码:包括分页,增删改查,刷新(搜索功能还没做,后端是java代码) <!DOCTYPE html&g ...

  8. c mysql 添加数据类型_MYSQL的常用命令和增删改查语句和数据类型

    连接命令:mysql -h[主机地址] -u[用户名] -p[用户密码] 创建数据库:create database [库名] 显示所有数据库: show databases; 打开数据库:use [ ...

  9. php mysql表的增删改查,PHP 之Mysql增删改查操作案例

    1:user表: CREATE TABLE `user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(32) NOT NULL, PR ...

  10. mysql查询和修改一个命令_MYSQL的常用命令和增删改查语句

    连接命令:mysql -h[主机地址] -u[用户名] -p[用户密码] 创建数据库:create database [库名] 显示所有数据库: show databases; 打开数据库:use [ ...

最新文章

  1. 浙江大学远程教育计算机应用基础第4次,浙江大学远程教育计算机应用基础5.Powerpoint知识题.docx...
  2. ICCV 2015 《Understanding and Diagnosing Visual Tracking Systems》论文笔记
  3. 顺序三元组 java_三元组顺序结构实现稀疏矩阵相加,行序优先(Java语言描述)
  4. PP视频如何关闭下载完成通知我
  5. leetcode 三数之和 python_16.leetcode题目讲解(Python):最接近的三数之和
  6. Intel 64/x86_64/x86/IA-32处理器标志寄存器详解(5) - 32位EFLAGS - 系统标志
  7. hdu2587(递推)
  8. java可以使用python的库函数_java调用python方法总结
  9. ffmpeg java调用_macos下ffmpeg使用及java调用
  10. 如何提高 Java 中锁的性能
  11. 正则表达式那些事儿(一)
  12. Vue.js学习笔记: 数据绑定语法---绑定表达式
  13. 【git】从零开始在git上部署自己的免费生日祝福网页
  14. 刺客信条3重制版修改器|刺客信条3重制版十项修改器风灵月影版下载
  15. C语言图形库函数easyx下载
  16. 输入输出隔离的半/全双工RS-485/RS-422接口隔离芯片电路
  17. 手摸手。完成一个H5 抽奖功能
  18. 让 Alfred 支持拼音
  19. IAR——使用方法总结
  20. 银行家算法02--申请资源 (操作系统)

热门文章

  1. sqlalchemy 学习笔记(全)
  2. 语雀批量导出MarkDown文件,指定知识库所有内容
  3. 嵌入式DSP开发的定点数和浮点数
  4. JavaEye论坛热点推荐-2009年2月
  5. ffmpeg相关音频转格式命令,用于asr转写实践总结
  6. HTML5前端入门教程:Ajax 异步请求技术
  7. 带头节点反转链表的几种方式(附带gif流程图)
  8. 2022年最新甘肃机动车签字授权人模拟试题及答案
  9. spring-boot 中自动生成 quartz 所需的表
  10. SpringBoot项目下的mvnw与mvnw.cmd