+ - * / %...
select 1+1;
select 1-1;
select 1*1;
select 5/2; #保留小数
select 5 div 2; #取整
select 5/0; #null
select 5%2;
> < >= <= = !=
select 1=2;
select 1!=2;
select 1>2;
select 1<2;
select 1<>2;
and or !
select 1>2 and 1<2;
select 1>2 or 1<2;
select !(1>2);
& | ^
select 4&3;
select 4|3;
select 4^3;
语法格式:insert into tname[(fie1,fie2...)] values(val1,val2....);
#插入一条完整记录
insert into stu values('[email protected]','zs',18,'男','13678765435');
#插入记录: ls 20 女
insert into stu(age,sname,sex) values(20,'ls','女');
#插入三条记录(批量插入)
insert into stu(age,sname,sex) values(23,'ww','男'),(34,'zl','男'),(24,'haha','女');
#复制一张表 stu --> student
#1.创建student,结构类似(结构复制)
#2.查询stu表插入到student表中
#复制表结构
create table student select * from stu where 1=0;
#查询并且插入数据
insert into student select * from stu;
#复制表结构及其数据
create table stu1 select * from stu;
语法结构: update tname set fie1=val1,fie2=val2...[where condition]
(where后的条件字段必须唯一确定该条记录: 主键)
update stu set age=28 where sname='zs';
语法结构: delete from tname [where condition]
delete from stu where sname='haha';
1.什么是数据完整性?
数据的准确性和可靠性。
2.完整性约束:设计时应该添加约束保证数据的准确
实体完整性
实体:就是记录
保证记录是准确的,不重复的。
主键约束: primary key(唯一并且不能为空)
主键选择: 能够唯一,挑选非业务字段(无意义字段)
一张表只能有一个主键;主键可以是多个字段(联合主键)
语法:
创建表时添加约束
添加:
create table student(
sid int primary key,
sname varchar(20),
age int
);
添加2(更适合添加联合主键)
create table stu1(
sid int,
sname varchar(20),
age int,
primary key(sid)
);
修改表约束
alter table student add constraint PK_SID primary key(sid);
删除主键约束
alter table student drop primary key
唯一约束:unique(唯一)
语法:
创建表并添加约束:
create table student(
sid int primary key,
sname varchar(20),
age int,
card varchar(18) unique
);
修改表约束
alter table stu add constraint UQ_CARD unique(card);
主键自增:auto_increment(从1开始,每次增长1)
语法:
create table stu(
sid int primary key auto_increment,
sname varchar(20),
age int
);
注意:
自增不会由于删除而重置
delete和truncate的区别:
1.delete和truncate都是删除表中的数据,不影响表结构
2.delete不会重置自增,truncate重置自增
3.delete逐行删除,效率低于truncate
域完整性
域:字段
保证字段的值准确的
约束
类型约束:数据类型
非空约束: not null
默认值: default
create table student(
sid int primary key auto_increment,
sname varchar(20) not null,
sex varchar(3) default '男'
);
引用完整性
表之间数据参考准确性。
约束:
外键约束: foreign key
alter table student add constraint FK_CID foreign key(cid) REFERENCES classroom(cid);
说明:
外键取值范围必须在参照表主键范围内
主外键的名称可以不一致,但是约束必须一致。
select 查询字段(表达式)
from 表(视图,结果集...)
where 条件
group by 分组
having 检索
order by 排序
limit 限制结果
#1.查询emp表中所有的员工信息
select * from emp;
#2.在emp中查询所有员工的姓名和职位信息。
select ename,job from emp;
#3.在emp表中查询所有的20号部门的员工信息。
select * from emp where deptno=20;
#4.在emp中查询工资>2000的员工的姓名和工资。
select ename,sal from emp where sal > 2000;
#5.在emp表中查询工资在1000到2000之间的员工信息。(范围查询)
select * from emp where sal >=1000 and sal <=2000;
select * from emp where sal between 1000 and 2000;
#6.在emp表中查询员工编号为7788,7369,7521的员工信息。(集合查询)
select * from emp where empno = 7788 or empno=7521 or empno=7369;
select * from emp where empno in (7788,7521,7369);
#7.在emp表中查询所有的职位信息(去重)
select distinct job from emp;
#8.在emp中查询工资提升5%后的员工姓名及其工资。(别名:字段,表达式,表,结果集等)
# [as] 别名
select ename,sal*1.05 nsal from emp;
select e.ename,e.sal from emp e;
#9.在emp表中查询所有没有奖金的员工信息。(comm值为null)
select * from emp where comm is not null;
#10.在emp中查询工资最高的员工信息。
#1.倒序排序取第一个
#排序:order by 排序的字段(默认升序,asc|desc)
#工资一样按照编号降序排序
select * from emp order by sal desc,empno desc;
#2.限制结果查询(limit 开始索引,长度,仅适用于mysql)
select * from emp limit 0,5;
select * from emp order by sal desc limit 1;
#11.查询名称中包含s的员工信息。(模糊查询:like %:代表0到多个字符 _代表1位字符)
select * from emp where ename like '%s%';
select * from emp where ename like 's%';
select * from emp where ename like '%s';
#查询名称第三个字符为L的员工信息
select * from emp where ename like '__L%';
结果返回一条记录
分类
#数学函数
select PI();
select CEIL(-12.3); #向上取整
select FLOOR(-12.3); #向下取整
select ROUND(12.54,-1); #四舍五入
select abs(-10); #取绝对值
select RAND(); #随机数
select POW(2,3); #幂运算
select SQRT(25); #开方
#字符串函数
select LOWER(ename) from emp;
select LOWER('THIS IS');
select UPPER('this is');
select CONCAT('e-',ename) from emp;
select SUBSTR('abcdef',1,3);
select REPLACE('abcdef','cd','aa');
select TRIM(' a a ');
select LENGTH('aa');
select LPAD('abc',10,'*');
select RPAD('abc',10,'*');
#日期函数(获取时间日期,日期时间计算)
select NOW();
select SYSDATE();
select CURRENT_TIMESTAMP();
select CURRENT_TIME();
select CURRENT_DATE();
select YEAR(NOW());
select MONTH(date);
select DAY(date);
#日期计算
select DATE_ADD(NOW(),interval 2 MONTH);
select LAST_DAY(NOW());
count():统计数目
sum():求和
max()
min()
avg()
select count(*) from emp;
select count(1) from emp;
select count(comm) from emp;#统计非空字段数目
group by 分组条件
#求平均工资大于2000的部门编号和平均工资
select deptno,avg(sal) nsal from emp group by deptno having nsal > 2000;
#having和where区别
1.顺序不同:having在group 之后编译
2.having中可以使用聚合函数
实现数据加密
select MD5('root');
select SHA('root');
select PASSWORD('root');