整理SQL语法

整理部分容易忘记,且比较常用的语法

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)使用NULLNOT 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;

参考:
https://www.cnblogs.com/Turin…

    原文作者:SQL
    原文地址: https://segmentfault.com/a/1190000012726297
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