MySQL学习- 运算符

目录

一.SQL语言的分类

二.SQL语句的规范(建议遵守)

2.1语句规则

2.2 注释 

三. 数据库导入数据指令

3.1   source 文件的路径名

3.1.1几种关于数据库的指令

3.2 基于图形化界面导入

四 .SELECT语句

4.1 SELECT ... FROM ...(最基本)

4.1.1列的别名 

4.1.2 去除重复行(distinct关键字)

4.1.3 空值参与运算

4.1.4  着重号 ``(类似于java 转义符)

4.1.5 常数查询

4.1.6 显示表结构

4.2 过滤数据(满足某些条件)  --> where  在from后面使用

五.运算符

5.1 算术运算符 + - * / (div) % (mod)

5.1.1 + -

 5.1.2 * / (div)

 5.1.3 % mod  结果正负与被模数相同

 5.2 比较运算符 = <=> <> != < <= > >=

5.2.1 = 等号运算符

5.2.2 <=> 安全等于

5.2.3  is null 为空   / is not null 不为空 / isnull(字段)为空

5.2.4  least() / greatest()

5.2.5  between ... and ...

5.2.6 in(set) / not in(set)   在与不在  属于不属于 是与不是

5.2.8  regexp / rlike :正则表达式

5.3 逻辑运算符  或且非 or || and && not !    xor 异或(只满足一个)

5.4 位运算符(用的比较少,了解) & | ^ 

六.运算符的优先级 


一.SQL语言的分类

1.DDL - 数据定义语言 --> create / alter / drop / rename / truncate(清空表,表结构依然在)

2.DML - 数据操作语言 --> insert / delete / update / selsect      增删改查

3.DCL - 数据控制语言 --> commit / rollback / savepoint / grant / revoke

二.SQL语句的规范(建议遵守)

1. 小写:  数据库名、表名、表别名、字段名、字段别名等
2. 大写:  SQL 关键字、函数名、绑定变量等

2.1语句规则

