`

Mysql:SQL复习

 
阅读更多

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的话,这几张图是必须要深入理解的。

  • 大小: 28.4 KB
  • 大小: 27.7 KB
  • 大小: 5.8 KB
  • 大小: 9.2 KB
  • 大小: 13.2 KB
分享到:
评论

相关推荐

    sql 复习资料

    总的来说,这个压缩包提供的SQL复习资料是一套全面的学习资源,可以帮助用户从基础到进阶逐步掌握SQL,为日常开发工作或进一步的数据分析打下坚实基础。用户应充分利用这些资源,结合实践,不断提升自己的SQL技能。

    SQL数据库入门(语句)

    无论您是一位 SQL 的新手,或是一位只是需要对 SQL 复习一下的资料仓储业界老将,您就来对地方了。这个 SQL 教材网站列出常用的 SQL 指令,包含以下几个部分: ♦ SQL 指令: SQL 如何被用来储存、读取、以及处理...

    SQL复习资料.zip

    SQL,全称Structured Query ...以上是SQL复习资料的主要知识点,涵盖了数据库的基本操作和查询,对理解并运用SQL进行数据操作至关重要。通过深入理解和实践这些概念,你可以有效地管理、查询和分析关系数据库中的信息。

    北大青鸟S2 5.0 SQL复习题及答案

    在北大青鸟S2 5.0的SQL复习中,学生应深入理解这些概念,并通过大量的练习题来提升自己的SQL技能,以应对实际工作中的各种数据库操作挑战。熟悉并掌握SQL,不仅有助于在IT领域找到好的职业起点,也是后续学习更高级...

    MySQL期末复习材料。。

    MySQL期末复习资料主要涵盖数据库管理系统MySQL的基础知识,包括数据类型、数据库操作、SQL语句、存储程序、事务处理、锁机制以及引擎特性等方面。以下是这些知识点的详细解释: 1. **数据类型**:MySQL中的数据...

    SQL语句复习PPT

    SQL语句复习PPT

    第一次高级mysql复习.sql

    第一次高级mysql复习.sql

    经典SQL练习题(MySQL版).sql

    网上有一篇关于SQL的经典文章,超经典SQL练习题,做完这些你的SQL就过关了,引用和分析它的人很多,于是今天复习SQL的时候找来练了练手。

    关于MySQL数据库期末复习资料

    下面将针对MySQL数据库的期末复习资料进行详尽的阐述。 **数据库基础知识** 数据库是存储和管理数据的系统,它能够帮助我们有序地组织、检索和处理信息。在MySQL中,数据是以表格的形式存储的,每个表格称为一个表...

    SQL 复习资料下载

    这个压缩包提供的"SQL复习资料"很可能是包含练习题、案例分析和讲解文档的集合,可以帮助你系统地复习和提高SQL技能。 总的来说,SQL是任何数据驱动职业的基础,无论你是开发者、分析师还是数据库管理员,都需要...

    sql语言入门教程

    无论您是一位 SQL 的新手,或是一位只是需要对 SQL 复习一下的资料仓储业界老将,您就来对地方了。这个 SQL 教材网站列出常用的 SQL 指令,包含以下几个部分: ♦ SQL 指令: SQL 如何被用来储存、读取、以及处理...

    MYSQL常用基本sql语句总结

    本文档是有关于MySQL的最常用的sql语句,非常的方便查询和复习

    MYSQL数据库复习资料.pdf

    MySQL数据库是一种广泛使用的开源关系型数据库管理系统,它提供了丰富的SQL语句来操作和管理数据。以下是对题目中涉及的一些MySQL知识点的详细解释: 1. `ORDER BY`子句:在SQL查询语句中,`ORDER BY`用于对查询...

    开源bbs源码java-MySQL:关于MySQL相关内容复习

    关于MySQL相关内容复习 MySQL 优化查询的方法?  1.使用索引      应尽量避免全表扫描,首先应考虑在 where 及 order by ,group by 涉及的列上建立索引。 2.优化 SQL 语句      2.1 通过 explain(查询优化...

    《MySQL数据库开发》期末复习题

    " MySQL数据库开发期末复习题" 本文旨在对 MySQL 数据库开发期末复习题的知识点进行总结和解释。 关系数据库约束 填空题 1 所示,关系数据库中行之间的关系是通过约束来实现的。约束是一种机制,用于确保数据的...

    sql-portfolio:SQL任务组合

    总的来说,这个“sql-portfolio”是一个宝贵的资源,无论是对于初学者想要系统学习SQL,还是经验丰富的开发者希望拓宽视野或复习基础知识,都能从中受益。通过实际操作和解决问题,可以更好地掌握SQL语言的核心概念...

    MySQL复习_03_2023.sql

    MySQL复习_03_2023.sql

    MySql常用 SQL语句汇总,共 25 条

    以下是一些常用的MySQL SQL语句,供学习、复习和查阅。 1. **创建数据库** 使用`CREATE DATABASE`语句来创建新的数据库,例如:`CREATE DATABASE my_database;` 2. **选择数据库** 使用`USE`语句来选择要操作的...

    2020最新_Python_(MySQL_SQL_Redis)数据库详解【千锋】源码+课件+笔记.zip

    数据库是存储和管理数据的核心工具,而Python提供了与各种数据库交互的能力,包括MySQL、SQL和Redis等。本教程“2020最新_Python_(MySQL_SQL_Redis)数据库详解【千锋】源码+课件+笔记.zip”涵盖了这些关键知识点,...

    mysql题目练习mysql题目练习sql题.rar

    这份"mysql题目练习sql题.rar"压缩包显然是为帮助用户提升MySQL查询技能而设计的,其中包含了两个文档:SQL练习及答案.word和test.word。 在SQL(结构化查询语言)的学习中,练习是提升技能的关键。SQL练习及答案....

Global site tag (gtag.js) - Google Analytics