一、SQL语言规范
-
MySQL在Windows环境下大小写不敏感。
-
MySQL在Linux环境下大小写敏感。
-
推荐的书写规范:
(1) 数据库名、表名、表别名、字段名、字段别名等都小写。
(2) SQL关键字、函数名、绑定变量等都大写。
-
注释规则:
(1) 单行注释:#注释文字(MySQL特有)
(2) 单行注释:-- 注释文字(–后有一个空格)
(3) 多行注释:/* 注释文字 */
-
数据导入指令:(dos窗口执行) source 要导入的文件的绝对路径
二、基本的SELECT语句
1. 列的别名
(1)相当于重命名一个列,便于计算,方法是紧跟列名,也可以在列名和别名之间加入关键字 AS ,别名使用双引号 (别名包含空格时的命名方法)。
(2)举例:SELECT employee_name emp , last_name AS name FROM employees;
(3)注意:列的别名不可以在WHERE语句中使用,因为执行顺序为FROM–>WHERE–>SELECT
2. 去除重复行
(1)在SELECT语句中使用关键字DISTINCT去除重复行
(2)举例:SELECT DISTINCT department_id FROM employees;
(3)DISTINCT是对其后的所有字段都去除重复行,一般只跟一个字段。
3. 空值参与运算
(1)所有的运算符或列值遇到null值,运算结果都为null
(2)在MySQL中,空值null不等于空字符串,空字符串的长度是0,空值的长度是空,空值是占用空间的。
4. 着重号``
(1)着重号是为了保证表中的字段、表名等没有和关键字。保留字、数据库系统或者常用方法的名字发生冲突。如果真的相同,命名是必须用一对着重号引用起来。如`SELECT`
(2)SELECT查询还可以对常数进行查询。即在查询结果中增加一列固定的常数列,这一新的常数列的取值可以由自己指定。(常数列可以作为这个表的标记)
(3)举例:SELECT last_name , ‘888’ AS sign FROM employees;
5. 显示表结构
(1)使用DESC或者DESCRIBE显示表结构,如:DESCRIBE employees; 或者DESC employees;
(2)各个字段的含义:
- Field:表示字段名称
- Type:表示字段类型
- Null:表示该列是否可以存储NULL值
- Key:表示该列是否已编制索引。PRI表示该列是表主键的一部分;UNI表示该列是UNIQUE索引的一部分;MUL表示在列中某个给定值允许出现多次
- Default:表示该列是否有默认值,如果有,那么值是多少
- Extra:表示可以获取的与给定列有关的附加信息,例如AUTO_INCREMENT等
三、运算符
①比较运算符
1. 等号运算符(=)
①判断等号两边的值、字符串、表达式是否相等,相等返回1,不相等返回0
②如果等号两边的值一个是整数,另一个是字符串,则MySQL会将字符串转化为数字进行比较,当字符串无法转化为数字时,自动转化为0进行比较。如,1=‘1’,返回1,1=‘a’,返回0,0=‘a’,返回1
③如果等号两边的值有一个是null,则结果为null
④SQL中赋值符号使用 :=
2. 不等于运算符(<>或!=)
①不等于运算符用于判断两边的数字、字符串、表达式的值是否不相等,不相等返回1,相等返回0
②不等于运算符不能判断null值。
3. 安全等于运算符(<=>)
使用安全等于运算符时,两边的操作数的值都为null时,返回的结果为1而不是null,其他返回结果与等于运算符相同。
4. 空运算符(ISNULL或者IS NULL)
①空运算符判断一个值是否为null,如果为null则返回1,否则返回0
②无论是等于还是不等于,只要两边有任意一个值为null,结果就一定为null
5. 非空运算符(IS NOT NULL)
非空运算符判断一个值是否不为null,如果不为null返回1,否则返回0
6. 最小值运算符(LEAST(值1,值2,…,值n))
①当参数列表中的参数为整数或者浮点数时,LEAST将返回最小的值。
②当参数列表中的参数为字符串时,从前往后逐个比较字符串中的第一个、第二个、第n个字符的ASCII码值大小,返回相同位置字符ASCII码最小的字符串。
③当比较值列表中有null值时,不能判断大小,返回值为null。
7. 最大值运算符(GREATEST(值1,值2,…,值n))
①当参数列表中的参数为整数或者浮点数时,GREATEST将返回最大的值。
③当比较值列表中有null值时,不能判断大小,返回值为null。
8. BETWEEN AND运算符
BETWEEN AND运算符的使用格式通常为
SELECT D
FROM TABLE
WHERE C BETWEEN A AND B
此时,当C>=A并且C<=B时,结果为1,否则结果为0
9. IN运算符
①IN运算符用于判断给定的值是否是IN列表中的一个值,如果是则返回1,否则返回0。
②如果给定的值为NULL,IN列表中不存在NULL,则结果为NULL。
10. NOT IN运算符
①NOT IN运算符用于判断给定的值是否不是IN列表中的一个值,如果不是则返回1,否则返回0。
②如果给定的值为NULL,或者NOT IN列表中存在NULL,则结果为NULL。
11. LIKE运算符
①LIKE运算符主要用来匹配字符串,通常用于模糊匹配,如果满足条件则返回1,否则返回0。
②如果给定的值或者匹配条件为null,则返回结果为null。
③“%”匹配0个或者多个字符;“_”只能匹配一个字符。
例如:
SELECT last_name
FROM employees
WHERE last_name LIKE '_o%';
查询的结果为last_name这一列中符合 第一个字符为任意字符;并且第二个字符为o;并且第二个字符后面有任意0个或者多个字符的值。
④回避特殊符号的,使用转义字符’ \ ’ ,如’ \ _ ‘可以代表单个字符’_'。
12. REGEXP运算符
①REGEXP运算符用来匹配字符串,语法格式为xxx REGEXP 匹配条件 ,满足返回1,否则返回0。
②常用的几种通配符:
- ‘^’匹配以该字符后面的字符开头的字符串
- ‘$’匹配以该字符前面的字符结尾的字符串
- ‘.’匹配任何一个单字符
- “[...]”匹配在方括号内的任何字符。例如,“[abc]”匹配“a”或“b”或“c”。“[a-z]”匹配所有小写字母,而“[0-9]”匹配任何数字
- ‘*’匹配零个或多个在它前面的字符。例如,“x*”匹配任何数量的‘x’字符,“[0-9]*”匹配任何数量的数字,而“*”匹配任何数量的任何字符
②逻辑运算符
1. 逻辑非运算符(NOT或!)
逻辑非(NOT或!)运算符表示当给定的值为0时返回1;当给定的值为非0值时返回0; 当给定的值为NULL时,返回NULL
2. 逻辑与运算符(AND或&&)
逻辑与(AND或&&)运算符是当给定的所有值均为非0值,并且都不为NULL时,返回 1;当给定的一个值或者多个值为0时则返回0;否则返回NULL
3. 逻辑或运算符(OR或||)
逻辑或(OR或||)运算符是当给定的值都不为NULL,并且任何一个值为非0值时,则返 回1,否则返回0;当一个值为NULL,并且另一个值为非0值时,返回1,否则返回NULL;当两个值都为 NULL时,返回NULL
4. 注意
OR可以和AND一起使用,且AND的优先级高于OR,所以先AND再OR。
四、排序与分页
①排序
1. 排序规则
- 使用ORDER BY子句实现排序
- ASC(ascend):升序
DESC(descend):降序 - ORDER BY子句在SELECT语句的结尾
2. 一级排序
举例:
SELECT last_name, job_id, department_id, hire_date
FROM employees
ORDER BY hire_date ;
表示将hire_date字段进行升序排序(默认为升序排序)。
3. 多级排序
举例:
SELECT last_name, department_id, salary
FROM employees
ORDER BY department_id, salary DESC;
表示将department_id进行升序排序,然后再根据department_id对salary进行降序排序。
ORDER BY后面的第一个字段进行一级排序,然后第二个字段根据第一个字段排序完的情况进行二级排序。
②分页
-
MySQL中使用LIMIT实现分页。格式为:LIMIT 位置偏移量,需要获取的行数;
-
举例:
SELECT * FROM 表名 LIMIT 10,40;
表示获取表格中的第11至50条记录。
-
注意
LIMIT子句必须放在整个SELECT语句的最后。
五、补充
1. HAVING子句
①having子句用于对分组后的结果进行再过滤,在功能上有点像是where子句,但是having用于组而不是单个记录。
②在having子句中可以使用函数,而where则不能。 并且having通常和GROUP BY子句一起使用。
③having是针对在having之前有提到的字段,然后进行条件限制,可以使用别名;但是where只可以用数据库的原始字段做限制。
举例:
例1:查询学生表中,人数大于3的班号 和人数:
SELECT 班号,COUNT(人数)
FROM 学生表
GROUP BY 班号
HAVING COUNT(人数)>3
例2:查询成绩表中平均成绩大于等于80的学生的学号、选课门数和平均成绩:
SELECT 学号,COUNT(*) 选课门数,AVG(成绩) 平均成绩
FROM 成绩表
GROUP BY 学号
HAVING 平均成绩>=80
2. 语句顺序以及执行顺序
(8)SELECT (9)DISTINCT
(1)FROM
(3) JOIN
(2)ON
(4)WHERE
(5)GROUP BY
(6)WITH{CUBE|ROLLUP}
(7)HAVING
(10)ORDER BY
(11)LIMIT