备注: 为养成'良好'的代码习惯,建议'关键字'全部'大写'
写出'明确'的字段,更容易理解你的 SQL 的'查询意图' --> '可读性'
SELECT原本的作用是'按列'的查询,而WHERE限制的是'行'
① 基础语法
② 不带条件 单个、多个、所有字段查询
1、'多字段'查询时用', 逗号'分隔多个字段
2、* 查询'所有字段' --> 了解即可,'性能'问题
③ select 函数 没有FROM
1、在 MySQL 中,某些情况下你要'检索的数据'不存在于任何表中,这时您可以'省略' FROM 子句
MySQL中常用的函数分为'三大类':有'日期'操作函数、'字符串'操作函数、'聚合'函数
说明: 时间的'精确粒度'只到了'秒',格式:yyyy-mm-dd hh:mm:ss
④ select 字符串函数 无FROM
字符串的函数: 在SQL语句中可以'对字符串进行拼接'、'计算长度'、'大小写转换'
这个dual实际'并不存在',只是为了让'代码对齐'更加'美观'而已
⑤ select 聚合函数 有FROM
初始化: update user set age=38 where nickname='jane'
日常能用到的'频率最高'的函数,也就是'求和'、'计算总记录数'、'求平均值'、'求最大值'、'最小值'
语法: select 聚合函数(列名) FROM 表名;
经验: 对'多条数据 [row]'的'单列 column'进行统计,返回统计后的'一行结果'
⑥ WHERE 条件
-- 语法
SELECT
columns_list
FROM
table_name
WHERE
query_condition;
+++++++++++++ "比较运算符" +++++++++++++
备注: 了解'取反'
⑦ =、IN、NULL、LIKE
1、= '字段' 和 '值' 的比较
2、IN常用于where表达式中,其作用是查询'某个范围[集合]内'的数据:
select * from where field in (value1,value2,value3,…) -- '逗号'分割
扩展:更多情况下,IN 列表项的值是'不明确'的,而可能是'通过一个子查询得到'的:
SELECT * FROM article WHERE uid IN(SELECT uid FROM user WHERE status=0)
3、NOT NULL
备注: 了解'空值'和NULL的区别
4、LIKE 运算符是一个'双目'比较运算符,需要'两个操作数' --> 'vague 模糊查询'
LIKE 运算符'语法'如下:
expression [NOT] LIKE pattern
1) expression 是 '列名' 或者为 '列名的表达式'
2) pattern是是一个'字符串模式' --> 匹配的字符串必须加'单引号'或"双引号"
3) MySQL 字符串模式支持两个'通配符': '%' 和 '_'
4) %匹配'零个或多个 [0,+∞)'字符,'_'匹配'一个'字符
比如: ab% 就是'ab开头'的字符串、而'ab_'就是 'ab开头'的且字符串'长度为3'的字符串
需求: 想匹配'以%a开头'的字符串怎么办? 匹配通配符可以用'\'转义字符,如 \%a
默认: LIKE 关键字匹配字符的时候是'不区分大小写'的,如果区分大小写,可以加入 BINARY 关键字
形如: WHERE name LIKE BINARY 't%';
⑧ 其它运算符 AND、OR、BETWEEN、EXISTS
1、AND的逻辑就是数学中的'且',全'真(也就是1)'为真,'一假'为假(也就是0)
备注: MySQL中'没有'布尔类型,AND 的运算结果是 '1、0、 或着 NULL',这里的'1'代表'非0'
特点: 只有当两个操作数'都为真时',结果才'返回真',否则返回假 '或者' NULL
用法: WHERE '条件1' AND '条件2'
2、OR与AND相同都是'双目'操作符,都'没有TRUE,FALSE',而是用 '0、1、NULL'代替
OR的逻辑是"或" '一真全真',全假为假
3、BETWEEN '等价于' expression >= min AND expression <= max --> '[A,B]' 区间
4、EXISTS的作用是判断subquery这条子查询语句'有没有返回行'
语法: WHERE EXISTS(subquery)
备注: 如果有'至少一行',则 EXISTS 的计算结果为 TRUE,否则计算结果为 FALSE
EXISTS 运算时,一旦'子查询'找到一个'匹配的行',EXISTS 运算就会'返回'
而只要WHERE后面的'运行结果为TRUE',该行就会'被选择'
1、在检索 'user表' 的每一行时
2、只要 film 表存在一行数据具有相同的 language_id,EXISTS 就返回 TRUE
3、然后进入language表的下一行,直到所有行都检索完成,然后返回language表中所有匹配成功的行
备注: 这个language是'每行每行的往下走的',而film的数据是'全部放在这里'的