一、Mysql常用命令:
1.基础命令:
打开:mysql -uroot -p password:root
退出:exit
查看数据库:show databases; [ ; 英文分号结尾]
创建数据库:create database bjpowernode(数据库名字);
选择数据库:use bjpowernode(数据库名字);
查看当前使用的数据库:select database();
导入一下提前准备好的数据:source D:\course\03-MySQL\document\bjpowernode.sql(文件路径)表中相关命令:
2.表格:
查看表中的数据:select * from emp(表名);
查看表的结构:desc dept(表名);
3.简单查询:
查询一个字段:select dname(字段名) from dept(表名);
查询两个字段,或者多个字段:select deptno,dname from dept;//使用逗号隔开“,”
查询所有字段:select a,b,c,d,e,f... from tablename;
给查询的列起别名:select deptno,dname as deptname from dept;//select语句是永远都不会进行修改操作的(因为只负责查询)
假设起别名的时候,别名里面有空格:select deptno,dname 'dept name' from dept; //加单引号
计算员工年薪:select ename,sal*12 from emp; // 结论:字段可以使用数学表达式! select ename,sal*12 as '年薪' from emp; //别名是中文,用单引号括起来。
4.条件查询:
▲语法格式:select字段1,字段2,字段3... from表名where条件;
= 等于 <>或!= 不等于 < 小于 <= 小于等于 > 大于 >= 大于等于
between … and …. 两个值之间, 等同于 >= and <= is null 为 null(is not null 不为空) and 并且 or 或者
in 包含,相当于多个 or (not in 不在这个范围中) like 模糊查询
= 查询薪资等于800的员工姓名和编号:select empno,ename from emp where sal = 800;
查询SMITH的编号和薪资:select empno,sal from emp where ename = 'SMITH'; //字符串使用单引号
!= 查询薪资不等于800的员工姓名和编号:select empno,ename from emp where sal != 800;
查询薪资在2450和3000之间的员工信息:select empno,ename,sal from emp where sal between 2450 and 3000;//使用between and的时候,必须遵循左小右大。(between and是闭区间,包括两端的值。)
or 查询工作岗位是MANAGER和SALESMAN的员工:select empno,ename,job from emp where job = 'MANAGER' or job = 'SALESMAN';//and 优先级比or 高,如果想让or先执行,需要加“小括号”。
in 查询工作岗位是MANAGER和SALESMAN的员工:select empno,ename,job from emp where job in('MANAGER', 'SALESMAN');//in不是一个区间,in后面跟的是具体的值。
like 找出名字中含有O的:select ename from emp where ename like '%O%';
找出名字以T结尾的:select ename from emp where ename like '%T';
找出第二个字每是A的:select ename from emp where ename like '_A%';
找出名字中有“_”的:select name from t_student where name like '%\_%'; // \转义字符。
5.排序:
▲select ... from ... where ... order by...
▲执行顺序:from where select order by(排序总在最后执行)
查询所有员工薪资,排序:select ename,sal from emp order by sal (asc); //默认是升序!
怎么降序:select ename,sal from emp order by sal desc;
查询员工名字和薪资,要求按照薪资升序,如果薪资一样的话,再按照名字升序排列:select ename,sal from emp order by sal asc, ename asc; // sal在前,起主导,只有sal相等的时候,才会考虑启用ename排序。
(综合)找出工资在1250到3000之间的员工信息,要求按照薪资降序排列:select enmae,sal from emp where sal between 1250 and 3000 order by sal desc;
6.单行处理函数:
lower转换小写:select lower(ename) as ename from emp;
upper转化大写:select upper(name) as name from t_student;
substr取子串:select substr(ename,1,1) as ename from emp;//substr(被截取的字符串,起始下标,截取的长度) 起始下标从1开始,没有0.
找出员工名字第一个字母是A的员工信息:①模糊查询:select ename from emp where ename like ‘A%’; ②substr函数:select ename from emp where substr(ename,1,1) = ‘A’;
concat函数进行字符串的拼接:select concat(empno,ename) from emp;
length取长度:select length(ename) enamelength from emp;
trim去空格:select * from emp where ename = trim(‘ KING’);
str_to_date将字符串转换成日期
date_format格式化日期
format设置千分位
case..when..then..when..then..else..end:当员工的工作岗位是MANAGER的时候,工资上调10%,当工作岗位是SALESMAN的时候,工资上调50%,其它正常(注意:不修改数据库,只是将查询结果显示为工资上调):select ename,job,sal as oldsal,(case job when ‘MANAGER’then sal*1.1 when ‘SALESMAN’then sal*1.5 else sal end) as newsal from emp;
round四舍五入:select round(36.567, 0) as result from emp; //保留整数位。
select round(1236.567, 1) as result from emp; //保留1个小数
select round(1236.567, -1) as result from emp; // 保留到十位。
select 字段(字面量/字面值) from 表名; select 'abc' as bieming from emp;// select后面可以跟某个表的字段名(可以等同看做变量名),也可以跟字面量/字面值(数据)。
rand()生成随机数:select round(rand()*100,0) from emp; // 100以内的随机数
ifnull 可以将 null 转换成一个具体值(在所有数据库当中,只要有NULL参与的数学运算,最终结果就是NULL):ifnull(数据, 被当做哪个值) select ename, (sal + ifnull(comm, 0)) * 12 as yearsal from emp;
7. 分组函数(多行处理函数):
多行处理函数的特点:输入多行,最终输出一行。(count计数 sum求和 avg平均值 max最大值 min最小值)//分组函数在使用的时候必须先进行分组,然后才能用。如果你没有对数据进行分组,整张表默认为一组。
找出最高工资:select max(sal) from emp;
找出最低工资:select min(sal) from emp;
计算工资和:select sum(sal) from emp;
计算平均工资:select avg(sal) from emp;
计算员工数量:select count(ename) from emp;
分组函数注意:①分组函数自动忽略NULL,你不需要提前对NULL进行处理。select count(comm) from emp;
②分组函数中count(*)和count(具体字段)的区别:
count(具体字段):表示统计该字段下所有不为NULL的元素的总数。 、count(*):统计表当中的总行数。(只要有一行数据count则++)因为每一行记录不可能都为NULL,一行数据中有一列不为NULL,则这行数据就是有效的。
select count(*) from emp; select count(comm) from emp;
③分组函数不能够直接使用在where子句中。
④所有的分组函数可以组合起来一起用。
8.分组查询:
▲select ... from ... where ... group by…having…order by...
▲执行顺序:from where group by having select order by(排序总在最后执行)
找出每个工作岗位的工资和:select job,sum(sal) from emp group by job;// 在一条select语句当中,如果有group by语句的话,select后面只能跟 参加分组的字段,以及分组函数,其它的一律不能跟。
找出每个部门的最高薪资:select deptno,max(sal) from emp group by deptno;
找出“每个部门,不同工作岗位”的最高薪资:select deptno, job, max(sal) from emp group by deptno, job;// 两个字段联合成1个字段看。(两个字段联合分组)
使用having可以对分完组之后的数据进一步过滤(having不能单独使用,having不能代替where,having必须和group by联合使用)
找出每个部门最高薪资,要求显示最高薪资大于3000的:①select deptno,max(sal) from emp group by deptno; select deptno,max(sal) from emp group by deptno having max(sal) > 3000;
②select deptno,max(sal) from emp where sal > 3000 group by deptno;// where和having,优先选择where,where实在完成不了了,再选择having。
二、关于SQL语句的分类:
SQL语句有很多,最好进行分门别类,这样更容易记忆。
分为:DQL DML DDL TCL DCL
DQL:数据查询语言(凡是带有select关键字的都是查询语句)select...
DML:数据操作语言(凡是对表当中的数据进行增删改的都是DML)
insert 增delete 删update 改 这个主要是操作表中的数据data。
DDL:数据定义语言(凡是带有create、drop、alter的都是DDL。)
主要操作的是表的结构。不是表中的数据。
create:新建,等同于增 drop:删除 alter:修改
这个增删改和DML不同,这个主要是对表结构进行操作。
TCL:是事务控制语言
包括:事务提交:commit; 事务回滚:rollback;
DCL:是数据控制语言。
例如:授权grant、撤销权限revoke....