1.列约束
(1)唯一约束 —— unique
声明了唯一约束的列上不允许插入重复的值,允许插入null,甚至多个null
练习:在family表的fname列上同时添加唯一约束和非空约束,并插入数据测试
(2)默认值约束——default
可以使用default关键字来设置默认值,如果不设置默认值,则默认值为null,具体应用默认值有两种方式
insert into laptop values(1, '小米Air', default...);
insert into laptop(lid, title) values(2, '燃7000'); #没有出现的列会自动使用默认值
练习:删除family表下fname的约束,添加默认值约束,设置默认值为“未知”,插入数据测试。
(3)检查约束 —— check
也称为自定义约束,用户可以添加自定义的约束条件
create table student(
score tinyint check(score>=0 and score<=100)
);
mysql不支持检查约束,后期可以通过JS来实现
(4)外键约束
声明了外键约束的列上要插入的值必须在另一个表的主键列中出现过,两者的列类型要保持一致
外键约束允许插入null
foreign key(外键列) references 另一个表(主键列)
2.自增列
auto_increment:自动增长,设置了自增列,在插入数据的时候,只需要赋值为null,就会获取最大值然后加1插入
注意事项:
自增列必须添加在整数形式的主键列
自增列允许手动赋值
练习:编写脚本文件01_tedu.sql,先丢弃再创建数据库tedu,设置编码为utf8,进入数据库,创建保存部门数据的表dept,包含的列编号did(主键、自增),部门名称dname(唯一约束),插入以下数据
10 研发部 20 运营部 30 市场部 40 测试部
创建保存员工数据的表emp,包含的列编号eid(主键,自增),姓名ename(非空约束),性别sex(默认值约束),生日birthday,工资salary,所属部门编号deptid(外键约束),插入若干条数据
3.简单查询
(1)查询特定的列
示例:查询出所有员工的编号和姓名
select eid,ename from emp;
练习:查询出所有员工的姓名,性别,生日,工资
select ename,sex,birthday,salary from emp;
(2)查询所有的列
select eid,ename,sex,birthday,salary,deptId from emp;
select * from emp;
(3)给列起别名
示例:查询出所有员工的编号和姓名,使用一个字母作为别名
select eid as a,ename as b from emp;
练习:查询出所有员工的姓名,工资,所属部门编号,使用别名
select ename e,salary s,deptId d from emp;
as 用来设置别名
as关键字可以省略,保留空格即可
(4)显示不同的记录
示例:查询出都有哪些性别的员工
select distinct sex from emp;
练习:查询出员工都分布在哪些部门
select distinct deptId from emp;
distinct 不同的,有区别
(5)查询时执行计算
示例:计算2+3+4*5*6+4.3*5.5
select 2+3+4*5*6+4.3*5.5;
练习:查询出所有员工的姓名及其年薪
select ename,salary*12 from emp;
练习:假设每个员工的工资增长2000,年终奖20000,查询出所有员工的姓名及其年薪,使用别名
select ename 姓名,(salary+2000)*12+20000 年薪 from emp;
(6)查询的结果排序
示例:查询出所有的部门,结果按照编号升序排列
select * from dept order by did asc; #ascendant升序的
示例:查询出所有的部门,结果按照编号降序排列
select * from dept order by did desc;
describe 描述
descendant 降序的
练习:查询出所有的员工,结果按照工资的降序排列
select * from emp order by salary desc;
练习:查询出所有的员工,结果按照生日升序排序
select * from emp order by birthday asc;
练习:查询出所有的员工,结果按照姓名升序排列
select * from emp order by ename;
按照字符串排序,按照首个字符的编码排列,如果相同再比较后边的字符
不加排序规则默认是按照升序排列
练习:查询出所有的员工,结果按照工资的降序排列,如果工资相同按照姓名排列
select * from emp order by salary desc,ename;
练习:查询出所有的员工,女员工显示在前,性别相同按照年龄从大到小排列
select * from emp order by sex,birthday;
(7)条件查询
示例:查询出编号为3的员工
select * from emp where eid=3;
练习:查询出姓名为king的员工
select * from emp where ename='king';
练习:查询出工资在5000以上员工有哪些
select * from emp where salary>5000;
比较运算符:> < >= <= = !=(不等于)
练习:查询出不在10号部门的员工有哪些
select * from emp where deptId!=10;
练习:查询出没有明确部门的员工有哪些
select * from emp where deptId is null;
练习:查询出有明确部门的员工有哪些
select * from emp where deptId is not null;
练习:查询出工资在5000以上的女员工有哪些
select * from emp where salary>5000 and sex=0;
select * from emp where salary>5000 && sex=0;
练习:查询出工资在5000~8000之间的员工有哪些
select * from emp where salary>=5000 and salary<=8000;
练习:查询出工资在5000以下或者8000以上的员工有哪些
select * from emp where salary<5000 or salary>8000;
and(&&) 并且,两个条件都要满足
or(||) 或者,两个条件只需要满足一个
练习:查询出1993年出生的员工有哪些
select * from emp where birthday>='1993-1-1' and birthday<='1993-12-31';
练习:查询出在20号部门或者30号部门员工有哪些
select * from emp where deptId=20 || deptId=30;
select * from emp where deptId in(20,30);
练习:查询出不在20号,并且不在30号部门的员工有哪些
select * from emp where deptId!=20 and deptId!=30;
select * from emp where deptId not in(20,30);
(8)模糊条件查询
用于搜索的时候
示例:查询出姓名中含有字母e的员工有哪些
select * from emp where ename like '%e%';
练习:查询出姓名中倒数第2个字符是e的员工有哪些
select * from emp where ename like '%e_';
% 匹配任意个字符 >=0
_ 匹配任意1个字符 =1