SQL基础教程笔记

致谢

首先非常感谢生信技能树的赠书活动送了我这么棒的一本书~

活动链接:

【好书分享】数据库必知必会

https://mp.weixin.qq.com/s?src=11&timestamp=1531923110&ver=1006&signature=zKUTJuOiAQYBSCYL8aCDpUCqfTIXpfIr71TczjPTdvXrOjxDYRbqV1GJ9ykkf9JFB6qMB4tJem4-cZvMpUQF50qU5fXJ3iMh6kgCDWfo*GJv0bgETfvfjVQQh3Dhwcme&new=1

因为之前一直在做数据库用到了很多的sql语句,而我的sql语言基本都是照着人家分享的代码和一些视频课抄的,相当地一知半解,经常遇到各种各样奇怪的bug,超级心累。虽然现在基本已经脱离那些夜夜debug熬到天亮的日子了,但还是心有余悸。所以拿到这本书的时候真的是欣喜若狂,有种学完里面的东西就能够将当初折磨我的东西踩在脚下摩擦的感觉。目前大概看了接近四分之一,决定要开始记录一些东西,一是为了记录一些所得,二是分享经验和所学,以飨读者。

0、搭建环境

0-1、安装

既然要学习sql肯定要先搭建好相关的学习环境咯。书里建议和介绍的是在Windows环境下下载PostgreSQL,网址如下

https://www.enterprisedb.com/downloads/postgres-postgresql-downloads#windows

但是会有一些奇怪的在尝试多个版本尝试了很多修复报错的经验帖之后还是一直报

Problem running post-install step. Installation may not complete correctly. The database cluster initialisation failed.

的错误,没法解决。于是乎一气之下拿起被我刷成deepin系统的旧电脑sudo apt-get install postgresql好了,世界清净了

输入psql --v 查看版本,我安装的是9.6版(最新版应该是到10.4了,但是基本没差)

另,在Windows下需要将data\postgresql.conf中的

#listen_addresses = '*'

修改成

listen_addresses = 'localhost'

才能正常使用。

0-2、登录

  • 在类unix环境下先将用户sudo su postgres切换到专用的postgres用户后,输入psql进入sql环境

  • 在Windows下,以管理员方式打开cmd之后,输入psql.exe -U postgres进入sql环境

0-3、创建学习用的数据库

sql语言有点像php,必须得以;结尾,否则不会执行。

输入下面的语句创建数据库:

CREATE DATABASE shop;

这里要说明一下:

  1. 数据库的名称必须只能用小写字母

  2. 按照sql标准的话关键字都得大写,比如上面的CREATEDATABASE,但实际上大小写并不影响运行。但是入乡随俗,一开始学习的时候要养成良好习惯嘛,建议照着来~

