SQL学习笔记2——基础查询

1. SELECT语句基础

从表中选取数据时需要使用 SELECT 语句,通过 SELECT 语句查询并选取出必要数据的过程称为匹配查询或查询(query)。

1.1 基本的select语句
选择特定字段,按写的先和顺序显示字段

select <列名>,...
from <表名>;

SELECT 子句中列举了希望从表中查询出的列的名称,FROM 子句指定了选取出数据的表的名称。

示例:

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

选择所有列,不能进行排序,*代表全部的意思

SELECT *
FROM
Product;

法则 2-1 星号(*)代表全部列的意思。

1.2 为列设置别名
使用as关键字为列设定别名,别名如果是中文,需要用双引号括起来
示例:

SELECT product_id AS id,
product_name AS name,
purchase_price AS price
FROM Product;

法则 2-2 设定汉语别名时需要使用双引号(")括起来。

1.3 删除重复数据
在select子句中使用distinct来实现删除重复行

SELECT DISTINCT product_type
FROM Product;

在使用distinct时,null也会被视为一类数据,null存在于多行中时,也会被合并成一条null数据。
法则 2-3 在SELECT语句中使用DISTINCT可以删除重复行。
distinct只能放在第一个列名之前。

1.4 根据where语句来选择记录
select语句通过where子句来指定查询数据条件。在 WHERE 子句中可以指定“某一列的值和这个字符串相等”或者“某一列的值大于这个数字”等条件。

SELECT <列名>, ……
FROM <表名>
WHERE <条件表达式>;

示例:

SELECT product_name, product_type
FROM Product
WHERE product_type = '衣服';

先通过where子句查询出符合指定条件的记录,然后再选取出select语句指定的列。
SQL子句的书写顺序是固定的,WHERE 必须跟在FROM子句后面,否则会报错。
法则 2-4 WHERE子句要紧跟在FROM子句之后。

1.5 SQL注释
注释的书写方法有如下两种:

  • 单行注释 ”--“
  • 多行注释 ”/“和”/“之间可以跨多行
-- 本SELECT语句会从结果中删除重复行。
SELECT DISTINCT product_id, purchase_price FROM Product;

/* 本SELECT语句, 
会从结果中删除重复行。*/
SELECT DISTINCT product_id, purchase_price 
FROM Product;

注释不仅可以写在 SELECT 语句 中,而且可以写在任何 SQL 语句当中,写多少都可以。
法则 2-5 注释是 SQL 语句中用来标识说明或者注意事项的部分。 分为1行注释和多行注释两种。

2. 算术运算符和比较运算符

  • 运算符就是对其两边的列或者值进行运算(计算或者比较大小 等)的符号。
  • 比较运算符可以用来判断列或者值是否相等,还可以用来比较 大小。

2.1 算术运算符和比较运算符
SQL语句中可以使用计算表达式

SELECT product_name, sale_price, 
sale_price * 2 AS "sale_price_x2" 
FROM Product;

把单价的两倍(sale_price * 2 )以”sale_price_x2“的形式读取出来

SQL语句中可以使用的四则运算的主要运算符

运算符 含义
+ 加法运算
- 减法运算
* 乘法运算
/ 除法运算
() 括弧

注意含有null的运算,计算结果都是null,null/0 结果也是null

法则 2-6 SELECT子句中可以使用常数或者表达式。

2.2 比较运算符
在where子句中通过使用比较运算符可以组合出各种各样的条件表达式
选取出sale_price列的值不是500的记录

SELECT product_name, product_type 
FROM Product 
WHERE sale_price <> 500;
运算符 含义
= 和~相等
<> 和~不等
>= 大于等于~
> 大于~
<= 小于等于~
< 小于

这些运算符可以对字符、数字和日期等所有数据类型的列和值进行比较。

在使用大于等于(>=)或者小于等于(<=)作为查询条件时,一 定要注意不等号(<、>)和等号(=)的位置不能颠倒。
法则 2-7 使用比较运算符时一定要注意不等号和等号的位置。

比较字符串的时候是用类似于字典顺序进行比较,也就是像姓名那样,按照条目在字典中出现的顺序来进行 排序。该规则最重要的一点就是,以相同字符开头的单词比不同字符开 头的单词更相近。
Chars 表 chr 列中的数据按照字典顺序进行排序的结果如下所示。

1
10
11
2
222
3

'10' 和 '11' 同样都是以 '1' 开头的字符串,首先判定为比 '2' 小。 这就像在字典中“提问”“提议”和“问题”按照如下顺序排列一样。
法则 2-8 字符串类型的数据原则上按照字典顺序进行排序,不能与数字的大小顺序混淆。

2.2 不能对 NULL 使用比较运算符
不能对null进行直接比较,通过 IS NULLIS NOT NULL来判断某个值是不是null
法则 2-9 希望选取NULL记录时,需要在条件表达式中使用IS NULL运算符。 希望选取不是NULL的记录时,需要在条件表达式中使用IS NOT NULL运算符。

2.3 逻辑运算符

  • NOT 运算符
    NOT 不能单独使用,必须和其他查询条件组合起来使用
SELECT product_name, product_type, sale_price 
FROM Product 
WHERE NOT sale_price >= 1000;

等同于

SELECT product_name, product_type 
FROM Product 
WHERE sale_price < 1000;

法则 2-10 NOT运算符用来否定某一条件,但是不能滥用。

  • AND运算符和OR运算符
    对多个查询条件进行组合
    AND 运算符在其两侧的查询条件都成立时整个查询条件才成立,其意 思相当于“并且”。
    OR 运算符在其两侧的查询条件有一个成立时整个查询条件都成立,其 意思相当于“或者”。

法则 2-11 多个查询条件进行组合时,需要使用AND运算符或者OR运算符。
法则 2-12 文氏图很方便。
法则 2-13 AND运算符的优先级高于OR运算符。想要优先执行OR运算符时可以 使用括号。

2.4 逻辑运算符和真值
逻辑运算符对比较运算符等返回的真值进行操作。
三值逻辑,在SQL中语言逻辑运算除了真假值之外,还有第三种值-不确定(UNKNOW),也就是null。

SQL中真值表
AND:

P Q P AND Q
不确定 不确定
不确定
不确定 不确定
不确定
不确定 不确定 不确定

OR:

P Q P OR Q
不确定
不确定 不确定
不确定
不确定 不确定
不确定 不确定 不确定

原本只有 4 行的真值表,如果要考虑 NULL 的话就会像上表那样增加为3×3=9 行,看起来也变得更加繁琐,考虑 NULL 时的条件判断也会变得异常复杂,这与我们希望的结果大相径庭。因此,我们要尽量不使用 NULL。
这就是在数据库中设置了NOT NULL约束的原因

法则 2-14 通过创建真值表,无论多复杂的条件,都会更容易理解。

总结

本次学习了SQL 最基本也是最重要的语句——SELECT 语句,同时学习了执行查询操作时指定想要查询数据的条件(查询条件),查询时可以指定一个或多个查询条件,例如“某一列等于这个值”“某一列计算之 后的值大于这个值”等。
在指定查询条件时,我们要注意null这个特殊的值,它的逻辑运算结果和正常值的逻辑运算结果不一样。

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

推荐阅读更多精彩内容