【MySQL】第三部分 基本的SELECT语句
文章目录
3. 基本的SELECT语句
3.1 SELECT … FROM
# 选择所有的列
SELECT * FROM employees;
# 选择指定的列
SELECT first_name,salary,job_id FROM employees;
3.2 设置列的别名
# 列的别名
/*
第一种 AS
第二种 用空格隔开
第三种 使用""括起来,切记不要使用'',单引号用在字符串中
*/
SELECT employee_id 员工ID,salary AS 工资,job_id "职位"
FROM employees;
3.3 去除重复行
# 去除重复行
# 例如:要求输出公司有哪些工种
SELECT DISTINCT job_id "工种"
FROM employees;
3.4 空值运算
# 空值是不能做运算,所以解决办法: IFNULL(expr1,expr2)
# 如果expr1为null,则用expr2的值进行替换,反之使用expr1
SELECT employee_id, salary "月收入", (1+IFNULL(commission_pct,0))*salary*12 "年收入"
FROM employees;
3.5 着重号
# 着重号 --> ``
# 如果字段和保留字,数据库系统常用方法冲突,在sql语句中使用着重号将其括起来
SELECT * from `order`;
3.6 显示表的结构
# 显示表的结构
DESCRIBE employees;
3.7 WHERE 过滤数据
# 筛选出 department_id 等于50 并且 工资大于6000
SELECT *
FROM employees
WHERE department_id = 50 AND salary > 6000;
SELECT *
FROM departments
WHERE department_name = 'IT'; # 注意:在这需要用单引号
3.8 算术运算符
加(+)、减(-)、乘(*)、除(/)和取模(%)运算
大家可以使用 FROM DUAL
虚拟表( 自行测试运算符 )
需要注意的是:一个数除以0为NULL
例如:
SELECT 100+0,100-0,100*0,100/0,50%3
FROM DUAL;
3.9 比较运算符
等号运算符(=)判断等号两边的值、字符串或表达式是否相等,如果相等则返回1,不相等则返回0。
SELECT 1=1,1='1','abc'=0,'abc'=1,(5+3)=(2+6),''=NULL,NUll=NULL,0=Null
FROM DUAL;
根据上述sql语句测试出来的结果,很多和我们想的答案是不一样的
1.如果等号两边的值一个是整数,另一个是字符串,则MySQL会将字符串转化为数字进行比较,如果遇到不能够转换的,例如上述的abc,那么就会统一转为0,所以这就是为什么等于1的原因。
2.如果等号两边的值、字符串或表达式中有一个为NULL,则比较结果为NULL。
安全等于运算符(<=>),它和等于运算符的主要区别是在于:安全等于运算符可以用来对NUll进行判断,在两个操作数均为NULL时,其返回值为1,而不为NULL。当一个操作数为NULL时,其返回值为0,而不为NULL。
SELECT NULL<=>NULL,NULL<=>'',NULL<=>0
FROM DUAL;
3.10 非符号类运算符
空运算符
ISNULL、IS NULL、IS NOT NULL
SELECT employee_id, commission_pct
FROM employees
WHERE commission_pct IS NULL;
SELECT employee_id,commission_pct
FROM employees
WHERE commission_pct IS NOT NULL;
# ISNULL() 他其实是一个函数
SELECT employee_id,commission_pct
FROM employees
WHERE ISNULL(commission_pct);
最小运算符和最大运算符
GREATEST(值1,值2,...,值n)
LEAST(值1,值2,...,值n)
需要注意的点:
- 当比较值列表中有
NULL
时,不能判断大小,返回值为NULL。 - 当参数为字符串时,返回字母表中顺序最靠前/后的字符
- 当参数是整数或者浮点数时,将返回其中最小/最大的值
SELECT GREATEST(1,2.5)
FROM DUAL;
SELECT GREATEST('asd','fdg')
FROM DUAL;
SELECT GREATEST(3,2.5,NULL)
FROM DUAL;
SELECT GREATEST(LENGTH('shdihassdasdadud'),LENGTH('sadasddfas'))
FROM DUAL;
BETWEEN AND运算符
判断一个值是否在两个值区间内,闭区间包含端点
SELECT employee_id,salary
FROM employees
WHERE salary BETWEEN 7000 AND 10000;
不在该区间内
SELECT employee_id,salary
FROM employees
WHERE salary NOT BETWEEN 7000 AND 10000;
等价于
WHERE salary < 7000 OR salary > 10000
IN运算符
IN 用于判断给定的值是否是IN列表中的一个值,如果是则返回1,否则返回0。如果给定的值为NULL,或者IN列表中存在NULL,则结果为NULL。
NOT IN 用于判断给定的值不在IN列表中的一个值
SELECT manager_id
FROM employees
WHERE manager_id IN (100,101);
SELECT manager_id
FROM employees
WHERE manager_id NOT IN (100,101);
LIKE运算符
LIKE运算符主要用来匹配字符串,通常用于模糊匹配,如果满足条件则返回1,否则返回0。如果给定的值或者匹配条件为NULL,则返回结果为NULL。
“%”: 匹配0个或多个字符。
“_”: 只能匹配一个字符。
“\”: 转义
SELECT first_name
FROM employees
WHERE first_name LIKE "%s%" # 条件是只要包含s字符即可
SELECT first_name
FROM employees
WHERE first_name LIKE "s%" # 条件是开头是s字符
SELECT first_name
FROM employees
WHERE first_name LIKE "%s" # 条件是结尾是s字符
SELECT first_name
FROM employees
WHERE first_name LIKE "_s%" # 条件是第二个字符是s
SELECT job_id
FROM employees
WHERE job_id LIKE "%\_%" # 条件是包含下划线
REGEXP运算符(正则表达式)
如果expr满足匹配条件,返回1;如果不满足,则返回0。若匹配内容或匹配条件任意一个为NULL,则结果为NULL。
SELECT job_id
FROM employees
WHERE job_id REGEXP "^A" # 以A开头
SELECT job_id
FROM employees
WHERE job_id REGEXP "^A.*P$" # 以A开头,P结尾
逻辑运算符
逻辑运算符主要用来判断表达式的真假,逻辑运算符的返回结果为1、0或者NULL。
逻辑与
注意:非0即真,但是需要注意如果0和NULL与则为0,其余和NULL为NULL
SELECT 1 && -1,0 && NULL, NULL && 1, 1 && NULL
FROM DUAL;
SELECT employee_id,salary FROM employees
WHERE NOT (salary >= 9000 && salary <= 12000);
逻辑或
注意:只要有任意一个非0的值即真 ,当两个值都为NULL时,返回NULL,如果0和NULL或则为NULL
SELECT 1 || NULL, NULL || 1, 0 || NULL,NULL || NULL, -52 || 12
FROM DUAL;
SELECT employee_id, last_name, job_id, salary
FROM employees
WHERE salary >= 10000 || job_id LIKE '%A%';
注意:
OR可以和AND一起使用,但是在使用时要注意两者的优先级,由于AND的优先级高于OR,因此先对AND两边的操作数进行操作,再与OR中的操作数结合。
逻辑异或
注意: 简单来说就是条件满足一真一假我就要,当给定的值中任意一个值为NULL时,则返回NULL
SELECT 1 XOR -1,1 XOR 0, 1 XOR NULL, 1 XOR 1 XOR 1, 0 XOR 0 XOR 0
FROM DUAL;
位运算符
位运算符是在二进制数上进行计算的运算符。位运算符会先将操作数变成二进制数,然后进行位运算,最后将计算结果从二进制变回十进制数。
在一定范围内容,左移一位值扩大两倍,右移一位值缩小两倍.
总结
以上就是今天要讲的内容,希望对大家有所帮助!!!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/82811.html