MySQL 在 Windows 环境下是大小写不敏感。推荐采用统一的书写规范:
数据库名、表名、表别名、字段名、字段别名等都小写;
SQL 关键字、函数名、绑定变量等都大写。
单行注释:#注释文字(MySQL特有的方式) 单行注释:-- 注释文字(--后面必须包含一个空格。) 多行注释:/* 注释文字 */
数据库、表名不得超过30个字符,变量名限制为29个;
必须只能包含 A–Z, a–z, 0–9, _共63个字符;
数据库名、表名、字段名等对象名中间不要包含空格;
同一个MySQL软件中,数据库不能同名;同一个库中,表不能重名;同一个表中,字段不能重名;
必须保证你的字段没有和保留字、数据库系统或常用方法冲突。如果坚持使用,请在SQL语句中使 用`(着重号)引起来;
保持字段名和类型的一致性,在命名字段并为其指定数据类型的时候一定要保证一致性。假如数据;
类型在一个表里是整数,那在另一个表里可就别变成字符型了。
#以下两句是一样的,不区分大小写 show databases; SHOW DATABASES; #创建表格 #create table student info(...); #表名错误,因为表名有空格 create table student_info(...); #其中order使用``飘号,因为order和系统关键字或系统函数名等预定义标识符重名了 CREATE TABLE `order`( ); #起别名时,as都可以省略 select id as "编号", `name` as "姓名" from t_stu; #如果字段别名中没有空格,那么可以省略"" select id as 编号, `name` as 姓名 from t_stu; #错误,如果字段别名中有空格,那么不能省略"" select id as 编 号, `name` as 姓 名 from t_stu;
/*语法: SELECT 标识选择哪些列 FROM 标识从哪个表中选择 */ #选择全部列 SELECT * FROM departments; #选择特定列 SELECT department_id, location_id FROM departments;
重命名一个列,便于计算,紧跟列名,也可以在列名和别名之间加入关键字AS(AS 可以省略),别名使用双引号(也可省略),以便在别名中包含空格或特 殊的字符并区分大小写。
建议别名简短,见名知意。
#name 为 last_name 的别名 SELECT last_name AS "name" FROM employees; #省略AS SELECT last_name "name" FROM employees; #"" SELECT last_name name FROM employees;
使用关键字DISTINCT去除重复行。
SELECT DISTINCT department_id FROM employees;
针对于
SELECT DISTINCT department_id,salary FROM employees;
需要注意:
① DISTINCT 需要放到所有列名的前面,如果写成 SELECT salary, DISTINCT department_id FROM employees 会报错。
② DISTINCT 其实是对后面所有列名的组合进行去重。如果你想要看都有哪些不同的部门(department_id),只需 要写 DISTINCT department_id 即可,后面不需要再加其他的列名了。
所有运算符或列值遇到null值,运算的结果都为null。
注意:在 MySQL 里面, 空值不等于空字符串。一个空字符串的长度是 0,而一个空值的长度是空。而且,在 MySQL 里面,空值是占用空间的。
我们需要保证表中的字段、表名等没有和保留字、数据库系统或常用方法冲突。如果相同,请在 SQL语句中使用一对``(飘号)引起来。
SELECT 查询可以对常数进行查询,就是在 SELECT 查询结果中增加一列固定的常数列。这列的 取值是我们指定的,而不是从数据表中动态取出的。
如果我们想整合不同的数据源,用常数列作为这个表的标记,就需要查询常数。 比如说,对 employees 数据表中的员工姓名进行查询,同时增加一列字段 corporation ,这个字段固定值为“公司”,可以这样写:
SELECT '公司' as corporation, last_name FROM employees;
/*语法: SELECT 字段1,字段2 FROM 表名 WHERE 过滤条件 */ SELECT employee_id, last_name, job_id, department_id FROM employees WHERE department_id = 90 ;
+ - * / %(取模)
比较运算符用来对表达式左边的操作数和右边的操作数进行比较,比较的结果为真则返回1,比较的结果 为假则返回0,其他情况则返回NULL。
比较运算符经常被用来作为SELECT查询语句的条件来使用,返回符合条件的结果记录。
= <=>(安全等于) <>(不等于) !=(不等于) < <= > >=
比较规则:
①如果等号两边的值、字符串或表达式都为字符串,则MySQL会按照字符串进行比较,其比较的 是每个字符串中字符的ANSI编码是否相等。
②如果等号两边的值都是整数,则MySQL会按照整数来比较两个值的大小。
③如果等号两边的值一个是整数,另一个是字符串,则MySQL会将字符串转化为数字进行比较。
④如果等号两边的值、字符串或表达式中有一个为NULL,则比较结果为NULL。
与等于运算符的作用是相似的, 唯一区别 是‘’可 以用来对NULL进行判断。在两个操作数均为NULL时,其返回值为1,而不为NULL;当一个操作数为NULL 时,其返回值为0,而不为NULL。
NOT(或!) AND(或&&) OR(或||) XOR
& | ^(按位异或) ~(按位取反) >> <<
IS NOT NULL | 不为空运算符 | 判断值、字符串或表达式是否不为空 |
ISNULL(或IS NULL) | 为空运算符 | 判断值、字符串或表达式是否为空 |
CREATEST | 最大值运算符 | 返回多个值中的最大值 |
LEAST | 最小值运算符 | 返回多个值中的最小值 |
BETWEEN AND | 两值之间运算符 | 判断一个值是否在两值之间 |
IN | 属于运算符 | 判断一个值是否为列表中的一个值 |
NOT IN | 不属于运算符 | 判断一个值是否不为列表中的一个值 |
LIKE | 模糊匹配运算符 | 判断一个值是否符合模糊匹配规则 |
REGEXP | 正则表达式运算符 | 判断一个值是否符合正则表达式规则 |
RLIKE |
LIKE运算符主要用来匹配字符串,通常用于模糊匹配,如果满足条件则返回1,否则返回 0。如果给定的值或者匹配条件为NULL,则返回结果为NULL。
LIKE运算符通常使用如下通配符: “%”:匹配0个或多个字符。 “_”:只能匹配一个字符。
回避特殊符号的,例如:将[%]转为[$%]、[]转为[$]。
SELECT last_name FROM EMPLOYEES WHERE last_name LIKE 'King'; SELECT last_name FROM EMPLOYEES WHERE last_name LIKE 'King' ESCAPE 'K';
REGEXP运算符用来匹配字符串,语法格式为:
expr REGEXP 匹配条件
如果expr满足匹配条件,返回,返回 1;如果不满足,则返回0。若expr或匹配条件任意一个为NULL,则结果为NULL。
REGEXP运算符在进行匹配时,常用的有下面几种通配符:
① ‘^’匹配以该字符后面的字符开头的字符串。
② ‘$’匹配以该字符前面的字符结尾的字符串。
③ ‘.’匹配任何一个单字符。
④ “[...]”匹配在方括号内的任何字符。例如,“[abc]”匹配“a”或“b”或“c”。为了命名字符的范围,使用一 个‘-’。“[a-z]”匹配任何字母,而“[0-9]”匹配任何数字。
⑤ ‘*’匹配零个或多个在它前面的字符。例如,“x*”匹配任何数量的‘x’字符,“[0-9]*”匹配任何数量的数字, 而“*”匹配任何数量的任何字符。
数字编码越大,优先级越高。
优先级 | 运算符 |
1 | := = |
2 | || OR XOR |
3 | &&AND |
4 | NOT |
5 | BETWEEN,CASE,WHILE,THEN,ELSE |
6 | =(比较运算符) <=> >= > <= < <> != IS,LIKE,REGEXP,IN |
7 | | |
8 | & |
9 | << >> |
10 | - + |
11 | * / DIV % MOD |
12 | ^ |
13 | - ~ |
14 | ! |
15 | () |
正则表达式通常被用来检索或替换那些符合某个模式的文本内容,根据指定的匹配模式匹配文本中符合要求的特殊字符串。例如,从一个文本文件中提取电话号码,查找一篇文章中重复的单词或者替换用户输入的某些敏感词语等,这些地方都可以使用正则表达式。正则表达式强大而且灵活,可以应用于非常复杂的查询。
符号 | 说明 | 例子 | 匹配示例 |
^ | 匹配文本的开始字符 | '^b' 匹配以字母b开始的字符 | book,big,banana |
$ | 匹配文本的结束字符 | 'st' 匹配以st结束的字符 | test,resist,persist |
. | 匹配任何单个字符 | 'b.t' 匹配任何b,t之间有一个字符的字符串 | bit,bat,but |
* | 匹配零个或多个在它前面的字符 | 'f*n' 匹配n前面有任意个f的字符串 | fn,fan,faan |
+ | 匹配前面的字符一次或多次 | 'ba+' 匹配以b开头后面紧跟至少有一个a的字符串 | ba,bay,bare |
<字符串> | 匹配包含指定字符串的文本 | 'fa' 匹配包含fa的字符串 | fan,afa,faad |
[字符集合] | 匹配字符集合中的任何一个字符 | '[xz]' 匹配包含x或z的字符串 | dizzy,zebra,extra |
[^] | 匹配不在括号中的任何字符 | '[^abc]' 匹配不包含a,b,c的字符串 | desk,fox |
字符串{n,} | 匹配前面的字符串至少n次 | b{2} 匹配2个或多个b的字符串 | bb,bbb,bbbb,bbbbb |
字符串{n,m} | 匹配前面的字符串至少n次,至多m次 | b{2,4} 匹配至少2个,至多4个b的字符串 | bb,bbb,bbbb |