1.  数据库名、表名、字段名等对象名中间不要包含空格
2.  同一个 MySQL 软件中,数据库不能同名;同一个库中,表不能重名;同一个表中,字段不能重名
3.   必须保证你的字段没有和保留字、数据库系统或常用方法冲突。如果坚持使用,请在 SQL 语句中使
` (着重号)引起来
4.   保持字段名和类型的一致性,在命名字段并为其指定数据类型的时候一定要保证一致性。假如数据
类型在一个表里是整数,那在另一个表里可就别变成字符型了

2.2 注释 

单行注释: # 注释文字 (MySQL 特有的方式 )
单行注释: -- 注释文字 (-- 后面必须包含一个空格。 )
多行注释: /* 注释文字 */

三. 数据库导入数据指令

3.1   source 文件的路径名

3.1.1几种关于数据库的指令

1.登录数据库

mysql -u用户名 -p用户密码

例:mysql -u root -p

2.显示所有数据库

show databases;

3.选择数据库

use 数据库名;

4.显示数据库中所有的表

show tables;

5.导入sql文件

source 文件路径;

6.退出数据库

 quit/exit  

3.2 基于图形化界面导入

1.SQLyog

工具 - > 执行SQL脚本 - > 选择文件 - > 执行 shift+alt+f5刷新

四 .SELECT语句

4.1 SELECT ... FROM ...(最基本)

SELECT 字段1,字段2,... FORM 表名;

特殊的 * 表示所有的字段(或列)

例: SELECT 1+1,3*2;   同  SELECT 1+1,3*2 FROM DUAL; //dual伪表

SELECT last_name,salary FROM employees;

4.1.1列的别名 

三种方式    as(alias别名)  双引号(建议)  AS 可以省略

SELECT last_name NAME, salary AS 工资, salary*12 "年薪" FROM employees;

建议别名简短,见名知意

4.1.2 去除重复行(distinct关键字)

#查询员工表中有哪些部门id

SELECT DISTINCT department_id FROM employees; 

SELECT DISTINCT department_id,salary FROM employees;//两者都去重

DISTINCT 其实是对后面所有列名的组合进行去重,你能看到最后的结果是 74 条,因为这 74 个部
id 不同,都有 salary 这个属性值。如果你想要看都有哪些不同的部门(
department_id ),只需
要写 DISTINCT department_id 即可,后面不需要再加其他的列名了。

4.1.3 空值参与运算

所有运算符或列值遇到null值,运算的结果都为null

SELECT employee_id,salary,commission_pct,
12 * salary * ( 1 + commission_pct) "annual_sal"
FROM employees;
注意:
MYSQL中: 空值不等于空字符串。一个空字符串的长度是 0 ,而一个空值的长
度是空。而且,在 MySQL 里面,空值是占用空间的

4.1.4  着重号 ``(类似于java 转义符)

select * from `order`;

4.1.5 常数查询

SELECT '公司名',last_name,salary FROM employees;

//一般用于做标识

4.1.6 显示表结构

DESCRIBE employees; #显示了表的详细信息  describe

或者DESC employees; 

4.2 过滤数据(满足某些条件)  --> where  在from后面使用

SELECT * FROM employees WHERE department_id = 90;

练习: 查询last_name为'king'员工的信息

SELECT * FROM employees WHERE last_name = 'king';

五.运算符

5.1 算术运算符 + - * / (div) % (mod)

5.1.1 + -

select 100+'1' from dual;

在java中 结果为 1001   在SQL中就表示加法运算,会将字符串转换为数值,

例如: select 100+'a' from dual;    //结果为100

如果转失败,就按 0 计算。(补充: MySQL 中字符串拼接要使用字符串函数CONCAT() 实现)

 5.1.2 * / (div)

在数学运算中, 0 不能用作除数,在 MySQL 中,一个数除以 0 NULL
一个数除以整数后,不管是否能除尽,结果都为一个浮点数; 除不尽时,保留到小数点后 4 位;
乘什么类型的数,结果就为什么类型

 5.1.3 % mod  结果正负与被模数相同

练习:

# 筛选出 employee_id 是偶数的员工
SELECT * FROM employees
WHERE employee_id MOD 2 = 0 ;  //用一个等于号

 5.2 比较运算符 = <=> <> != < <= > >=

比较运算符用来对表达式左边的操作数和右边的操作数进行比较,比较的结果为真则返回 1 ,比较的结果
为假则返回 0 ,其他情况则返回 NULL
比较运算符经常被用来作为 SELECT 查询语句的条件来使用,返回符合条件的结果记录。

5.2.1 = 等号运算符

判断等号两边的值、字符串或表达式是否相等,如果相等则返回 1 ,不相等则返回
0

 如果等号两边的值、字符串或表达式中有一个为NULL,则比较结果为NULL。除<=>,其他都是

字符串与数值运算存在隐式转换,如果转换不成功,看做0   如 0='a'  结果为 1 但都是字符串按ASCII码比较 'a'= 'b'为0

where commission_pct = null   结果为null 不会有任何和结果显示 is null

5.2.2 <=> 安全等于

与= 的作用是相似的,唯一的区别就是<=>可以对null进行判断,记忆技巧:为null而生

两个都为null 返回 1,只有一个null返回是 0 

where commission_pct = null 会把null 的值输出  查询为null的数据

5.2.3  is null 为空   / is not null 不为空 / isnull(字段)为空

5.2.4  least() / greatest()

单个字符比较,一个字符一个字符比较,不是比较长度 

5.2.5  between ... and ...

查询工资在2500-3500之间的员工信息
SELECT last_name, salary
FROM employees
WHERE salary BETWEEN 2500 AND 3500 ;  边界值包括
查询工资不在2500-3500之间的员工信息
SELECT last_name, salary
FROM employees
WHERE NOT salary BETWEEN 2500 AND 3500;

5.2.6 in(set) / not in(set)   在与不在  属于不属于 是与不是

练习: 查询部门为10,20,30部门的员工信息

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

or也可以,但条件需要完整

dedepartment_id = 10 or department_id=20 or department_id=30;

练习:查询工资不是6000,7000,8000的员工信息

SELECT last_name,salary FROM employees WHERE salary NOT IN (6000,7000,8000);

5.2.7 like 模糊查询

练习1: 查询last_name中的字符包含'a'的员工信息

SELECT last_name FROM employees WHERE last_name LIKE "%a%";

%代表不确定个数的字符,包括0个,一个或多个

练习2: 包含字符a也包含字符e

SELECT last_name FROM employees WHERE last_name LIKE "%a%e%" or  last_name LIKE "%e%a%";

或者 last_name like '%a%' and last_name='%e%' 

练习3:查询第二个字符为a的员工信息

_ 代表一个不确定性字符

SELECT last_name FROM employees WHERE last_name LIKE "_a%";

考虑前后 __不要空格

练习4: 查询第二个字符是下划线且第三个字符是a的员工信息

SELECT last_name FROM employees WHERE last_name LIKE "_\_a%";

用转移字符 \

escape 设置转义符   escape '$'    $_(了解)

5.2.8  regexp / rlike :正则表达式

1 ‘^’ 匹配以该字符后面的字符开头的字符串。
2 ‘$’ 匹配以该字符前面的字符结尾的字符串。
3 ‘.’ 匹配任何一个单字符。
4 “[...]” 匹配在方括号内的任何字符。例如, “[abc]” 匹配 “a” “b” “c” 。为了命名字符的范围,使用一
‘-’ “[a-z]” 匹配任何字母,而 “[0-9]” 匹配任何数字。
5 ‘*’ 匹配零个或多个在它前面的字符。例如, “x*” 匹配任何数量的 ‘x’ 字符, “[0-9]*” 匹配任何数量的数字,
“*” 匹配任何数量的任何字符
例:SELECT 'shkstart' REGEXP '^s', 'shkstart' REGEXP 't$', 'shkstart' REGEXP 'hk';//111
SELECT 'atguigu' REGEXP 'gu.gu', 'atguigu' REGEXP '[ab]'; //11

5.3 逻辑运算符  或且非 or || and && not !    xor 异或(只满足一个)

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
注意:
OR可以和AND一起使用,但是在使用时要注意两者的优先级,由于AND的优先级高于OR,因此先
对AND两边的操作数进行操作,再与OR中的操作数结合。
4 .逻辑异或运算符 逻辑异或(
XOR )运算符是当给定的值中任意一个值为 NULL 时,则返回 NULL ;如果
两个非 NULL 的值都是 0 或者都不等于 0 时,则返回 0 ;如果一个值为 0 ,另一个值不为 0 时,则返回 1  不同就返回1

5.4 位运算符(用的比较少,了解) & | ^ 

六.运算符的优先级 

# 1.选择工资不在5000到12000的员工的姓名和工资
SELECT last_name,salary 
FROM employees
WHERE salary NOT BETWEEN 5000 AND 12000;
SELECT last_name,salary 
FROM employees
WHERE salary <5000 OR salary >12000;
# 2.选择在20或50号部门工作的员工姓名和部门号 
SELECT last_name,department_id 
FROM employees
WHERE department_id IN (20,50);
# 3.选择公司中没有管理者的员工姓名及job_id 
SELECT last_name,job_id
FROM employees
WHERE manager_id IS NULL;
# 4.选择公司中有奖金的员工姓名,工资和奖金级别 
SELECT last_name,salary,commission_pct
FROM employees
WHERE commission_pct IS NOT NULL;
# 5.选择员工姓名的第三个字母是a的员工姓名 
SELECT last_name
FROM employees
WHERE last_name LIKE '__a%';
# 6.选择姓名中有字母a和k的员工姓名
SELECT last_name
FROM employees
WHERE last_name LIKE '%a%k%' OR last_name LIKE '%k%a%';
SELECT last_name
FROM employees
WHERE last_name LIKE '%a%' AND last_name LIKE '%k%';

# 7.显示出表 employees 表中 first_name 以 'e'结尾的员工信息 
SELECT first_name
FROM employees
WHERE first_name LIKE '%e';
SELECT first_name
FROM employees
WHERE first_name REGEXP 'e$';
#以e开头的
SELECT first_name
FROM employees
WHERE first_name REGEXP '^e';
# 8.显示出表 employees 部门编号在 80-100 之间的姓名、工种 
SELECT last_name,job_id
FROM employees
WHERE department_id >= 80 AND department_id <= 100;
# 9.显示出表 employees 的 manager_id 是 100,101,110 的员工姓名、工资、管理者id
SELECT last_name,salary,manager_id
FROM employees
WHERE manager_id IN (100,101,110);

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值