[SQL | DDUP] Task02:基础查询与排序

这次记得比较杂,随意记录一些看文档 / 视频的过程中觉得重要的

在workbench中你或者通过USE关键字来选中数据库或者双击左边schemas里面的具体栏目

SELECT *
FROM customers
-- WHERE customer_id = 1
order by first_name

注意除了SELECT clause,其他都不是必须的,但是注意这些clause的顺序不能变,先查询再排序(好理解)
你甚至可以直接SELECT数字

SELECT 1, 2

此外,换行符,大间隔和tab符号在执行SQL语句时都没有起作用

可以直接在取列的时候进行计算,运算优先级可以根据符号进行改变,AS用于起别名

SELECT 
    last_name, 
    first_name, 
    points, 
    (points + 100) * 10 AS discount_fact
FROM customers

`AND(&&), OR(||), NOT```

注意下面这样写逻辑判断是不对的

SELECT *
FROM customers
WHERE state = 'VA' OR 'GA' OR 'FL'

因为state = 'VA'是一个boolean(念作不连安)值,而’GA’是字符串,再SQL里面你不能使用OR连接这两种类型

如果要这样简单写可以用in,如下

SELECT *
FROM customers
WHERE state IN ('VA', 'GA', 'FL')

当然可以NOT IN

相似的还有BETWEEN...AND...

LIKE clause,这个表示有点像正则表达式那个意思,但是具体符号有点不同
%匹配任意多个任意字符,_(underscore)匹配一个字符
也可以NOT LIKE
注意同样也存在以下问题:

SELECT *
FROM customers
-- WHERE address LIKE '%TRAIL%' OR '%AVENUE%'
WHERE address LIKE '%TRAIL%' OR
      address LIKE '%AVENUE%'

用注释掉那种方法,也是只能识别%TRAIL%

要用正则表达式的话,用关键字REGEXP
^开头,$结尾,|(vertical bar)表示或者,选择性匹配
注意^field|mac|rose里头只有field是必须开头,不是说三个开头

[gim]e表示g或i过m可以粗现在e前头

SELECT first_name, last_name
FROM customers
ORDER BY birth_date

注意只有MySQL里里面才可以这么么写,其他DBMS你这样写可能就会出.
还有下面这种写法,再MySQL里面也是合法的:

SELECT first_name, last_name, 10 AS points
FROM customers
ORDER BY points, first_name

10那个地方你可以写一系列复杂的数学式子,注意只有10设置了alias为points,而不是把这三个一起起了alias

SELECT first_name, last_name, 10 AS points
FROM customers
ORDER BY 1, 2

这个表示用上面选出来的第1列first_name和第2列last_name来排序,但是我们应该避免这种写法,因为如果你再select后面多加一列就错了,还是要用列明来排序

如果要控制输出的行数,可以用LIMIT关键字如下

SELECT *
FROM customers
LIMIT 6, 3

注意这里LIMIT之后两个数字,第一个是跳过前6条的意思,然后在显示3条,这个在那种网页显示的时候特别有用

LIMIT要放在WHEREORDER BY后面.

浙ICP备19012682号