zoukankan      html  css  js  c++  java
  • Day2 MySql函数以及单表查询

    SQL中的运算符

    算术运算符

    --算术运算符(子句)
    select 1+1;
    select 2-1;
    select 2*2;
    select 3/4;   --0.75
    select 3/0;   --NULL
    select 3 div 4; --0

    比较运算符> < >= <= != =

    --0表示false,1表示true
    select 1=1; --1
    select 1!=1; --0

    逻辑运算符  and or !

    select 1=1 and 1!=1;

    位运算符 | ^ &

    select 2|3;  --3
    select 2&3;  --2
    select 2^3;  --1

    DML(insert、update、delete)

    insert(插入)

    语法

    insert into tname[(字段…)] values(值…)

    例如

    --插入数据
    insert into student values(1,'zs',18);
    --只给部分字段添加值
    insert into student(sname,age) values('ls',19);
    --批量插入多条记录
    insert into student(sname,age) values('ww',19),('zs',18),('tq',20);
    --student表有数据,stu表复制student表数据
    --复制表结构
    create table stu select * from student where 1 = 0;
    --复制表数据
    insert into stu select * from student;

    update(修改)

    语法

    update tname set 字段=新值 [where 条件]

    例如

    --ww的年龄+1
    update student set age=age+1 where sname='ww';

    delete(删除)

    语法

    delete from tname [where 条件]

    例如

    delete from student where sid =5;

     delete和truncate的区别

    1. delete不会重置自增,truncate会重置

        2.delete删除是行级删除,一行一行删除,效率低;truncate效率高。

    DQL

    emp(员工)表

    dept(部门)表

    例如

    --查询所有数据(结果集)
    select * from emp;
    --查询部分字段  名称和工资
    select ename,sal from emp;
    --查询工资>2000的员工信息(单一条件查询)
    select * from emp where sal > 2000;
    --查询在20号部门且工资大于2000的员工信息(多个条件)
    select * from emp where deptno = 20 and sal > 2000
    --查询在20号部门或者工资大于2000的员工信息
    select * from emp where deptno = 20 or sal > 2000;
    --查询工资大于等于1000小于等于3000的员工信息(范围查询)
    select * from emp where sal >= 1000 and sal <= 3000;
    select * from emp where sal between 1000 and 3000;
    --查询员工编号为7788,7369,7521的员工信息(集合查询)
    select * from emp where empno = 7788 or empno = 7369 or empno=7521
    select * from emp where empno in (7788,7369,7521);
    --查询所有的职位信息(去重)
    select DISTINCT job from emp;
    --别名(字段,表)   [as] 别名
    select empno 员工编号,ename 员工姓名 from emp;
    select ename,sal*1.05 as sal from emp;
    select * from emp e;
    --查询所有没有奖金comm为null的员工信息(null的判断)
    select * from emp where comm is not null;
    --查询所有S打头的员工信息(模糊查询)  % 代表0到多个字符 _代表占一个字符
    select * from emp where ename like 'S%';
    --查询所有N结尾的员工信息(模糊查询)
    select * from emp where ename like '%N';
    --查询所有包含S的员工信息(模糊查询)
    select * from emp where ename like '%A%';
    --查询所有第二个字符为L的员工信息
    select * from emp where ename like '__L%';
    --排序(order by 字段 [asc] | desc)
    --升序排序
    select * from emp order by sal desc;
    --按照工资的降序排序,工资一样的按照empno的升序排序
    select * from emp order by sal desc,empno ASC
    --限制结果查询(limit m,n)  分页查询    m代表起始索引,n代表记录的数目
    --仅适用于mysql
    select * from emp limit 5,5;

    函数

    1.单行函数

    a)数学函数

    --数学函数
    select ABS(10);    --绝对值
    select CEIL(-12.3);  --向上取整
    select FLOOR(12.5);  --向下取整
    select ROUND(12.5);  --四舍五入
    select ROUND(12.49,-1);
    select POW(3,3);     --幂运算
    select RAND();     --随机数[0,1)

    b)字符函数

    --字符串函数
    select LENGTH(ename) from emp;  --获取字符串长度
    select length('this is an apple');
    select LOWER(ename) from emp;   --转换为小写
    select UPPER('this is an apple'); --转换大小写
    select SUBSTR('aabbcc',1,2);  --从1开始
    select LPAD('smith',10,'*');  --左填充 开始字符串   总长度   padstr填充的字符
    select RPAD('smith',10,'*');  --右填充
    select TRIM('      smi th');   --去空格

    c)日期函数

    --日期
    select NOW();
    select SYSDATE();
    select CURRENT_DATE();  --当前日期
    select CURRENT_TIME();  --当前时间
    select YEAR('1998-09-09');
    select MONTH('1998-09-09'); 
    select DAY('1998-09-08');
    select DATE_ADD('1998-09-08',INTERVAL 2 YEAR);

    2.聚合函数

    count、sum、avg、max、min

    --员工数(统计记录数)
    select * from emp;
    select count(*) from emp;
    select count(1) from emp;
    --统计非空字段数目
    select count(comm) from emp;
    --SUM
    select sum(sal) from emp;
    --AVG
    select avg(sal) from emp;
    --MAX
    select max(sal) from emp;
    --MIN
    select min(sal) from emp;

    3.分组函数

    group by 分组字段

    --分组函数  GROUP BY  deptno
    --每个部门的平均工资
    --group by根据条件字段的值返回相应的记录数;但是在select子句中,只能出现聚合函数或者分组的条件字段。
    select deptno,avg(sal) from emp group by deptno;
    --各个职位员工数? job
    select job,count(*) from emp group by job;

    having 将分组之后的结果集再次进行检索

    --平均工资大于2000的部门的部门编号和平均工资?
      --1.求出每个部门的平均工资
      --2.平均工资>2000
      select deptno,avg(sal) from emp group by deptno having avg(sal) > 2000;

    where和having的区别

    --查询工资大于1500的每个部门的部门编号和平均工资(先过滤再分组)
    select deptno,avg(sal) from emp where sal > 1500 group by deptno;
    --查询平均工资大于1500的部门编号和平均工资
    select deptno,avg(sal) from emp group by deptno having avg(sal) > 2000;

    4.加密函数

    MD5、SHA、PASSWORD

    --加密函数 
    select MD5('root');
    select SHA('root');
    select PASSWORD('root');

    外键约束

    --添加外键约束
    alter table student add CONSTRAINT FK_CID FOREIGN KEY(cid) REFERENCES classroom(cid)
  • 相关阅读:
    mysql8.0 一次性备份导出/导入恢复所有数据库
    访问服务器共享资源不需要输帐号和密码
    win7 系统 提示用户'sa'登录失败
    Adoquery.disablecontrols和enablecontrols
    DBGridEh 导出数据到EXCEL文件
    Microsoft SQL Server 2005资料库(数据库)卸载方法
    64位操作系统下创建组件失败的解决办法
    U盘中的文件为什么看不见?
    解决错误提示unable to invoke code completion due to errors in source cord.
    浪潮服务器Windows Server系统异常断电导致系统中CentOS7虚拟机系统崩溃无法正常启动grub2故障修复error: relocation 0x48 is not implemented yet
  • 原文地址:https://www.cnblogs.com/qingyunzong/p/8277607.html
Copyright © 2011-2022 走看看