比CRUD多简单(二):基础INSERT、SELECT语句

发布时间:2018-09-07  栏目:w88优德官网电脑版  评论:0 Comments

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

率先是留意NULLw88优德官网电脑版,建表应该避免因此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;

又多好扣押手册

留下评论