SQL分类
- DDL: 数据定义语言, 包括: 数据库向和表相关的SQL
- DML: 数据操作语言, 包括: 增删改查
- DQL: 数据查询语言, 只包括查询 select
- TCL: 事务控制语言, 包含和事务相关的内容
- DCL: 数据控制语言, 包含用户管理,权限分配相关SQL
*.sql 批处理文件
- 把老师的emp.zip解压出来得到一个emp.sql文件, 把这个文件放到某个盘的根目录 比如 D盘根目录, 然后在命令行执行以下指令
- 格式: source 路径; 举例: source d:/emp.sql;
- 测试:
- show databases; 检查里面是否多了一个empdb;
- show tables; 会出现两个表 emp 和dept
- select * from emp; 检查里面的数据
- 如果出现乱码执行 set names utf8;
数据类型
- 整数: int(m)和bigint(m) , bigint相当于Java中的long, m代表显示长度,m=5 存18 得到00018, 需要结合zerofill关键字使用
- 举例: create table t1(age int(5) zerofill);
- insert into t1 values(18);
- select * from t1;
- 浮点数: double(m,d) m代表总长度, d代表小数长度 m=5,d=3 23.123
- 举例: create table t2(price double(5,3));
- insert into t2 values(54.321);
- insert into t2 values(54.332211);
- insert into t2 values(5433.2211); //会报错或出现99.999
- 字符串:
- char(m): 固定长度, m=5 存"abc" 占5个字符长度, 执行效率略高,当存储内容长度固定时使用,比如:性别 m最大值255
- varchar(m):可变长度, m=5 存"abc" 占3个字符长度,更节省存储空间,m最大值65535, 长度在255以内的建议使用
- text(m):可变长度, m最大值65535 , 建议长度大于255时使用
- 日期:
- date:保存年月日
- time:保存时分秒
- datetime:保存年月日时分秒,默认值null
- timestamp(时间戳举例1970年1月1日的毫秒数):保存年月日时分秒,默认值为当前系统时间
- 测试:
- create table t3(t1 date,t2 time,t3 datetime,t4 timestamp);
- insert into t3 values(“2021-11-22”,“10:38:20”,null,null);
- insert into t3 values(null,null,“2021-11-22 10:38:20”,null);
主键约束
- 主键: 表示数据唯一性的字段称为主键
- 约束: 创建表时,给表字段添加的限制条件
- 主键约束:限制主键的值 唯一且非空.
- 举例: create table t4(id int primary key,name varchar(20));
- insert into t4 values(1,‘aaa’);
- insert into t4 values(1,‘bbb’); 报错 重复数据
- insert into t4 values(null,‘ccc’); 报错 不能为null
主键约束+自增
- 自增规则:从历史最大值+1
create table t5(id int primary key auto_increment,name varchar(20));
insert into t5 values(null,‘aaa’);
insert into t5 values(null,‘bbb’);
insert into t5 values(10,‘ccc’);
insert into t5 values(null,‘ddd’);
delete from t5 where id>=10;
insert into t5 values(null,‘eee’);
- truncate table t5; //把表删除 并重新创建 此时计数器才会清零
去重distinct
- 查询员工表中有哪几种不同的工作?
- select distinct job from emp;
- 查询员工表中有哪几个不同的部门id?
- select distinct dept_id from emp;
is null 和 is not null
- 查询没有上级领导的员工姓名
- select name from emp where manager is null;
- 查询有上级领导的员工姓名
- select name from emp where manager is not null;
and和or
- 多个条件同时满足时使用and
- 多个条件满足一个就可以时 使用or
- 查询1号部门工资高于2000的员工信息
- select * from emp where dept_id=1 and sal>2000;
- 查询3号部门的员工或者工资等于5000的员工信息
- select * from emp where dept_id=3 or sal=5000;
- 查询孙悟空和猪八戒的员工信息
- select * from emp where name=“孙悟空” or name=“猪八戒”;
比较运算符 > < >= <= = !=和<>
- 查询不是程序员的姓名和工资
select name,sal from emp where job!=“程序员”;
select name,sal from emp where job<>“程序员”;
两者之间between x and y 包含x和y
- 查询工资在2000到3000之间的员工信息
select * from emp where sal between 2000 and 3000;
select * from emp where sal not between 2000 and 3000; 范围取反
in关键字
- 当查询某个字段的值为多个值的时候使用in
- 查询工资为3000,1500,5000的员工信息
select * from emp where sal=3000 or sal=1500 or sal=5000;
select * from emp where sal in(3000,1500,5000);
- 查询孙悟空,猪八戒和白骨精的信息
select * from emp where name in(‘孙悟空’,‘猪八戒’,‘白骨精’);