比CRUD多点滴(二):基础INSERT、SELECT语句

GoogleEarth截图

立刻是MySQL系列笔记的首先片,本系列笔记希望会随笔者自己学习MySQL技术的阅历来记录,避免纯粹以内容千篇一律片一样块总结,也即是殊为一般照内容分配章节的书的布局,有一个坦荡的看曲线。内容比较丰富的技能点会按照专题在多独上学笔记中日渐深入。

立马有些之题目为比CRUD多一丁点儿,比打最基础之w3c的SQL教程之外,只多一些之恢弘,满足应付从纯阅读入门资料及可上手成功一个简约的做事之要求。

其次首的关键内容是基础SQL语句,会基于自身工作负之更,每个语句多介绍一些事实上支付中比较泛的用法。

SQL是同等栽编程语言

SQL是Structure Query Language的简写。SQL并无只是用来和数据库,而是同种完备编程语言,在各种编程语言排行榜上呢都是第一流。SQL语言的史与C语言一样长,从1970年Codd博士将数据库领域逐步发扬光大至今近半个世纪,已经得以算编程语言中的老人了。笔者觉得伴随在关系数据库(RDBMS)产生的SQL语言就软件底层技术之逐步成熟,软件应用日益渗透到活一切,软件开发教育啊愈来愈普及(比如前段时间有江苏省业已将Python语言列入高考),未来也许控制SQL语言的工程师会远多于掌握C语言的工程师。

与其他语言类,SQL有专业组织出具的正式,但不同的数据库也发出自己之两样的贯彻。可类比较也各种语言有协调的专业,也有差的编译器(或解释器等)的落实,相信做C++开发的还见面于微软的VC编译器和GNU组织的GCC编译器的细微不同而抑郁的涉。这个题目在SQL语言领域应有是又要命一部分,不同的数据库SQL实现有未聊的分别,但中心的看SQL语言可以分成三类:

  • DML(Data Manipulation
    Language):数据操纵语词,用户增删查改数据库记录,包括insert, select,
    update, delete,也尽管是咱们文章标题中常说CRUD(create read update
    delete)时候指代的及时四单话。可能入门学习时一般说的SQL就是据这种类型的。本篇基础SQL语句实际上呢只有见面介绍此类。

  • DDL(Data Definition
    Language):数据定义语言,定义数据库、数据表、列、索引等。包括create,
    drop, alter等。

  • DCL(Data Control
    Language):数据控制语句,用于控制不同数额的访权限,配置密码等。暴扣grant,
    revoke。

正文下来分别介绍DML中之INSERT,SELECT,UPDATE,DELETE

INSERT语句

顶简便易行的款型如下:

insert into table_name(id, cardno, `name`, `desc`) values('1', 100001, "good", "good boy");  

先是个括号里是列名,第二只括号里是针对许顺序的价。

一样不成栽多漫漫数据:

insert into table_name(id, cardno, `name`, `desc`) values('1', 100001, "good", "good boy"),('2', 100002, "bad", "bad girl"); 

差一点独常见Tip

顺便说几只常见的小问题,在面的写法里涌出的:

  • 表名和列名可以用“`做转移符,用途是当列名和表名为desc,select这种SQL的重要性字和保留字时候必须使,否则是会报语法错误的。
  • 至于保留字和重要性字不同,比如select凡是重大字,desc凡保留字现实但拘留手册。实际上人脑也未会见记得这些重点字,所以于动上就是净下转义就哼了。学海无涯,每种技术之缩写、特例等等层出不穷,笔者之惯是记一样种比较通用和安康之用法,始终去采用即可。因为许多技术点的有余办法吧是同样起技艺进步之史由来导致的,并无是说都记在多智见面发生切实的现象。如果表自己创立时候,推荐的做法尽管还是如过一样全上述链接中之保留字,直接不要动这些词为好,毕竟是选项名字的时空以建表做设计阶段总的时刻比较起来连无会见占据小比例。笔者遇到的有的ORM库之类对这些主要字或连无是处理的十均十美,所以不要是顶尖。
  • 不断字符型,其实有插入内容实在都足以为此'引起来。用'不用"再有一个好用之地方是当输入字符串里面来双引号"时光,可以无让写一级转义。
  • 表常常会来自增ID,其实被装为自增的id也是得于insert和update时候指定的,只是当不借助于定值时候才见面自增。

INSERT INTO … SELECT 用法:

当时是杀常用之技艺,当进行数据导入时候会遇见插入的多寡要由旁一个表中获取,可以使用insert into ... select的写法。

比如有供应商和消费者两布置表,有一部分排列内容是重合的,就如下写法

INSERT INTO Customers (CustomerName, City, Country)
SELECT SupplierName, City, Country FROM Suppliers;

可只顾,在statement-based的共同中,这种话是并无安全之。类似的用法还有
INSERT … ON DUPLICATE KEY UPDATE , INSERT
IGNORE。可以拘留手册中之详尽介绍。

SELECT语句

尽基础的不再赘述,SELECT用法的情尽丰富,后续会特别起一个修。这里说几只常见的Tips。

关于NULL

率先是留意NULL,建表应该避免因此NULL值,所有列都可以授予一个默认值。因为NULL在SELECT、索引、统计函数等重重场所都见面发一部分给人Surprise的景象,后续可能会见独自写一篇有关NULL的博客。

查找NULL时候用IS NULL,
IS NOT NULL,如果NULL值需要转移,需要因此好关于NULL的几单函数IFNULL(),
ISNULL(), COALESCE()

  • IFNULL(exp,value)可据此在讲话中代替exp的职位,表示当exp不也NULL时候利用value中的价替代。
  • ISNULL(exp) 做逻辑判断
  • COALESCE(....)函数发展历史是单多值函数,意思是归就基本上个参数中仍顺序第一只非NULL的价。

ANY和ALL

当各种操作符号而>,<,=晚下ANY和ALL可以表示任意一个和享有的意。

遵查询比任意Alert表中id大的Account表值:

select id from Account where id > ANY (select id from Alert);

依照查询比自己的id还格外之(\_结果当然是没)

select id from Account where id > ALL (select id from Account);

GROUP BY

GROUP
BY的核心用法比较泛,但统计函数除了count,sum等还有几独常因此之聚合函数(Aggregate
Function)。

接连函数 group_concat会将分组内之价组装为一个逗号分隔的数组

select ag.id, ag.name, group_concat(a.id) as resource_ids from AccountGroup ag left join AccountGroup_Account aga on ag.id=aga.account_group_id left join Account a on aga.account_id=a.id group by ag.id;

回会是看似

+----+------------------------------------+--------------+
| id | name                               | resource_ids |
+----+------------------------------------+--------------+
|  1 | admin                              | 1,2,3        |
+----+------------------------------------+--------------+

count函数可以加distinct表示去还

SELECT COUNT(DISTINCT results) FROM student;

重多足看手册

发表评论

电子邮件地址不会被公开。 必填项已用*标注