MySQL语句之数据的增删改查
1、插入记录insert
语法:INSERT INTO tablename (field1,field2,……fieldn) VALUES(value1,value2,……valuesn);
也可以一次性插入多条记录,每条记录之间用逗号分隔,语法如下:
INSERT INTO tablename (field1, field2,……fieldn)
VALUES
(record1_value1, record1_value2,……record1_valuesn),
(record2_value1, record2_value2,……record2_valuesn),
……
(recordn_value1, recordn_value2,……recordn_valuesn);
例如:mysql> insert into dept values(1,'tech'), (2,'sale'), (5,'fin'), (5,'dept5'), (6,'dept6');
2、删除记录delete
语法:DELETE FROM tablename [WHERE CONDITION]
可以一次删除多个表的数据,语法如下:
DELETE t1,t2…tn FROM t1,t2…tn [WHERE CONDITION]
注意:如果from 后面的表名用别名,则delete 后面的也要用相应的别名,否则会提示语法错误。
例如,将表emp 和dept 中deptno 为3 的记录同时都删除,命令如下:
mysql> delete a,b from emp a,dept b where a.deptno=b.deptno and a.deptno=3;
3、更新记录update
语法:UPDATE tablename SET field1=value1,field2=value2,……fieldn=valuen [WHERE CONDITION]
例如:mysql> update emp set deptno=3 where ename='angel';
可同时更新多个表中的数据,语法如下:
UPDATE t1,t2…tn set t1.field1=expr1,tn.fieldn=exprn [WHERE CONDITION]
例如:mysql> update emp a,dept b set a.sal=a.sal*b.deptno,b.deptname=a.ename where a.deptno=b.deptno;
4、查询记录select
语法:SELECT * FROM tablename [WHERE CONDITION]
(1)查询不重复的记录distinct
mysql> select distinct deptno from emp;
(2)条件查询where
mysql> select * from emp where deptno=2;
(3)排序order by和限制limit
排序:升序asc,降序desc,默认不写是asc
例如,按照部门升序,薪水降序排列,命令如下:
mysql> select * from emp order by deptno,sal desc;
限制:SELECT ……[LIMIT offset_start,row_count]
例如,按照薪水升序,显示前两条记录,命令如下:
mysql> select * from emp order by sal limit 2;
如果要显示emp 表中按照sal 排序后从第二条记录开始,显示3 条记录:
mysql> select * from emp order by sal limit 1,3;
limit 经常和order by 一起配合使用来进行记录的分页显示。
(4)聚合
语法:SELECT [field1,field2,……fieldn] fun_name
FROM tablename
[WHERE where_contition]
[GROUP BY field1,field2,……fieldn
[WITH ROLLUP]]
[HAVING where_contition]
对其参数进行以下说明:
fun_name 表示要做的聚合操作,也就是聚合函数,常用的有sum(求和)、count(*)(记录数)、max(最大值)、min(最小值)。
GROUP BY 关键字表示要进行分类聚合的字段,比如要按照部门分类统计员工数量,部门就应该写在group by 后面。
WITH ROLLUP 是可选语法,表明是否对分类聚合后的结果进行再汇总。
HAVING 关键字表示对分类后的结果再进行条件的过滤。
注意:having 和where 的区别在于having 是对聚合后的结果进行条件的过滤,而where 是在聚合前就对记录进行过滤,如果逻辑允许,我们尽可能用where 先过滤记录,这样因为结果集减小,将对聚合的效率大大提高,最后再根据逻辑看是否用having 进行再过滤。
例如,要emp 表中统计公司的总人数:mysql> select count(1) from emp;
要统计各个部门的人数:mysql> select deptno,count(1) from emp group by deptno;
既要统计各部门人数,又要统计总人数:mysql> select deptno,count(1) from emp group by deptno with rollup;
统计人数大于1 人的部门:mysql> select deptno,count(1) from emp group by deptno having count(1)>1;
最后统计公司所有员工的薪水总额、最高和最低薪水:mysql> select sum(sal),max(sal),min(sal) from emp;
(5)表连接
从大类上分,表连接分为内连接和外连接,它们之间的最主要区别是內连接仅选出两张表中互相匹配的记录,而外连接会选出其他不匹配的记录。
我们最常用的是内连接。
例如,查询出所有雇员的名字和所在部门名称,因为雇员名称和部门分别存放在表emp 和dept 中,因此,需要使用表连接来进行查询:
mysql> select ename,deptname from emp,dept where emp.deptno=dept.deptno;
外连接有分为左连接和右连接,具体定义如下:
左连接:包含所有的左边表中的记录甚至是右边表中没有和它匹配的记录。
右连接:包含所有的右边表中的记录甚至是左边表中没有和它匹配的记录。
例如,查询emp 中所有用户名和所在部门名称:
mysql> select ename,deptname from emp left join dept on emp.deptno=dept.deptno;
mysql> select ename,deptname from dept right join emp on dept.deptno=emp.deptno;
(6)子查询:用于子查询的关键字主要包括in、not in、=、!=、exists、not exists 等。
例如:mysql> select * from emp where deptno in(select deptno from dept);
可转化为表连接:mysql> select emp.* from emp ,dept where emp.deptno=dept.deptno;
(7)记录联合(用union 和union all 关键字)
语法:SELECT * FROM t1
UNION|UNION ALL
SELECT * FROM t2
……
UNION|UNION ALL
SELECT * FROM tn;
UNION 和UNION ALL 的主要区别是UNION ALL 是把结果集直接合并在一起,而UNION 是将UNION ALL 后的结果进行一次DISTINCT,去除重复记录后的结果。
例如,将emp 和dept 表中的部门编号的集合显示出来:
mysql> select deptno from emp
-> union all
-> select deptno from dept;
如果希望将结果去掉重复记录后显示:
mysql> select deptno from emp
-> union
-> select deptno from dept;
MySQL语句之数据的增删改查的更多相关文章
- Mysql入门-对表数据的增删改查
这一部分是最简单的,也是最麻烦的.简单是因为其实只包括增删该插四个部分.大体上看,增加数据.删除数据.修改数据.查询数据都不麻烦啊,我们日常都是常用的.这个谁不会呢?以前在培训机构学mysql的时候, ...
- mysql详解常用命令操作,利用SQL语句创建数据表—增删改查
关系型数据库的核心内容是 关系 即 二维表 MYSQL的启动和连接show variables; [所有的变量] 1服务端启动 查看服务状态 sudo /etc/init.d/mysql status ...
- Node.js + MySQL 实现数据的增删改查
通过完成一个 todo 应用展示 Node.js + MySQL 增删改查的功能.这里后台使用 Koa 及其相应的一些中间件作为 server 提供服务. 初始化项目 $ mkdir node-cru ...
- Django框架之第二篇--app注册、静态文件配置、form表单提交、pycharm连接数据库、django使用mysql数据库、表字段的增删改查、表数据的增删改查
本节知识点大致为:静态文件配置.form表单提交数据后端如何获取.request方法.pycharm连接数据库,django使用mysql数据库.表字段的增删改查.表数据的增删改查 一.创建app,创 ...
- mysql学习笔记一 —— 数据的增删改查
1.连接mysql mysql 直接回车(是以root身份,密码空,登陆的是本机localhost) [root@www mysql]# mysql -uroot -p123 -S /var/lib/ ...
- Mybatis框架基于注解的方式,实对数据现增删改查
编写Mybatis代码,与spring不一样,不需要导入插件,只需导入架包即可: 在lib下 导入mybatis架包:mybatis-3.1.1.jarmysql驱动架包:mysql-connecto ...
- MyBatis学习(二)、SQL语句映射文件(2)增删改查、参数、缓存
二.SQL语句映射文件(2)增删改查.参数.缓存 2.2 select 一个select 元素非常简单.例如: <!-- 查询学生,根据id --> <select id=" ...
- MyBatis学习 之 二、SQL语句映射文件(2)增删改查、参数、缓存
目录(?)[-] 二SQL语句映射文件2增删改查参数缓存 select insert updatedelete sql parameters 基本类型参数 Java实体类型参数 Map参数 多参数的实 ...
- MYSQL - database 以及 table 的增删改查
MYSQL - database 以及 table 的增删改查 MySQL的相关概念介绍 MySQL 为关系型数据库(Relational Database Management System), 这 ...
随机推荐
- Delphi 2010 secondsBetween Bug
在设置定时任务时,无意之间发现一个BUG, 定时在00:10:00的任务,执行了2次, 百思不得其解, 一调试发现, 00:10:00,00:09:59的secondsBetween结果值是0, 正确 ...
- Codeforces Round #596 Div1 A~E题解
我好菜啊 A 题意: 定义p-二进制数为2^k-p,给出n和p,求用最小个数的p-二进制数来表示n 1<=n<=10^9,-1000<=p<=1000 题解: 猜结论,答案不会 ...
- 【rust】rust安装,运行第一个Rust 程序 (1)
安装 Rust 在 Unix 类系统如 Linux 和 macOS 上,打开终端并输入: curl https://sh.rustup.rs -sSf | sh 回车后安装过程出现如下显示: info ...
- 【bzoj4137】[FJOI2015]火星商店问题
*题目描述: 火星上的一条商业街里按照商店的编号1,2 ,…,n ,依次排列着n个商店.商店里出售的琳琅满目的商品中,每种商品都用一个非负整数val来标价.每个商店每天都有可能进一些新商品,其标价可能 ...
- 《SQL Server 2012 T-SQL基础》读书笔记 - 7.进阶查询
Chapter 7 Beyond the Fundamentals of Querying window function是什么呢?就是你SELECT出来一个结果集,然后对于每一行,你都想给它对应一个 ...
- idea中svn代码冲突
1.鼠标右键点击项目根目录 --> 2.选择 subversion --> 3.resolve Text Confict --> 4.merge 手动编辑冲突部分,解决后就能正常提交 ...
- telnet测试端口是否打开?
如何测试远程服务器的某个端口是否打开? 例如: telnet 192.168.1.1 5000 返回: Trying 127.0.0.1...Connected to 127.0.0.1.Escape ...
- JavaVM & JNIEnv
JNIEnv提供了大多数的JNI函数.你的本地方法都会接收JNIEnv作为第一个参数.JNIEnv用于本地线程存储.因此,你不能在线程间共享同一个JNIEnv.如果一个代码段没有其他方式获取它自身线程 ...
- ORACLE权限管理—创建只读账号
创建只读用户:grant connect to user; grant create session to user; 1.创建角色 CREATE ROLE SELECT_ROLE 2.给角色分配权限 ...
- 基于Skyline的web开发(6.x)
多窗口对比 一个页面加载多个TerraExplorer3DWindow和SGWorld等只有第一个能用(即使用iframe也是一样) 所以我决定打开两个新页面实现多窗口对比,然后我在<主页面&g ...