between … and …

where 子句中 between 1 and 2 必须左小右大 用在数字方面是闭区间 between … and …可以用在字符串中

null

不能使用 =null或者!=null 应该使用is null 和is not null nul值判断应该尽量避免,会导致索引失效
在数据库中只要数据表达式中有null出现,这个表达式结果就为null。意思是800+null=null.对其的处理由ifnull(待处理字段,处理结果)来进行处理

  1. select name,(sal+ifnull(comn,0) from emp;

and和or

and的优先级会高于or 建议不要使用or因为会导致索引失效

in 和not in

in和not in要慎用,可能会导致索引失效,对于连续值能用between就别用in

like

模糊查询,两关键字,%和 %代表任意多个字符,代表任意一个字符,如果需要转义使用\

order by

排序,默认是升序asc 降序是desc,多个条件使用直接使用,凭借

select name ,sal from emp order by sal desc,name asc;

别名

可以省略as 别名的使用与sql语句的执行顺序有关,比如
select name as a,sal from emp order by sal desc,a asc;
先执行from,然后执行select 在执行order by所以select子句中的别名可以在order中使用

分组函数

分组函数都是对“一组”数据进行操作。
分组函数还有个名字,多行处理函数,多行输入输出一行
分组函数自动忽略null,所以不用在where中添加 字段is not null
where子句中不能使用分组函数因为sql的执行顺序,
count 计数
sum 求和
avg 平均值
max 最大值
min 最小值

group by和having

group by:按照字段或者某些字段进行分组
having :having对分组之后的字段进行过滤 可以在这里使用分组函数,但为了效率尽量在where子句中进行过滤,可以避免重复过滤
分组函数一般和group by联合使用,分组函数会在group by执行后执行,然后以为group by 在where之后执行的,所以分组函数无法在where子句中执行
当使用group时,select中只能跟分组字段和分组函数,不能跟其他字段
多字段联合分组,直接使用,拼接

sql执行顺序和书写顺序

select 5
..
from 1
..
where 2
..
group by 3
..
having 4
..
order by 6
..

中止一条命令

键入/c或者ctrl+c ctrl+c的是windows的强行终止

distinct 去重

加在字段前去重,distinct必须出现在所有字段的最前方。并且多字段去重是所有字段相同的去重

表关联

内连接和外连接的区别

内连接,两张表都查询出来,AB表所有能匹配上的字段查询
外连接,两张表分主次,主要查询主表,如果有匹配不上的,次表自动生成null进行匹配
外连接分左外链接和右外连接。左外就是左边使主表,右外是右边是主表
a left join b
party 班级
姓名 班级编号 班级编号 班级姓名
luoz 1 1 高一1班
lijing null

select * from a left join b on a.班级编号 =b.班级编号 join c on a;

inner join

sql99的语法,把表关联提取出来,使结构更加清晰。inner可以省略

outer join

外连接,主表所有信息都会查出来,如果你需要查询的是信息是缺少的那一方,就查询附表
三个表以上的连接 a join b join c on … 是指a和b先连接,后生成的表在于c进行连接

EXISTS

用于判断子查询是否至少返回一条数据

#和SELECT * from mkt_resource a效果一样
SELECT * from mkt_resource a where   EXISTS (SELECT NULL);

#查询结果为null
SELECT * from mkt_resource a where not  EXISTS (SELECT NULL);

一些信息

多表查询时,表取别名效率会高,因为如果不取别名数据库需要查询多张表是否存在该字段

多表查询92语法相当于嵌套for循环,所有的匹配,显示符合要求的信息