文章目录
1. 选择语句
对于数据库的操作,双击该数据库表示选中。或者采用USE关键字。MySQL不区分大小写,但习惯性的我们采用大写来书写关键字,采用小写来标识其他。
语法规则:
USE sql_store
SELECT * -- 选中所有的列
FROM customers -- 选择表
WHERE customers_id = 1 -- 筛选行数据(单行注释符后面需要加一个空格才能生效)
ORDER BY first_name -- 子句顺序不要发生改变
/*
多行注释
*/
NOTE:
- 语句后面要用分号结束,子句后面不用分号
- SQL会完全无视大小写(任何情况下的大小写)、多余的空格(超过一个的空格)、缩进和换行
- SQL语句间完全由分号 ; 分割
- 用缩进、换行等只是为了代码看着更美观结构更清晰
2. 选择子句SELECT
SELECT式列/字段选择语句,也可重新创造一列。可进行的操作有:
- 数学运算,符合运算顺序
- AS关键字设置别名。AS可以省略,空格后面跟别名就可,但是需要加空格
- DISTINCT关键字提取不重复字段下的值
SELECT
last_name,
first_name,
points,
points * 10 + 100 AS discount_factor
-- 满足基本运算顺序,或'discount factor'
-- AS关键字用来重新命名
FROM customers
SELECT DISTINCT state
-- distinct关键字可以将属性列中不重复的值提取出来
FROM customers
3. WHERE子句
WHERE行筛选条件,实际式一行一行/一条条记录依次验证是否符合条件进行挑选,然后将符合条件的值输出。
算术运算符的应用:
符号 | 意义 |
---|---|
> | 大于 |
>= | 大于等于 |
< | 小于 |
<= | 小于等于 |
= | 等于 |
!= AS <> | 不等于 |
SELECT *
FROM customers
WHERE birth_date > '1991-09-11' -- 日期用单引号表示
4. AND/OR/NOT运算符
优先级:NOT>AND>OR
同时:数学>比较>逻辑,优先级可以通过()改变
NOT可用于BETWEEN/LIKE/IN之前
SELECT *
FROM order_items
WHERE order_id = 6 AND quantity * unit_price > 30
WHERE NOT (birth_date > '1990-01-01' OR points > 1000)
WHERE birth_date <= '1990-01-01' AND points <= 1000
5. IN运算符
IN实际是多重相等比较运算条件的简化,该运算符实现在某一列中提取符合条件的值
SELECT *
FROM customers
WHERE state IN ('VA', 'FL', 'GA')
WHERE state = 'VA' OR state = 'FL' OR state = 'GA'
WHERE state NOT IN ('VA', 'FL', 'GA')
6. BETWEEN运算符
BETWEEN为范围型条件,其表示的意义为:
- 用AND不是()
- 闭区间,包含两个端点
- 也能用于日期判定,日期其实也是一串数字可以比较大小
- 与IN一样其实也是多重比较判断的简化
SELECT *
FROM customers
WHERE points BETWEEN 1000 AND 3000
WHERE points >=1000 AND points <= 3000
7.LIKE运算符
LIKE为字符串的操作,模糊查找符合条件的值。
- % 任何个数(包括0个)的字符(类似通配符里的 *)
- _ 单个字符(类似通配符里的 ?)
符号 | 意义 |
---|---|
B% | 以b开头字符串 |
%b | 以b结尾字符串 |
%b% | 包含b的字符串 |
__y | 三个字节,第三个为y |
SELECT *
FROM customers
WHERE address LIKE '%trail%' OR
address LIKE '%avenue%' AND phone LIKE '%9%'
8. REGEXP运算符
正则表达式,用于搜索字符串应用,可搜索更复杂的模板.
正则表达式(Regular Expression)是用于描述一组字符串特征的模式,用来匹配特定的字符串。通过特殊字符+普通字符来进行模式描述,从而达到文本匹配目的工具。
正则表达式目前被集成到了各种文本编辑器/文本处理工具当中。
符号 | 意义 |
---|---|
^xx | 以xx开头 |
xx$ | 以xx结尾 |
[abc] | 包含abc任意一个字符的字符串 |
[a-f] | 包含a到f任意一个的字符串 |
逻辑或的意思 |
SELECT *
FROM customers
-- WHERE first_name REGEXP 'ELKA|AMBUR'
-- WHERE last_name REGEXP 'ey$|on$'
-- WHERE last_name REGEXP '^my|se'
WHERE last_name REGEXP 'b[ru]'
9. IS NULL运算符
找出空值,找出某些属性值缺失的记录 IS NULL/IS NOT NULL
SELECT *
FROM customers
-- WHERE phone IS NOT NULL
WHERE phone IS NULL
10. ORDER BY子句
用于对列表中的值进行排序。
可多列(根据排列顺序先对第一列规则排序,相同情况下再按照第二列的规则排序),可包括没选择的列(MySQL特性,在SELECT中未选择但是在ORDER BY中可以用),不仅可以是列,也可是列间的数学表达式以及之前定义好的别名列(MySQL特性),任何一个排序依据列后面都可选加 DESC
workbench 中扳手图标打开表格的设计模式,查看或修改表中各列(属性)。
省略排序语句的话会默认按主键排序 ASC 升序 DESC 降序
尽量不要用ORDER BY 1,2这样用数字来表示列,因为列变动后排序的规则也发生了变化。
SELECT *, quantity * unit_price AS total_price
FROM order_items
WHERE order_id = 2
ORDER BY quantity * unit_price DESC
11. LIMIT子句
可以选择型的展示列表中的实体个数,可以显示前N个或者显示偏移M个后的N个数据。如果设置的值大于实体的个数,将表中的数据列出。
格式:LIMIT 6,3 或者LIMIT 3
SELECT * FROM customers
ORDER BY points DESC
LIMIT 3