MySQL笔记

SQL规范

MySQL 在 Windows 环境下是大小写不敏感的。
MySQL 在 Linux 环境下是大小写敏感的。

字符串型日期时间类型的数据可以使用单引号(’ ')表示。
列的别名,尽量使用双引号(" "),而且不建议省略AS

写的SQL语句全用大写。

root用户密码重置

1: 通过任务管理器或者服务管理,关掉mysqld(服务进程)
2: 通过命令行+特殊参数开启mysqld

mysqld -- defaults-file="D:\ProgramFiles\mysql\MySQLServer5.7Data\my.ini" --skip-grant-tables

3: 此时,mysqld服务进程已经打开。并且不需要权限检查
4: mysql -uroot 无密码登陆服务器。另启动一
个客户端进行
5: 修改权限表
(1)

use mysql;

(2)

update user set authentication_string=password('新密码') where user='root' and Host='localhost'; 

(3)

flush privileges; 

6: 通过任务管理器,关掉mysqld服务进程。
7: 再次通过服务管理,打开mysql服务。
8: 即可用修改后的新密码登陆。

空值参与运算

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

注意:Mysql中,空值不等于空字符串。
一个空字符串长度是0,一个空值的长度是空。空值是占用空间的。

运算符

1、算数运算符

加(+)、减(-)、乘(*)、除(/)或(DIV)和取模(%)或(MOD)运算。

整数 +或- 整数 = 整数
整数 +或- 浮点数 = 浮点数

  • 只表示两数相加。非数值类型相加,先转数值计算,转失败,按0计算。(字符串拼接用 CONCAT() 函数)

数 *或/ 整数1 = 原数
数 *或/ 浮点数1 = 浮点数
数 / 整数 = 浮点数
数 / 另一个数 当除不尽时 = 浮点数 (保留4位小数)
数 / 0 = NULL

2、比较运算符

比较运算符:为真返回1,为假返回0,其他返回NULL。
在这里插入图片描述

3、非符号类型运算符

在这里插入图片描述

ESCAPE 和 \(转义符)

回避特殊符号的:使用转义符。
使用\表示转义,要省略ESCAPE。如果不是\,则要加上ESCAPE。

SELECT job_id FROM jobs WHERE job_id LIKE ‘IT$_%ESCAPE '$';

REGEXP运算符

用于匹配字符串。
REGEXP运算符在进行匹配时,常用的有下面几种通配符:

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

SQL语句示例如下:
在这里插入图片描述

4、逻辑运算符

在这里插入图片描述

注意:AND的优先级高于OR!

5、位运算符

位运算符是在二进制数上进行计算的运算符。

位运算符会先将操作数变成二进制数,然后进行位运算,最后将计算结果从二进制变回十进制数。
在这里插入图片描述

排序

使用 ORDER BY 子句排序。
ASC(ascend): 升序(默认)
DESC(descend):降序

分页

第二个参数“行数”指示返回的记录条数。
LIMIT [位置偏移量,] 行数

--前10条记录:
SELECT * FROM 表名 LIMIT 0,10; 
或者
SELECT * FROM 表名 LIMIT 10;

--第11至20条记录: 
SELECT * FROM 表名 LIMIT 10,10;
--第21至30条记录: 
SELECT * FROM 表名 LIMIT 20,10;

MySQL 8.0中,“LIMIT 3 OFFSET 4” = “LIMIT 4,3;”

分页显式公式:*(当前页数-1)每页条数,每页条数

多表查询

1、等值连接 vs 非等值连接

等值连接:连接条件是 =
非等值连接:连接条件是 ><>=<=等。

2、自连接 vs 非自连接

自连接:自己连接自己。将一张表,以取别名的方式虚拟成两张表以代表不同的意义。进行自连接。

非自连接:自己连接别人。

3、内连接 vs 外连接

内连接:结果集中,只有符合条件的记录
外连接:结果集中,有符合条件的记录,还有左表 或 右表中符合条件的记录。

外连接分为:左外连接、右外连接、满(全)外连接。
左外连接: 返回满足连接条件的行,返回左表中不满足条件的行。没有匹配的行时, 结果表中相应的列为空(NULL)。
右外连接: 返回满足连接条件的行,返回右表中不满足条件的行。没有匹配的行时, 结果表中相应的列为空(NULL)。

SQL92 语法中采用(+)代表从表所在的位置。即左或右外连接中,(+) 表示哪个是从表
Oracle 对 SQL92 支持较好,而 MySQL 则不支持 SQL92 的外连接
SQL92 语法中,没有 满(全)外连接。

#左外连接 
SELECT last_name,department_name 
FROM employees ,departments 
WHERE employees.department_id = departments.department_id(+);

SQL92内连接语法:

SELECT 字段列表 
FROM A表 , B表 
WHERE 等其他子句;

SQL99内连接语法:

SELECT 字段列表 
FROM A表 INNER JOIN B表 
ON 关联条件 WHERE 等其他子句;

关键字 JOININNER JOINCROSS JOIN 的含义是一样的,都表示内连接

SQL99 左外连接

#实现查询结果是A 
SELECT 字段列表 
FROM A表 LEFT JOIN B表 
ON 关联条件 WHERE 等其他子句;

SQL99 右外连接

#实现查询结果是B 
SELECT 字段列表 
FROM A表 RIGHT JOIN B表 
ON 关联条件 WHERE 等其他子句;

SQL99 满外连接

MySQL不支持FULL JOIN,但是可以用 LEFT JOIN UNION RIGHT JOIN代替。

在这里插入图片描述

自然连接

在SQL92标准中:

SELECT employee_id,last_name,department_name 
FROM employees e JOIN departments d 
ON e.`department_id` = d.`department_id` 
AND e.`manager_id` = d.`manager_id`; 

等价于下边的自然连接:

在 SQL99 中你可以写成:

SELECT employee_id,last_name,department_name 
FROM employees e NATURAL JOIN departments d;

USING连接

当我们进行连接的时候,SQL99还支持使用 USING 指定数据表里的 同名字段 进行等值连接。但是只能配合JOIN一起使用。

SELECT employee_id,last_name,department_name 
FROM employees e JOIN departments d 
USING (department_id);

UNION

合并查询结果。
UNION操作符:返回两个查询的结果集的并集,去除重复记录。

UNION ALL操作符:返回两个查询的结果集的并集。不去重。

注意:执行UNION ALL语句时所需要的资源比UNION语句少。因为不去重。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值