创建成功后输入\q退出环境,输入psql -d shop进入上一步创建的数据库。(Windows: psql.exe -U postgres -d shop

至此环境就搭建完成啦~接下来就可以学习sql语句啦~

本书中所有用到的语句在图灵社区的官网上都能下载到

http://www.ituring.com.cn/book/download/f8e8fcb6-84d8-4839-bd5a-3c737478ae11

1、数据库和SQL

1-1、数据库介绍

我们常见的mysqlSQL ServerDB2Oracle DatabasePostgresql都属于关系数据库管理系统(Relational Database Management System, RDBMS)

数据库里储存的都是一张张的表,可以类比为一张张excel数据表,基本没差,就是长那个样子。

1-2、SQL介绍

sql语句的三种类型:

  1. DDL(Data Definition Language, 数据定义语言)

    • CREATE:创建数据库和表

    • DROP:删除数据库和表

    • ALTER:修改数据库和标的结构

  2. DML(Data Manipulation Language, 数据操纵语言)

    • SELECT:查

    • INSERT:增

    • UPDATE:改

    • DELETE:删

    sql语言最常用的三板斧

  3. DCL(Data Control Language, 数据控制语言)

    • COMMIT:确认变更

    • ROLLBACK:取消变更

    • GRANT:赋予操作权限

    • REVOKE:取消操作权限

日常生产生活中90%属于三板斧的DML

1-3、创建表

CREATE TABLE Product
(product_id      CHAR(4)      NOT NULL,
 product_name    VARCHAR(100) NOT NULL,
 product_type    VARCHAR(32)  NOT NULL,
 sale_price      INTEGER ,
 purchase_price  INTEGER ,
 regist_date     DATE ,
 PRIMARY KEY (product_id));

官方提供所有示例及课后题的代码,但还是建议大家手打一遍~

1-4、向表中插入数据

-- DML:插入数据

BEGIN TRANSACTION;

INSERT INTO Product VALUES ('0001', 'T恤' ,'衣服', 1000, 500, '2009-09-20');

INSERT INTO Product VALUES ('0002', '打孔器', '办公用品', 500, 320, '2009-09-11');

INSERT INTO Product VALUES ('0003', '运动T恤', '衣服', 4000, 2800, NULL);

INSERT INTO Product VALUES ('0004', '菜刀', '厨房用具', 3000, 2800, '2009-09-20');

INSERT INTO Product VALUES ('0005', '高压锅', '厨房用具', 6800, 5000, '2009-01-15');

INSERT INTO Product VALUES ('0006', '叉子', '厨房用具', 500, NULL, '2009-09-20');

INSERT INTO Product VALUES ('0007', '擦菜板', '厨房用具', 880, 790, '2008-04-28');

INSERT INTO Product VALUES ('0008', '圆珠笔', '办公用品', 100, NULL, '2009-11-11');

COMMIT;

在不同的数据库软件中有些语句写法和用法都是不一样的,如果运行报错的话记得自己查一下自己的软件的语句是怎么写的~

2、查询基础

输出全部的列:

SELECT *
  FROM Product;

输出指定的列:

SELECT product_id, product_name, product_type, sale_price,
       purchase_price, regist_date
  FROM Product;

上面两个是等价的。

根据WHERE语句来选择记录

SELECT product_name, product_type

  FROM Product

 WHERE product_type = '衣服';

SQL中子句书写顺序是固定的,不能随意更改。比如WHERE子句必须紧跟在FROM子句的后面,否则会报错。

注释的写法

单行注释:--

多行注释: /* */

这个多行注释就很像css的多行注释…

比较运算符

SELECT product_name, product_type
  FROM Product
 WHERE sale_price = 500;

不等于用<>

对字符串使用不等号的注意事项

创建一个测试表

-- DDL:创建表
CREATE TABLE Chars
(chr CHAR(3) NOT NULL,
PRIMARY KEY (chr));

--SQL Server PostgreSQL
-- DML:插入数据
BEGIN TRANSACTION;
INSERT INTO Chars VALUES ('1');
INSERT INTO Chars VALUES ('2');
INSERT INTO Chars VALUES ('3');
INSERT INTO Chars VALUES ('10');
INSERT INTO Chars VALUES ('11');
INSERT INTO Chars VALUES ('222');
COMMIT;

筛选大于'2'的数据

SELECT chr
  FROM Chars
 WHERE chr > '2';

会得到一个神奇的结果:

chr
-----
3
222

2和'2'是不一样哒!字符串是按照字典顺序进行比较的因此上面的测试表的排序是:

  • 1
  • 10
  • 11
  • 2
  • 222
  • 3

特殊的NULL

  • NULL不管加减乘除结果都是NULL,甚至NULL除以零也不会报错,得到的结果还是NULL…就是这么神奇,就像是黑洞一样将所有的东西都吸收进去成为他自己…(emmmm…我猜的)

  • NULL不能使用比较运算符,得使用IS NULL或者IS NOT NULL

    SELECT product_name, purchase_price
      FROM Product
     WHERE purchase_price IS NULL;
    

逻辑运算符

ANDORNOT这种东西就不介绍了,小儿科。要注意的是AND运算符优先于OR运算符

SELECT product_name, product_type, regist_date
  FROM Product
 WHERE product_type = '办公用品'
   AND (   regist_date = '2009-09-11'
        OR regist_date = '2009-09-20');

所以当需要查询登记时间是2009-09-112009-09-20的时候需要加个括号以防止查询到错误的结果。
待续……

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