SQL,从零基础到入门

本章目录

  • 如何安装MySQL数据库及MySQL Workbench
  • 启动MySQL的3种方式
  • 获取样本数据库
  • 创建数据库
  • SQL书写建议
  • 一些约定俗成的规矩
  • 关系型数据库的关键概念

简单的准备工作

本教程所有实例基于 Windows 操作系统,Mac OS 用户也不必感到沮丧,因为无论你的操作系统是什么,都不会对你学习SQL有多好或多坏的影响,只不过环境不同罢了。

在开始学习前,我们需要准备好必备的“工具”,正所谓“工欲善其事必先利其器”。想想需要什么呢?很简单,一是数据库,二是数据。因为SQL(Structured Query Language)是与数据库交流的语言嘛(o)/~

数据库

本教程采用MySQL,一种由Oracle开发并被广泛应用的关系型数据库管理系统(RDBMS)。有同学要问,难道不可以用其他“软件”吗?当然可以,不同的RDBMS语法之间只有微小的差别,主要看你的应用场景,之所以采用MySQL,是因为它足够常见,容易获取。

如何安装MySQL是件很简单的事情,网上有很多教程和资料,在此不作赘述。但很简单不代表你不会遇到问题,只要保持耐心,通常可以很快找到解决办法。如果部分问题被普遍反映,我会考虑补上这部分的教程。

如何与MySQL互动?通常有三种方式:

1.CMD命令行

在Windows中配置MySQL环境变量后,可在CMD命令行中直接启用MySQL。

在命令行中启动MySQL

如果出现以下错误提示,那是因为你没有在系统服务中启用MySQL服务。

ERROR 2003 (HY000): Can't connect to MySQL server on 'localhost' (10061)

解决方法:

右键 → 我的电脑 → 管理 → 服务和应用程序 → 服务 → 启动MySQL

2.MySQL Command Line Client

Client是MySQL程序自带的命令行工具,与系统命令行唯一的区别是直接输入管理员密码即可启动MySQL.

3.MySQL Workbench

Workbench是MySQL的可视化交互工具(GUI),提供数据库查询、建模、管理等丰富功能,也是我建议新人使用的,因为它足够友好。在接下来的实例演示中,我都会采用Wordbench(Mac OS用户可使用Sequel Pro)

数据

本教程教学部分数据采用《SQL必知必会》中的玩具经销商订单录入系统。包含以下几张表(Table):

  • customers
  • orderitems
  • orders
  • products
  • vendors
数据库中的表

新手需要注意的是,在进行数据库表查询前,不要忽略选择数据库这一步。一旦忽略就会出现以下错误提示:

ERROR 1046 (3D000): No database selected

与其同样重要的有:

  • 创建数据库
  • 删除数据库
  • 创建表
  • 删除表

其语法(Syntax)分别是:

CREATE DATABASE 数据库名
DROP DATABASE 数据库名
CREATE TABLE 表名
DROP TABLE 表名

以上操作要谨慎,因为任何一个组织的数据库都不会允许随意创建,特别是删除,会有严格的权限管理。当然,练习数据不用这么小心翼翼。

以下链接是玩具经销商订单录入系统的脚本,点击即可下载。

SQL scripts for MySQL

下载解压后,你将获得2个txt文档,看后缀就知道,它们是无法直接执行的sql脚本,但只需两步,你就可以搭建好一个简单的数据库,开始正式学习了!

TeachYourselfSQL_MySQL
  • 创建并命名数据库,然后选中它(我把它命名为“princess”)

  • 按顺序分别将create和populate里的数据在Workbench中执行(Shift+Ctrl+Enter)

  • 测试你是否成功创建了目标数据库

如果大功告成,当你检索数据库中的表时,就会得到以下数据:

mysql> USE princess;
Database changed
mysql> SHOW TABLES;
+--------------------+
| Tables_in_princess |
+--------------------+
| customers          |
| orderitems         |
| orders             |
| products           |
| vendors            |
+--------------------+
5 rows in set (0.00 sec)

书写建议

