MYSQL数据库学习(3)

DAY3

一.WHERE过滤数据

  • 语法:WHERE一定要放在FROM后面
SELECT 字段1,字段2
FROM 表名
WHERE 过滤条件

例:

SELECT *
FROM employees
WHERE department_id = 90;	#过滤条件
SELECT *
FROM employees
WHERE last_name = 'king';	#不区分大小写

二.运算符

1.算术运算符

MYSQL数据库学习(3)_第1张图片

(1)加法与减法运算符

SELECT 100, 100 + 0, 100 - 0, 100 + 50, 100 + 50 -30, 100 + 35.5, 100 - 35.5
FROM dual;

在这里插入图片描述
注意:在JAVA,PYthon等语言中,出现字符串后,“+”为拼接,所以答案会变成1001,但是在SQL中会做一个隐式转换,会将字符串转换为数值,在加法运算。

SELECT 100 + '1'
FROM DUAL;
SELECT 100 + 'a'
FROM DUAL;
SELECT 100 + NULL
FROM DUAL;

在这里插入图片描述
此时不会发生隐式转换,当成0处理。
在这里插入图片描述
在这里插入图片描述

(2)乘法与除法运算符

SELECT 100,100 * 1,100 * 1.0,100/1.0,100/2,
100 + 2*5/2,100/3,100 DIV 0
FROM DUAL;

实际上SQL除法运算结果都是小数。
在这里插入图片描述
注意:

  • 一个数乘以整数1和除以整数1后仍得原数;
  • 一个数乘以浮点数1和除以浮点数1后变成浮点数,数值与原数相等;
  • 一个数除以整数后,不管是否能除尽,结果都为一个浮点数;
  • 一个数除以另一个数,除不尽时,结果为一个浮点数,并保留到小数点后4位;
  • 乘法和除法的优先级相同,进行先乘后除操作与先除后乘操作,得出的结果相同。
  • 在数学运算中,0不能用作除数,在MySQL中,一个数除以0为NULL。

(3)求模运算符

SELECT 12 % 3, 12 MOD 5 ,-12 % 5, -12 % -5
FROM dual;

在这里插入图片描述

2.比较运算符

比较运算符用来对表达式左边的操作数和右边的操作数进行比较,比较的结果为真则返回1,比较的结果为假则返回0,其他情况则返回NULL。
比较运算符经常被用来作为SELECT查询语句的条件来使用,返回符合条件的结果记录。
MYSQL数据库学习(3)_第2张图片

(1)等号运算符

  • 等号运算符(=)判断等号两边的值、字符串或表达式是否相等,如果相等则返回1,不相等则返回0。
  • 在使用等号运算符时,遵循如下规则:
    • 如果等号两边的值、字符串或表达式都为字符串,则MySQL会按照字符串进行比较,其比较的是每个字符串中字符的ANSI编码是否相等。
    • 如果等号两边的值都是整数,则MySQL会按照整数来比较两个值的大小。
    • 如果等号两边的值一个是整数,另一个是字符串,则MySQL会将字符串转化为数字进行比较。
    • 如果等号两边的值、字符串或表达式中有一个为NULL,则比较结果为NULL。
  • 对比:SQL中赋值符号使用 :=
  • 例:
SELECT  1 = 2,1!=2,1 = '1',1 = 'a', 0 ='a'
FROM DUAL;

在这里插入图片描述

SELECT 'a' = 'a','a' = 'b'
FROM DUAL;

在这里插入图片描述
表中commission_pct有为NULL的值

SELECT last_name,salary,commission_pct
FROM employees
WHERE commission_pct = NULL;

在这里插入图片描述

(2)安全等于运算符

<=>与=类似,唯一区别是<=>可以对NULL进行判断,当两个操作数均为NULL,其值返回为1,而不为NULL;当一个操作数为NULL,返回0,不为NULL。
专门用于运算NULL。

SELECT 1 <=> NULL,NULL <=> NULL
FROM DUAL;

在这里插入图片描述

SELECT last_name,salary,commission_pct
FROM employees
WHERE commission_pct <=> NULL

MYSQL数据库学习(3)_第3张图片

(3)不等于运算符

不等于运算符(<>和!=)用于判断两边的数字、字符串或者表达式的值是否不相等,如果不相等则返回1,相等则返回0。不等于运算符不能判断NULL值。如果两边的值有任意一个为NULL,或两边都为NULL,则结果为NULL。

 SELECT 1 <> 1, 1 != 2, 'a' != 'b', (3+4) <> (2+6), 'a' != NULL, NULL <> NULL;

在这里插入图片描述

3.比较关键字

MYSQL数据库学习(3)_第4张图片

(1)ISNULL(列名)/IS NOT NULL/IS NULL

四种查询空值的写法(ISNULL(列名)/IS NOT NULL/IS NUL):

