增强查询
where判断条件可比较日期,可用like进行模糊操作
判断某一列值是否为null应该用“IS”而不是“=”
order by排序数据
增强group by的查询
如果select语句同时有group by、having、limit、order by 那他们的顺序是group by、having、order by、limit
分页查询
多表查询
多表查询的筛选条件不得少于表的个数-1否则会出现笛卡尔集
自连接
自连接是单个表当做多个表来查,即复制多个同一张表来查
在查询时表名要用别名这里以查询emp表为例:
SELECT * FROM emp AS 别名1,emp AS 别名2,.....WHERE .....
重点在于where语句的编写来筛查笛卡尔集
子查询
子查询就行嵌套在别的sql语句中的select语句,也叫嵌套查询
括号里的select查询语句查询到的是smith的员工编号,作为第一个select的判断条件,因为内层查询语句只返回一行语句因此也称为单行子查询。
当内层select返回多行结果时,外层select的where要用in关键词,称为多行子查询。
内层查询若返回多行结果可视为一张临时表,可以和别的表进行多表查询
all和any
all表示所有,any表示任意一个即可
多列子查询
基本用法:(字段1,字段2) = (select 字段1,字段2 from .....)
表的复制

表的去重
思路:
1)先创建一张临时表my_temp,该表的结构和原表一致
2)把my_temp的记录通过distinct关键字处理后把记录复制到my_temp
3)把原表记录清除掉
4)把my_temp表的记录复制到原表上
5)drop掉临时表my_temp
外连接
左外连接:即使左侧的表与右侧表没有匹配的记录仍完全显示了左侧表则称为左外连接
select .. from 表1 left join 表2 on 条件 【此时表1是左表表2是右表】
右外连接:即使右侧的表与左侧表没有匹配的记录仍完全显示了右侧表则称为右外连接
select .. from 表1 right join 表2 on 条件 【此时表1是左表表2是右表】
约束
主键 Primary key
主键相当于一行数据的身份证号,不允许重复且不能为null,唯一标识该行数据
在创建表时唯一定义某属性为主键,即在后面加上关键字 Primary key
一张表只能有一个主键但是可以有复合主键,即定义多个属性同时作为主键
DESC 表名 可以查看表的结构,同时也会显示约束情况。
非空 not null
字段名 字段类型 not null 加上非空关键字后该列不能为空
唯一 unique
字段名 字段类型 unique 定义唯一约束后,该列的值不能有重复的
如果该列没有指定not null 则unique字段可以有多个null,而unique not null 效果上类似primary key
一张表可以有多个unique字段
外键 foreign key
外键约束要定义在从表上,主表则必须具有主键约束或unique约束,当定义外键约束后,要求外键列数据必须在在主表的主键列存在或是为null。
语法:foreign key (从表某字段)references 主表名(主表主键或某个unique字段)
细节