目录
1.SQL的分类:
2.一些基本操作
3.SQL底层执行原理
4.一些常用的关键字
5.多表查询
6.HAVING和WHERE
7.运算符
8.约束
9.创建外键
10.存储过程与函数
11.变量,流程控制与游标
前言:
哈喽啊,大家好今天我带来的是一些初学MySQL时期的笔记,知识点可能比较零碎,如有错误欢迎各路大佬指正!!后面博主会出一些详细讲解知识点的文章,欢迎大家支持!您的点赞+关注就是我更新的动力!
DDL:数据定义语言。
例如:CREATE\ALTER\DROP\RENAME\TRUNCATE
DML:数据操作语言。
例如:INSERT(增)\DELETE(删)\UPDATE(改)\SELECT(查)
DCL:数据控制语言。
例如:COMMIT\ROLLBACK\SAVEPOINT\GRANT\REVOKE
修改表:ALTER TABLE
修改列数据类型 ALTER TABLE EWQ MODIFY
重命名列 CHANGE 重命名表 RENAME 删除DROP
CREATE 创建 UPDATE ewq (更新表)
SET ema = 777
WHERE id = 1
添加数据INSERT INT EWQ VALUES
SHOW INDEX FROM employees 查看表索引
View:视图
Create or replace view:创建或修改视图
SQL92语法:
SELECT …,…,…(存在聚合函数)
FROM …,…,…
WHERE 多表的连接条件 AND 不包含聚合函数的过滤条件
GROUP BY …,…
HAVING 包含聚合函数的过滤条件
ORDER BY …,… (ASC\DESC)
LIMIT …,…
SQL99语法:
SELECT …,…,…(存在聚合函数)
FROM …(LEFT/RIGHT)JOIN…ON…多表的连接条件
WHERE 不包含聚合函数的过滤条件
GROUP BY …,…
HAVING 包含聚合函数的过滤条件
ORDER BY …,… (ASC\DESC)
LIMIT …,…
SQL语句执行过程:
FROM-ON-(LEFT\RIGHT)JOIN-WHERE-GROUP BY-HAVING-SELECT-DISTINCT-ORDER BY-LIMIT
SELECT … FROM…: 查询字段… 表为…
DISTINCT:删除重复行
IFNULL:如果为空 格式:IFNULL(表名,0或1)
``:着重号 若表名与关键字重复,可用着重号
DESCRIBE(DESC):显示表的结构
WHERE:过滤数据 格式:声明在FROM后面
SELECT * FROM employees WHERE last_name = 'weiss';
ORDER BY (ASC):默认升序排序 从低到高
ORDER BY (字段名) DESC(降序) 从高到低
格式:WHERE声明再FROM后,ORDER BY之前
例:SELECT *
FROM dep
WHERE dep
ORDER BY dep;
二级排序:ORDER BY dep DESC,sla ASC;(dep降序,sla升序)
LIMIT: 分页
需求:每页显示pagesize条记录,此时显示pageno页
公式:LIMIT(pageno-1)*pagesize,pagesize;
WHERE、ORDER BY ,LIMIT声明如下:
SELECT*
FROM emp
WHERE salary>60
ORDER BY salary DESC
LIMIT 0,10;(0可以省略)
JOIN:
如果过滤条件中出现了聚合函数那么必须使用having来替换where
HAVING必须声明在group by后面
使用having的前提是使用了group by
Having不可以单独使用 必须跟group by
HAVING和WHERE对比
1.从适用范围看,HAVING更广
2.如果过滤条件中没有聚合函数 WHERE 的执行效率高于HAVING
一、比较运算符: =,<=>,<>,!=,<,<=,>,>=
<=>:只要有null参与判断,结果就为null
二、运算符:
IS NULL、IS NOT NULL、ISNULL:判断为空的数据
LEAST()、GREATEST:判断最大、最小
BETWEEN…AND:查询…到…范围的数据
例:查询salary 6000到8000的数据
方法一:WHERE salary BETWEEN 6000 AND 8000
方法二:WHERE salary>=6000 && 8000<=salary
查询salary不在6000到8000的数据
方法一:WHERE salary NOT BETWEEN 6000 AND 8000
方法二:WHERE salary <6000 OR salary >8000
IN(set)、not in(set)
例:查询字段(dep)为10,20,30的数据
方法一:WHERE dep = 10 OR dep = 20 OR dep = 30;
方法二:WHERE dep IN (10,20,30);
查询工资不是6000,7000,8000的信息
WHERE salary NOT IN (6000,7000,8000);
LIKE 模糊查询
例:查询名字中包含字符‘a’的员工信息
WHERE name LIKE ‘%a%’
%:代表不确定个数的字符
WHERE name LIKE ‘a%’:以a开头
WHERE name LIKE ‘a’:名字为a
例:查询包含a且包含e的信息
WHERE name LIKE ‘%a%’AND name LIKE‘%e%’;
_代表一个不确定的字符
例:查询第二个字符是a的信息
WHERE name LIKE ‘_a&’;
\:转义字符
例:查询第二个字符是_且第三个字符是a的信息
WHERE name LIKE ‘_\_a%’;
:REGEXP:正则表达式
例:以luo开头,g结尾,包含lp
SELECT ‘luopeng’ REGEXP ‘^luo’,
‘luopeng’REGEXP ‘g$’,‘luopeng’REGEXP ‘lp’
三、逻辑运算符
OR、&&、||、AND、NOT、!、XOR
XOR:异或
AND优先级高于OR
Not null:非空约束 create table:创建表时添加约束
Unique:唯一性约束 a Alter table:修改表时添加或者删除约束
Primary key:主键约束
Foreign key:外键约束
建议:foreign key (表) REFRRENCES ((表)关键字段) on update cascade on delete restrict
Check:检查约束
Default:默认值约束
Auto_increment:自增约束
ALTER TABLE orders
ADD CONSTRAINT fk_id FOREIGN KEY(c_id) REFERENCES customers_info(c_num)
存储过程语法:
DELIMITER ($)
CREATE PROCEDURE 存储过程名(IN\OUT\INOUT 参数 参数类型,)
BEGIN
存储过程体
END($)
DELIMITER ;
存储过程的调用:call
存储函数语法:
DELIMITER ($)
CREATE FUNCTION (函数名 参数类型)
RETURNS 返回值类型,特性
BEGIN
RETURN( 函数体);
END($)
DELIMITER ;
全局变量:global
针对所有会话(连接)有效,但不能重启
会话系统变量:session
查看变量:
SHOW GLOBAL VARIABLES (全局) SHOW SESSION(可省略)VARIABLES(会话)
SHOW GLOBAL VARIABLES LIKE ‘’(查询部分系统变量)
SELECT @@global.max_connections(查看指定系统变量)
修改变量:
全局修改 SET @@GLOBAL.()=() SET GLOBAL ()=()
SET仅针对服务器实例有效,一旦重启服务就失效
会话修改 SET @@session.()=() SET SESSION ()=()
二、用户变量
会话用户变量:使用@开头,作用域为当前会话
局部变量:只能使用在存储过程和存储函数中
局部变量必须使用DECLARE声明
声明并使用在BEGIN……END中(使用在存储过程或函数中)
DECLARE方式声明局部变量必须声明在BEGIN中的首行位置