整理部分容易忘记,且比较常用的语法
1、关于NULL
,这里之所以先说NULL,因为在开发中遇到不少坑。下面罗列几个需要注意的点,如果还有其他坑,后面遇到会继续补齐
(1)=
及!=
不能用于NULL的筛选。举个例子,假如有一个sql查询根据A列进行条件查询,A列含有NULL值,那么使用=
及!=
这两种逻辑判断不能筛选出A字段为NULL的行。
如图:图片描述
上图中,第4行记录的user_sex字段为NULL,假设使用查询语句select user_id from user_info where user_sex != -1;
,是不会筛选出第4行记录,使用=
同理。结果如图:
图片描述
(2)使用NULL
及NOT NULL
的筛选,使用is
2、left join on
左连接
(1)LEFT JOIN 关键字会从左表 (table_name1) 那里返回所有的行。在右表 (table_name2) 中没有匹配的行,则右表的所有字段显示为NULL。
(2)left join on where
:在左连接的基础上,进行where条件筛选,如果筛选条件的字段的值含有NULL
,将不会被筛选出来。如果想全部筛选出来,可以使用增加条件or A is null
,注意,这里使用or进行条件的连接。
(3)right join on
同理,因此不做累述
3、inner join on
内连接、等值连接
(1)只返回两个表中联结字段相等的行。也就是说,比如两张表中都有满足连接条件的值,才能够被筛选出来,如果其中某一行在另外一张表找不到不匹配的行,那么这一行就不会显示出来。
4、on duplicate key update
:
(1)解释:
查看 UNIQUE索引或PRIMARY KEY 对应的行是否存在,存在则更新(执行on duplicate key update后面的语句),不存在则插入新行。
(2)实例:
INSERT INTO table (a,b,c) VALUES (1,2,3) ON DUPLICATE KEY UPDATE c=c+1;
// 这里a是主键,查看a=1的行是否存在,存在则更新,否则插入
5、desc
倒序、asc
正序(默认)
6、limit m,n
:
(1)解释:从m+1开始,取n条记录
(2)使用场景:分页
7、where、group by、having
执行次序:
(1)where是对FROM指定的数据对象(基本表或者视图)进行过滤,选择满足条件的元组。如果后面接着group,则对where筛选出来的数据进行分组,having则是对分组以后的分组进行过滤。
8、存储过程:
(1)声明变量、循环:
DELIMITER ;;
CREATE PROCEDURE `students_count3`()
BEGIN
declare num int;
set num = 1;
while num <= 1000000 do
select count(1) from user_info;
SET num = num + 1;
end while;
END;;
DELIMITER ;
call students_count3();
9、查看运行时间:
(1)select @@profiling;
:查看是否开启
(2)set profiling=1;
: 开启
(3)show profiles;
: 查看之前sql语句运行的时间
10、索引:
(1)添加普通索引: alter table table_name add index index_name(column)
(2)添加唯一索引:alter table table_name add unique index_name(column)
11、增加字段:alter table table_name add field_name field_type;
12、删除字段:alter table table_name drop column field_name;
13、更改值:update user_info set user_sex = '-1' where user_id = 1;