由于SQL不区分大小写且忽略所有空格,所以如何书写只是个人习惯问题。但你还是有必要从一开始就养成良好的书写习惯,因为这可以极大地方便阅读和调试。在实际业务中,一个上百行的sql脚本并不少见,如果你不希望别人丢给你一堆不知所云的东西,那么就要先从自己做起,这是在节省大家的时间。

  • 除关键字(Keyword)外,所有名称保持小写

  • 分多行书写且适当应用缩进(制表符)

下面是我一段我心目中觉得可称之为简洁而优雅的sql代码,可供参考。

-- -----------------------------------------
-- Sams Teach Yourself SQL in 10 Minutes
-- http://forta.com/books/0672336073/
-- Example table creation scripts for MySQL.
-- -----------------------------------------


-- ----------------------
-- Create Customers table
-- ----------------------
CREATE TABLE Customers
(
  cust_id      char(10)  NOT NULL ,
  cust_name    char(50)  NOT NULL ,
  cust_address char(50)  NULL ,
  cust_city    char(50)  NULL ,
  cust_state   char(5)   NULL ,
  cust_zip     char(10)  NULL ,
  cust_country char(50)  NULL ,
  cust_contact char(50)  NULL ,
  cust_email   char(255) NULL 
);

没错,以上就是原作者Forta创建数据库表Customers的代码,注释简洁,信息明确。读者可以快速捕捉代码中的关键信息和补充信息而毫不费力。

一些约定俗成的规矩

  • 注释

SQL与其他语言的共同之处在于,同样允许使用单行注释和多行注释。注释是指被注释的部分并不会被当做代码执行,而又不影响语法的正确性。

单行注释

-- Sams Teach Yourself SQL in 10 Minutes

没错,(--)后的部分就会被识别为注释。但它仅能“管一行”,因为它没有那么大的权力,谁有呢?没错,多行注释有。

多行注释

/*
Sams Teach Yourself SQL in 10 Minutes
http://forta.com/books/0672336073/
Example table creation scripts for MySQL.
*/

(/*...*/)中间的所有内容都会被识别为注释。

  • 英文冒号

(;)的存在是为了区分多条SQL语句,建议每条SQL语句后都加上它,不然有的DBMS会报错。

一些关键的概念

理解数据库概念是掌握SQL的前提

以上是原作者贯穿全书始终的信念,这自然有他的道理。不过本教程主要面向零基础学习者,因此并不会纠结在下面这些概念上,但如果你能很好的理解这些概念,那么对于认识关系型数据库以及非关系型数据库都是极好的。

  • 引用完整性
  • 模式
  • 外键
  • 联结
  • 约束
  • 索引
  • 触发器
  • 视图
  • 执行顺序

但下面这些概念你一定要了解,暂时不理解也没关系,会随着应用的增多会有更深刻的认识。

  • 数据库(DATABASE)

  • 表(TABLE)

  • 列(COLUMN)

  • 行(ROW)

  • 主键(PRIMARY KEY)

以上概念作者在书中都有通俗易懂的解释,我不作赘述。特别强调一点的是,最好直接看书中的解释,不要找度娘,并不是准确性的问题,而是我觉得作者的解释更容易让人明白。

学完以上内容,你就可以对自己说我已经入门SQL了!部分有些基础的小伙伴可能会说,就特么这也能算入门?!

我的答案无疑是肯定的。每个人对“入门”的认知不一样,如果你的基础够好,学完整个教程都不能算入门,但SQL这门语言被设计出来不是为了让人学的,是为了让人用的。所以严格说来,如果你不能把SQL应用到实际学习或工作中解决问题,都不能算入门。

但无论如何这是个很好的开始,因为你已经“无痛”学习了。本着“i+1”理论,无论它多么简单,你都在有效接收知识,我想没有比这更重要的了。

接下来会进入实操部分,难度同样只会提升1个level,需要提醒的是,不能一目十行,一定要每条语句都自己尝试一下,看看能否得出和我一样的结果。遇到疑惑的部分,也不可以略过,因为实操中的每一部分都是你无论如何要掌握的。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,445评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,889评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,047评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,760评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,745评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,638评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,011评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,669评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,923评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,655评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,740评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,406评论 4 320
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,995评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,961评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,023评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,483评论 2 342

推荐阅读更多精彩内容