+ - * / div
特殊:select 3/4;—0.75
select 3/0; ---Null
select 3 div 4; —0 div为整除,该运算符只取商的整数部分
比较运算符> < >= <= != = <>
select 1=1; 0表示false, 1表示true
逻辑运算符 and or !
与或非
十进制转二进制运算:
2的n次幂的二进制就是1后面有n个0
举例:
2的1次方(2)的二进制就是10
2的2次方(4)的二进制就是100
2的3次方(8)的二进制就是1000
2的n次幂减1的二进制就是n个1
举例:
2的1次方减1(1)的二进制就是1
2的2次方减1(3)的二进制就是11
2的3次方减1(7)的二进制就是111
口算:给一个十进制数100,它的二进制如何口算呢?100就是64加上32再加4,即
100=64+32+4=26+25+2^2
64的二进制是1000000,32的二进制是100000,4的二进制是100
三个数相加就是1000000+100000+100
结果不就是1100100吗?那么100的二进制不就是1100100吗?
1.位或运算符 ( | ) :对应的二进制位有一个或两个为 1 ,则该位的运算结果为 1 ,否则为 0
你也可以将 与运算理解为 + 法
1|2=3 1|2|4=7
2.位与运算符(&):对应的二进制位都为1,则该位的运算结果为1,否则为0
理解为判断
3&2 =1 ----3=1+2,由1和2组成,判断为1
3&4=0 -------3没有由4组成所以判断为0
3.位异或运算符(^):对应的二进制位不相同时,结果位1,否则为0
异或运算理解为 - 法
3^2=1 3^1=2
4.位左移运算符(<<):使指定的二进制位都左移指定的位数,左移指定位之后,左边高位的数值将被移出并丢弃,右边低位空出的位置用 0 补齐
5.位右移运算符 ( >> ) :使指定的二进制位都右移指定的位数,右移指定位之后,右边低位的数值将被移出并丢弃,左边高位空出的职位用 0 补齐
6.位取反运算符:将对应的二进制数逐位反转,即 1 取反后变 0 , 0 取反后变 1
DML(instert,update,delete)
insert(插入)
insert into studnet values(1,'zs',18);
--复制表结构
create table stu select * from student where 1=0;
--复制表数据
insert into stu select * from student;
update(修改)
update tbname set 字段=新值 [where 条件]
update studnet set age=age+1 where sanme='ww';
delete(删除)
delete from tbname [where 条件]
delete from student where sid = 5;
delete和truncate的区别
delete不会重置自增,truncate会重置
delete删除时行级删除。效率低,truncate效率高。
函数
select ABS(10); --绝对值
select CEIL(-12.3); --向上取整 -12
select FLOOR(12.5); --向下取整 13
select ROUND(12.5); --四舍五入 13
select ROUND(12.49,-1)--这里有个值得注意的地方是,d可以是负数,这时是指定小数点左边的d位整数位为0,同时小数位均为0;
select length(ename) from emp; ---获取字符串长度
select LOWER(ename) from emp; --转换为小写
select UPPER('this is an apple'); --转换为大小写
select substr('aabbcc',1,2); ---aa 从1开始
select lpad('smith',10,'*');----*****smith,左填充,开始字符串,总长度,填充的字符 select rpad('smith',10,'*');----右填充
select trim(' smi th') ;----去空格
select NOW(); --当前系统日期时间
select SYSDATE();
select CURRENT_DATE(); --当前日期
select CURRENT_TIME(); --当前时间
select YEAR('1998-09-09');----1998
select MONTH('1998-09-09');
select DAY('1998-09-08');
select DATE_ADD('1998-09-08',INTERVAL 2 YEAR); --2000-09-08
select count(*) from emp;--t统计记录数
select count(comm) from emp;--统计非空字段数目
select sum(sal) from emp; ---sum 求和
select avg(sal) from emp; --avg求平均数
select max(sal) from emp; --max最大数
select min(sal) from emp; --min最小数
gourp by 分组字段
---每个部门的平均工资
--group by 根据条件字段的值返回相应的记录数,在select子句中,只能出现聚合函数或者分组的条件字段。
select deptno,avg(sal) from emp group by depno;
--各个职位员工数?job
select job,count(*) from emp group by job;
having 将分组之后的结果集再次进行检索
--平均工资大于2000的部门编号,和平均工资
--执行顺序 group by --- select ---- having
select deptno,avg(sal) sal from emp group by deptno having sal >2000;
where 和having的区别?
where是先过滤在分组
having是先分组后在过滤
--加密函数 select MD5('root'); select SHA('root'); select PASSWORD('root');
外键的参考键必须是唯一性索引。主键约束和唯一性约束都是唯一性索引;不一定是别的表的主键。
--添加外键约束
alter table student add CONSTRAINT FK_CID FOREIGN KEY(cid) REFERENCES classroom(cid)