# 4.4 ISNULL(列名)/IS NOT NULL/IS NULL:
SELECT last_name,salary,commission_pct
FROM employees
WHERE commission_pct IS NULL;

SELECT last_name,salary,commission_pct
FROM employees
WHERE commission_pct IS NOT NULL;

SELECT last_name,salary,commission_pct
FROM employees
WHERE ISNULL(commission_pct);

SELECT last_name,salary,commission_pct
FROM employees
WHERE NOT commission_pct <=> NULL

(2) LEAST(value1,value2,…)/GREATEST(value1,value2,…)

# 4.5 LEAST(value1,value2,...)/GREATEST(value1,value2,...)
SELECT LEAST('G','B','T','M'),GREATEST('G','B','T','M')
FROM DUAL;

SELECT LEAST(first_name,last_name)	#比较的是ASCII的值,并不是字符串长度
FROM employees;

SELECT LEAST(LENGTH(first_name),LENGTH(last_name))
FROM employees;

(3)BETWEEN 条件下届 AND 条件上届:查询条件1到条件2范围内数据,包含边界

注意:条件上下届不可交换

# 4.6 BETWEEN ... AND
SELECT employee_id,last_name,salary
FROM employees
WHERE salary BETWEEN 6000 AND 8000;

(4)IN/NOT IN

# 4.7 IN/NOT IN
SELECT last_name,salary,department_id
FROM employees
WHERE department_id = 10 OR department_id = 20;

SELECT last_name,salary,department_id
FROM employees
WHERE department_id IN (10,20);

(5)LIKE

%:代表不确定个数的字符(多个或是0个)
—:代表一个字符
# 4.8 LIKE:模糊查询
# %:代表不确定个数的字符(0、多个)
# 查询包含‘a'的员工信息
# SELECT last_name
# FROM employees
# WHERE last_name LIKE '%a%';
# 查询以’a'开头的员工信息
# SELECT last_name
# FROM employees
# WHERE last_name LIKE 'a%';
# 查询包含'a'且包含'e'的员工信息
# SELECT last_name
# FROM employees
# WHERE last_name LIKE '%a%' AND last_name LIKE '%e%';
# WHERE last_name LIKE '%a%e%' OR last_name LIKE '%e%a%';
# 查询第二个字符是’a'
# "_"代表一个不确定的字符
# SELECT last_name
# FROM employees
# WHERE last_name LIKE '_a%';
# 查询第二个字符是'_'第三个字符是’a'
# 使用转义字符‘\’或者使用ESCAPE自定义转义字符
# SELECT last_name
# FROM employees
# WHERE last_name LIKE '_\_a%';
# WHERE last_name LIKE '_*_a%' ESCAPE '*';

(6)REGEXP正则表达式

语法:expr REGEXP 匹配条件 。如果expr满足匹配条件,返回1

4.逻辑运算符

MYSQL数据库学习(3)_第5张图片

(1)非

逻辑非(NOT或!)运算符表示当给定的值为0时返回1;当给定的值为非0值时返回0;当给定的值为NULL时,返回NULL。

(2)与

逻辑与(AND或&&)运算符是当给定的所有值均为非0值,并且都不为NULL时,返回
1;当给定的一个值或者多个值为0时则返回0;否则返回NULL。

(3)或

逻辑或(OR或||)运算符是当给定的值都不为NULL,并且任何一个值为非0值时,则返
回1,否则返回0;当一个值为NULL,并且另一个值为非0值时,返回1,否则返回NULL;当两个值都为NULL时,返回NULL

(4)异或

逻辑异或(XOR)运算符是当给定的值中任意一个值为NULL时,则返回NULL;如果
两个非NULL的值都是0或者都不等于0时,则返回0;如果一个值为0,另一个值不为0时,则返回1。

# 4.10 逻辑运算符:或,且,非,异或(要么满足条件一要么满足条件二,不可同时都满足)
# SELECT last_name,salary,department_id
# FROM employees
# WHERE department_id = 10 AND department_id = 20;
# WHERE department_id = 10 OR department_id = 20;
# WHERE department_id = 50 && salary>6000;
# WHERE salary NOT BETWEEN 6000 and 8000;
# WHERE department_id = 50 XOR salary>6000;

MYSQL数据库学习(3)_第6张图片

注意:

OR可以和AND一起使用,但是在使用时要注意两者的优先级,由于AND的优先级高于OR,因此先对AND两边的操作数进行操作,再与OR中的操作数结合。

(5)位运算符

MYSQL数据库学习(3)_第7张图片

  • 按位与
  • 按位或
  • 按位取反
  • 按位右移
  • 按位左移

5.运算符优先级

MYSQL数据库学习(3)_第8张图片
优先级越高,越先计算。

你可能感兴趣的:(数据库,mysql,学习)