Mysql:SQL复习
本文是周末在家为了复习SQL总结而写。
SQL语法如果经常使用的话不会是问题,但是如果你是使用客户端的话例外。我现在操作SQL都是直接使用mysql连接,而不是使用可视化客户端。对于开发人员来说,熟练能够手写CRUD操作是个基本的能力。本文最后会附上MySql的中文翻译文档,如果对文档有疑问的地方,可以直接查询官网: http://dev.mysql.com/doc/refman/5.6/en/,对于基本操作来说,Mysql所有版本都支持。
我们先看下select的用法:
这种表示方式确实很有意思,但是看起来还是有点乱。将其中主要的部分摘出来,能够更清晰的理解:
select select_expr [, select_expr] from tbl where where_condition group by col_name asc [, col_name desc] having where_condition order by col_name asc [, col_name desc] limit offset
这个是比较完整的select语法,当然根据上图还有更细致的语法,不过那些用法比较高级。如果不是DBA的话,比较少用到,这里暂时不讨论。
我们使用一个完整的SQL来解释一下:
select author,book,count(*) count from purchase where state='active' and living in ('dead','live') group by author, book having count > 10000 order by count desc limit 10
查询在售最畅销的作家和书籍前十名。其中group by把author和book的数量统计出来,having过滤数量超过10k的作家,按照出版数目降序排列;我们只是关心畅销前十名。Ok,这个SQL有了基本SQL的全部元素,并且功能很清楚。在写SQL时,最重要的是SQL的where条件后面的部分,不管是Delete、Query还是Select,where后面的条件就决定了SQL功能的复杂程度,所以,熟练掌握SQL where后面的内容是很重要的。
注意这个查询结果是个临时表,但是既然是表,当然可以将查询结果作为临时表继续迭代查询:
select u.userid,u.username,u.loan,a.address from user u, (select userid,address from address) a where u.userid = a.userid
注意其中的address表,就是作为临时表,为最后的查询结果提供支持。
如果查询多个表的话,通常的做法是将各个表重新命名,并且在查询结果列中点明这一列的来源,即这一列来自于哪个表的这个字段。
如user表和address表中都有useid字段,我们在最后的结果集合中点明是user表中useid。如果没有点明是来自于哪个表中,列名唯一则能正确查询,列名有重复的话,SQL将不知道你最终的结果集是哪个表中的列。一般来说,只要牵扯到多个表连接查询的话,重命名表名和精确定义结果集是通常的做法,至少我一直是这么做的。
看select完整的语法中有个distinct字段,这个表示将查询出来的结果去重:
select distinct book, author from purchase;
where后面的语法不受影响,注意distinct后面支持多个列,表示这些列的数据唯一。
下面我们学习下插入insert的用法,插入形式有多个表示形式:
其中最常见的是前两种插入操作,示例如下:
insert into tbl(col1,col2) values("gw","wtf"); insert into tbl set col1="gw",col2="wtf";
最后一种insert操作实际是是将数据从其它的表中导入到当前表:
insert into tbl(col1,col2.col3) select col1,col2,col3 from tbl2;
后面的select语句未必是将从单个表中取数据,这个select是符合select语法的;也可以从多个表中获取。
提到insert操作,就不能不提下replace操作,这个replace操作可能会有人不是特别熟悉:
replace操作和insert操作的语法一致。Replace操作和Insert操作不一致的地方有:
1:Replace是SQL标准的扩展;
2:Replace操作有两种形式:或者insert,或者delete后insert;
解释下第二个不同点。如果你插入的数据列里,有主键(primary key)或者唯一索引(unique index),使用replace时会先检查主键数据是否存在,如果不存在就插入;如果存在就更新主键唯一标识的这条数据。如果你插入的数据里没有主键或者唯一索引,SQL引擎无法判断这条数据是不是唯一,所以在这种情况下,replace等同于insert。
下面我们学习删除delete语法,delete算是比较简单,根据where条件选中满足行,直接删除:
我们看下得了delete操作:
delete from user where 1 <> 2;
对于delete删除语句,也支持多表操作,同时从多张表中删除数据:
使用multi-delete时,可以使用下面两种格式:
delete t1,t2 from t1,t2,t3 where t1.id=t2.id and t1.id=t3.id delete t1,t2 using t1,t2,t3 where t1.id=t2.id and t1.id=t3.id
从多个表(t1,t2,t3)查询结果中,删除固定表(t1,t2)中的数据,这个比较容易理解,两者的功能一样。
如果你不带where条件,想清除整张表的数据的话,可以使用truncate语句
truncate tbl
truncate语法比delete语法更快,效率更高;注意是在想清除整张表数据的情况下。如果有where语句的话,不能使用truncate语法。
下面我们看下更新Update操作:
对于单表操作,更新操作比较简单,图片描述的是全的update SQL。
对于多表操作的更新,我以前也没有注意过,关键是很少这样更新,这次也算是多学习了点:
UPDATE items,month SET items.price=month.price WHERE items.id=month.id;
在进行多表更新操作时,不能有order by和limit限制,只能按照上面图片中多表更新里面的语法。
更新操作时,如果想同时更新某一列的值,可以这么做:
update t set id = id + 1 where id > 10;
本节SQL的复习内容就到这里,重点是上面提到的那几张图,完整的语法全部在几张图里。如果想深入学习SQL的话,这几张图是必须要深入理解的。
相关推荐
无论您是一位 SQL 的新手,或是一位只是需要对 SQL 复习一下的资料仓储业界老将,您就来对地方了。这个 SQL 教材网站列出常用的 SQL 指令,包含以下几个部分: ♦ SQL 指令: SQL 如何被用来储存、读取、以及处理...
SQL语句复习PPT
第一次高级mysql复习.sql
网上有一篇关于SQL的经典文章,超经典SQL练习题,做完这些你的SQL就过关了,引用和分析它的人很多,于是今天复习SQL的时候找来练了练手。
无论您是一位 SQL 的新手,或是一位只是需要对 SQL 复习一下的资料仓储业界老将,您就来对地方了。这个 SQL 教材网站列出常用的 SQL 指令,包含以下几个部分: ♦ SQL 指令: SQL 如何被用来储存、读取、以及处理...
本文档是有关于MySQL的最常用的sql语句,非常的方便查询和复习
关于MySQL相关内容复习 MySQL 优化查询的方法? 1.使用索引 应尽量避免全表扫描,首先应考虑在 where 及 order by ,group by 涉及的列上建立索引。 2.优化 SQL 语句 2.1 通过 explain(查询优化...
MySQL复习_03_2023.sql
对SQL的相关复习,还不错,主要是:针对优化MySql的复习,可以多看看。特别是考试时简约的复习特有效。
整理了mysql的基本操作 和 练习手册. 具体目录: 一 复习前的准备 二 基础知识: 1.数据库的连接 2:库级知识 3: 表级操作: 3.1 显示库下面的表 3.2 查看表的结构: 3.3 查看表的创建过程: 3.4 创建表: 3.5 修改表 4:列...
mysql复习的sql文件 mysql复习的习题 mysql重要的思维导图
mysql数据库基础视频178讲,包括视频、sql脚本、ppt、以及复习资料
50道经典SQL练习题,练手和复习都很不错 关于 这个项目主要来源是之前在网上流传的50道SQL练习题,大小问加起来50道左右,在不断流传的过程中也会有差异,我看到的最早来源是 使用项目 原版用的是Sql Server,在这里...
MySQL基础复习资料超级详细.xmind
本资源包含25 条常用 SQL语句汇总,适用于初中高级后端程序员,非常适合个人学习、复习、查阅使用!
mysql基础复习思维导图
博文链接:https://hongan.iteye.com/blog/224129
2.复习有关 SQL 语言中 SELECT 命令的使用; 3.了解有关 MySQL 系统的组成; 4.了解有关 MySQL 服务器的使用和管理; 5.了解有关 Navicat for MySQL 的基本操作; 6.了解有关数据库备份和恢复的基本操作;...
对sql语句的学习,复习都有帮助。 SQL 概述 SQL,一般发音为 sequel,SQL 的全称 Structured Query Language),SQL 用来和数据库打交道,完成和数据库的通信,SQL 是一套标准。但是每一个数据库都有自己的特性别的...
全面的复习sql语法,及常用的写法,面试前全面攻克sql的宝典!